diff --git a/README.md b/README.md index 13183a257..7f6d19af7 100644 --- a/README.md +++ b/README.md @@ -31,13 +31,23 @@ Follow these steps to get started using these resources: [Arabic](./translations/ar/README.md) | [Bengali](./translations/bn/README.md) | [Bulgarian](./translations/bg/README.md) | [Burmese (Myanmar)](./translations/my/README.md) | [Chinese (Simplified)](./translations/zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](./translations/zh-HK/README.md) | [Chinese (Traditional, Macau)](./translations/zh-MO/README.md) | [Chinese (Traditional, Taiwan)](./translations/zh-TW/README.md) | [Croatian](./translations/hr/README.md) | [Czech](./translations/cs/README.md) | [Danish](./translations/da/README.md) | [Dutch](./translations/nl/README.md) | [Estonian](./translations/et/README.md) | [Finnish](./translations/fi/README.md) | [French](./translations/fr/README.md) | [German](./translations/de/README.md) | [Greek](./translations/el/README.md) | [Hebrew](./translations/he/README.md) | [Hindi](./translations/hi/README.md) | [Hungarian](./translations/hu/README.md) | [Indonesian](./translations/id/README.md) | [Italian](./translations/it/README.md) | [Japanese](./translations/ja/README.md) | [Kannada](./translations/kn/README.md) | [Korean](./translations/ko/README.md) | [Lithuanian](./translations/lt/README.md) | [Malay](./translations/ms/README.md) | [Malayalam](./translations/ml/README.md) | [Marathi](./translations/mr/README.md) | [Nepali](./translations/ne/README.md) | [Nigerian Pidgin](./translations/pcm/README.md) | [Norwegian](./translations/no/README.md) | [Persian (Farsi)](./translations/fa/README.md) | [Polish](./translations/pl/README.md) | [Portuguese (Brazil)](./translations/pt-BR/README.md) | [Portuguese (Portugal)](./translations/pt-PT/README.md) | [Punjabi (Gurmukhi)](./translations/pa/README.md) | [Romanian](./translations/ro/README.md) | [Russian](./translations/ru/README.md) | [Serbian (Cyrillic)](./translations/sr/README.md) | [Slovak](./translations/sk/README.md) | [Slovenian](./translations/sl/README.md) | [Spanish](./translations/es/README.md) | [Swahili](./translations/sw/README.md) | [Swedish](./translations/sv/README.md) | [Tagalog (Filipino)](./translations/tl/README.md) | [Tamil](./translations/ta/README.md) | [Telugu](./translations/te/README.md) | [Thai](./translations/th/README.md) | [Turkish](./translations/tr/README.md) | [Ukrainian](./translations/uk/README.md) | [Urdu](./translations/ur/README.md) | [Vietnamese](./translations/vi/README.md) > **Prefer to Clone Locally?** - +> > This repository includes 50+ language translations which significantly increases the download size. To clone without translations, use sparse checkout: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> > This gives you everything you need to complete the course with a much faster download. diff --git a/translated_images/1.b6da8c1394b07491afeb6b2a8e5aca73ebd3cf478e27bcc9aeabb187e722648e.en.png b/translated_images/1.b6da8c1394b07491afeb6b2a8e5aca73ebd3cf478e27bcc9aeabb187e722648e.en.png deleted file mode 100644 index 4148c1017..000000000 Binary files a/translated_images/1.b6da8c1394b07491afeb6b2a8e5aca73ebd3cf478e27bcc9aeabb187e722648e.en.png and /dev/null differ diff --git a/translated_images/1.cc07a5cbe114ad1d4728c35134584ac1b87db688eff83cf75985cf31fe0ed95c.en.png b/translated_images/1.cc07a5cbe114ad1d4728c35134584ac1b87db688eff83cf75985cf31fe0ed95c.en.png deleted file mode 100644 index e89ba6168..000000000 Binary files a/translated_images/1.cc07a5cbe114ad1d4728c35134584ac1b87db688eff83cf75985cf31fe0ed95c.en.png and /dev/null differ diff --git a/translated_images/2.1dae52ff0804224692cd648afbf2342955d7afe3b0101b617268130dfb427f55.en.png b/translated_images/2.1dae52ff0804224692cd648afbf2342955d7afe3b0101b617268130dfb427f55.en.png deleted file mode 100644 index 78a6fb81c..000000000 Binary files a/translated_images/2.1dae52ff0804224692cd648afbf2342955d7afe3b0101b617268130dfb427f55.en.png and /dev/null differ diff --git a/translated_images/after-codeswing-extension-pb.0ebddddcf73b550994947a9084e35e2836c713ae13839d49628e3c764c1cfe83.en.png b/translated_images/after-codeswing-extension-pb.0ebddddcf73b550994947a9084e35e2836c713ae13839d49628e3c764c1cfe83.en.png deleted file mode 100644 index 6e5a9ef91..000000000 Binary files a/translated_images/after-codeswing-extension-pb.0ebddddcf73b550994947a9084e35e2836c713ae13839d49628e3c764c1cfe83.en.png and /dev/null differ diff --git a/translated_images/background.148a8d43afde57303419a663f50daf586681bc2fabf833f66ef6954073983c66.en.png b/translated_images/background.148a8d43afde57303419a663f50daf586681bc2fabf833f66ef6954073983c66.en.png deleted file mode 100644 index 474ed4017..000000000 Binary files a/translated_images/background.148a8d43afde57303419a663f50daf586681bc2fabf833f66ef6954073983c66.en.png and /dev/null differ diff --git a/translated_images/backgroundColor.e19c3c60768150c8de229c89233ecb5d859aeabef0ada99d2236dd2c44c1510f.en.png b/translated_images/backgroundColor.e19c3c60768150c8de229c89233ecb5d859aeabef0ada99d2236dd2c44c1510f.en.png deleted file mode 100644 index 3bd93a532..000000000 Binary files a/translated_images/backgroundColor.e19c3c60768150c8de229c89233ecb5d859aeabef0ada99d2236dd2c44c1510f.en.png and /dev/null differ diff --git a/translated_images/browser-console.efaf0b51aaaf67782a29e1a0bb32cc063f189b18e894eb5926e02f1abe864ec2.en.png b/translated_images/browser-console.efaf0b51aaaf67782a29e1a0bb32cc063f189b18e894eb5926e02f1abe864ec2.en.png deleted file mode 100644 index ad9341a4b..000000000 Binary files a/translated_images/browser-console.efaf0b51aaaf67782a29e1a0bb32cc063f189b18e894eb5926e02f1abe864ec2.en.png and /dev/null differ diff --git a/translated_images/browser.60317c9be8b7f84adce43e30bff8d47a1ae15793beab762317b2bc6b74337c1a.en.jpg b/translated_images/browser.60317c9be8b7f84adce43e30bff8d47a1ae15793beab762317b2bc6b74337c1a.en.jpg deleted file mode 100644 index 06fa7e91e..000000000 Binary files a/translated_images/browser.60317c9be8b7f84adce43e30bff8d47a1ae15793beab762317b2bc6b74337c1a.en.jpg and /dev/null differ diff --git a/translated_images/canvas.fbd605ff8e5b8aff567d398528ce113db304446b90b9cad55c654de3fdfcda34.en.png b/translated_images/canvas.fbd605ff8e5b8aff567d398528ce113db304446b90b9cad55c654de3fdfcda34.en.png deleted file mode 100644 index b42a0d08a..000000000 Binary files a/translated_images/canvas.fbd605ff8e5b8aff567d398528ce113db304446b90b9cad55c654de3fdfcda34.en.png and /dev/null differ diff --git a/translated_images/canvas_grid.5f209da785ded492a01ece440e3032afe51efa500cc2308e5ea4252487ceaf0b.en.png b/translated_images/canvas_grid.5f209da785ded492a01ece440e3032afe51efa500cc2308e5ea4252487ceaf0b.en.png deleted file mode 100644 index 0076f9c5d..000000000 Binary files a/translated_images/canvas_grid.5f209da785ded492a01ece440e3032afe51efa500cc2308e5ea4252487ceaf0b.en.png and /dev/null differ diff --git a/translated_images/character.5c0dd8e067ffd693c16e2c5b7412ab075a2215ce31f998305639fa3a05e14fbe.en.png b/translated_images/character.5c0dd8e067ffd693c16e2c5b7412ab075a2215ce31f998305639fa3a05e14fbe.en.png deleted file mode 100644 index 9f3e12884..000000000 Binary files a/translated_images/character.5c0dd8e067ffd693c16e2c5b7412ab075a2215ce31f998305639fa3a05e14fbe.en.png and /dev/null differ diff --git a/translated_images/click-register.e89a30bf0d4bc9ca867dc537c4cea679a7c26368bd790969082f524fed2355bc.en.png b/translated_images/click-register.e89a30bf0d4bc9ca867dc537c4cea679a7c26368bd790969082f524fed2355bc.en.png deleted file mode 100644 index ccc65305d..000000000 Binary files a/translated_images/click-register.e89a30bf0d4bc9ca867dc537c4cea679a7c26368bd790969082f524fed2355bc.en.png and /dev/null differ diff --git a/translated_images/clone_repo.5085c48d666ead57664f050d806e325d7f883be6838c821e08bc823ab7c66665.en.png b/translated_images/clone_repo.5085c48d666ead57664f050d806e325d7f883be6838c821e08bc823ab7c66665.en.png deleted file mode 100644 index 42cd07021..000000000 Binary files a/translated_images/clone_repo.5085c48d666ead57664f050d806e325d7f883be6838c821e08bc823ab7c66665.en.png and /dev/null differ diff --git a/translated_images/clone_repo.6a202fb230ab6bdd8e8f536661f12088315044ed26899f00b5815db04bff9217.en.png b/translated_images/clone_repo.6a202fb230ab6bdd8e8f536661f12088315044ed26899f00b5815db04bff9217.en.png deleted file mode 100644 index 3220a0f9f..000000000 Binary files a/translated_images/clone_repo.6a202fb230ab6bdd8e8f536661f12088315044ed26899f00b5815db04bff9217.en.png and /dev/null differ diff --git a/translated_images/codespace.bcecbdf5d2747d3d17da67a78ad911c8853d68102e34748ec372cde1e9236e1d.en.png b/translated_images/codespace.bcecbdf5d2747d3d17da67a78ad911c8853d68102e34748ec372cde1e9236e1d.en.png deleted file mode 100644 index 48934523f..000000000 Binary files a/translated_images/codespace.bcecbdf5d2747d3d17da67a78ad911c8853d68102e34748ec372cde1e9236e1d.en.png and /dev/null differ diff --git a/translated_images/create-a-fork.297ab42b4bd0af9989c1a00dc1ad10805a7e109296a5f47acebacaf5ff098a30.en.png b/translated_images/create-a-fork.297ab42b4bd0af9989c1a00dc1ad10805a7e109296a5f47acebacaf5ff098a30.en.png deleted file mode 100644 index f0a6fa895..000000000 Binary files a/translated_images/create-a-fork.297ab42b4bd0af9989c1a00dc1ad10805a7e109296a5f47acebacaf5ff098a30.en.png and /dev/null differ diff --git a/translated_images/create-new-file-pb.0797800d977ec3ebf484be2545060e443a902973aaa5267219c07fe199b0e2d4.en.png b/translated_images/create-new-file-pb.0797800d977ec3ebf484be2545060e443a902973aaa5267219c07fe199b0e2d4.en.png deleted file mode 100644 index aaa3fe3ce..000000000 Binary files a/translated_images/create-new-file-pb.0797800d977ec3ebf484be2545060e443a902973aaa5267219c07fe199b0e2d4.en.png and /dev/null differ diff --git a/translated_images/create-new-file.2814e609c2af9aeb6c6fd53156c503ac91c3d538f9cac63073b2dd4a7631f183.en.png b/translated_images/create-new-file.2814e609c2af9aeb6c6fd53156c503ac91c3d538f9cac63073b2dd4a7631f183.en.png deleted file mode 100644 index a1fb99b56..000000000 Binary files a/translated_images/create-new-file.2814e609c2af9aeb6c6fd53156c503ac91c3d538f9cac63073b2dd4a7631f183.en.png and /dev/null differ diff --git a/translated_images/createcodespace.0238bbf4d7a8d955fa8fa7f7b6602a3cb6499a24708fbee589f83211c5a613b7.en.png b/translated_images/createcodespace.0238bbf4d7a8d955fa8fa7f7b6602a3cb6499a24708fbee589f83211c5a613b7.en.png deleted file mode 100644 index 99e0f52a2..000000000 Binary files a/translated_images/createcodespace.0238bbf4d7a8d955fa8fa7f7b6602a3cb6499a24708fbee589f83211c5a613b7.en.png and /dev/null differ diff --git a/translated_images/data-flow.fa2354e0908fecc89b488010dedf4871418a992edffa17e73441d257add18da4.en.png b/translated_images/data-flow.fa2354e0908fecc89b488010dedf4871418a992edffa17e73441d257add18da4.en.png deleted file mode 100644 index 67291b688..000000000 Binary files a/translated_images/data-flow.fa2354e0908fecc89b488010dedf4871418a992edffa17e73441d257add18da4.en.png and /dev/null differ diff --git a/translated_images/default-vscode-dev.5d06881d65c1b3234ce50cd9ed3b0028e6031ad5f5b441bcbed96bfa6311f6d0.en.png b/translated_images/default-vscode-dev.5d06881d65c1b3234ce50cd9ed3b0028e6031ad5f5b441bcbed96bfa6311f6d0.en.png deleted file mode 100644 index 2dec44d47..000000000 Binary files a/translated_images/default-vscode-dev.5d06881d65c1b3234ce50cd9ed3b0028e6031ad5f5b441bcbed96bfa6311f6d0.en.png and /dev/null differ diff --git a/translated_images/dialog.93bba104afeb79f12f65ebf8f521c5d64e179c40b791c49c242cf15f7e7fab15.en.png b/translated_images/dialog.93bba104afeb79f12f65ebf8f521c5d64e179c40b791c49c242cf15f7e7fab15.en.png deleted file mode 100644 index d4bd5400b..000000000 Binary files a/translated_images/dialog.93bba104afeb79f12f65ebf8f521c5d64e179c40b791c49c242cf15f7e7fab15.en.png and /dev/null differ diff --git a/translated_images/dom-tree.7daf0e763cbbba9273f9a66fe04c98276d7d23932309b195cb273a9cf1819b42.en.png b/translated_images/dom-tree.7daf0e763cbbba9273f9a66fe04c98276d7d23932309b195cb273a9cf1819b42.en.png deleted file mode 100644 index 6de176274..000000000 Binary files a/translated_images/dom-tree.7daf0e763cbbba9273f9a66fe04c98276d7d23932309b195cb273a9cf1819b42.en.png and /dev/null differ diff --git a/translated_images/earlybrowsers.d984b711cdf3a42ddac919d46c4b5ca7232f68ccfbd81395e04e5a64c0015277.en.jpg b/translated_images/earlybrowsers.d984b711cdf3a42ddac919d46c4b5ca7232f68ccfbd81395e04e5a64c0015277.en.jpg deleted file mode 100644 index 321b64882..000000000 Binary files a/translated_images/earlybrowsers.d984b711cdf3a42ddac919d46c4b5ca7232f68ccfbd81395e04e5a64c0015277.en.jpg and /dev/null differ diff --git a/translated_images/edit-a-file-pb.263555922c14fc523f53f394da84b6e155b1c6d1835dfa572b33ea98a209ef94.en.png b/translated_images/edit-a-file-pb.263555922c14fc523f53f394da84b6e155b1c6d1835dfa572b33ea98a209ef94.en.png deleted file mode 100644 index b324f620d..000000000 Binary files a/translated_images/edit-a-file-pb.263555922c14fc523f53f394da84b6e155b1c6d1835dfa572b33ea98a209ef94.en.png and /dev/null differ diff --git a/translated_images/edit-a-file.52c0ee665ef19f08119d62d63f395dfefddc0a4deb9268d73bfe791f52c5807a.en.png b/translated_images/edit-a-file.52c0ee665ef19f08119d62d63f395dfefddc0a4deb9268d73bfe791f52c5807a.en.png deleted file mode 100644 index 2558533fa..000000000 Binary files a/translated_images/edit-a-file.52c0ee665ef19f08119d62d63f395dfefddc0a4deb9268d73bfe791f52c5807a.en.png and /dev/null differ diff --git a/translated_images/en/.co-op-translator.json b/translated_images/en/.co-op-translator.json new file mode 100644 index 000000000..245e9b0a4 --- /dev/null +++ b/translated_images/en/.co-op-translator.json @@ -0,0 +1,860 @@ +{ + "1.b6da8c1394b07491.webp": { + "original_hash": "6b12479c2e6a54160867fa8945c04082", + "translation_date": "2026-03-06T11:52:51+00:00", + "source_file": "5-browser-extension/1-about-browsers/images/1.png", + "language_code": "en" + }, + "1.cc07a5cbe114ad1d.webp": { + "original_hash": "fc436b6749801dd90d0558ae92d56b60", + "translation_date": "2026-03-06T11:54:08+00:00", + "source_file": "3-terrarium/2-intro-to-css/images/1.png", + "language_code": "en" + }, + "2.1dae52ff08042246.webp": { + "original_hash": "3995628a6a986308859d0cb6eed8d787", + "translation_date": "2026-03-06T11:52:43+00:00", + "source_file": "5-browser-extension/1-about-browsers/images/2.png", + "language_code": "en" + }, + "after-codeswing-extension-pb.0ebddddcf73b5509.webp": { + "original_hash": "861d59ec65a7334c5f3a4c02dfe22ceb", + "translation_date": "2026-03-06T11:51:34+00:00", + "source_file": "8-code-editor/images/after-codeswing-extension-pb.png", + "language_code": "en" + }, + "background.148a8d43afde5730.webp": { + "original_hash": "5a50f015fb466782c69063ffebb256de", + "translation_date": "2026-03-06T11:49:32+00:00", + "source_file": "images/background.png", + "language_code": "en" + }, + "backgroundColor.e19c3c60768150c8.webp": { + "original_hash": "b3e10fe033f615ec9d3580cce61eae09", + "translation_date": "2026-03-06T11:52:21+00:00", + "source_file": "6-space-game/solution/spaceArt/png/Background/backgroundColor.png", + "language_code": "en" + }, + "browser-console.efaf0b51aaaf6778.webp": { + "original_hash": "8d6c5077d1f133d27c65c0014ef503a9", + "translation_date": "2026-03-06T11:53:03+00:00", + "source_file": "7-bank-project/2-forms/images/browser-console.png", + "language_code": "en" + }, + "browser.60317c9be8b7f84a.webp": { + "original_hash": "aa4461fec006d86899864d991b50cc74", + "translation_date": "2026-03-06T11:49:42+00:00", + "source_file": "sketchnotes/browser.jpg", + "language_code": "en" + }, + "canvas.fbd605ff8e5b8aff.webp": { + "original_hash": "29556305738d345dd023554d788d5477", + "translation_date": "2026-03-06T11:49:13+00:00", + "source_file": "teaching-files/canvas.png", + "language_code": "en" + }, + "canvas_grid.5f209da785ded492.webp": { + "original_hash": "8da354720ffbfd778571aa17402de890", + "translation_date": "2026-03-06T11:52:12+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/canvas_grid.png", + "language_code": "en" + }, + "character.5c0dd8e067ffd693.webp": { + "original_hash": "076bbb4d25a17982c81973b8dba9d4fa", + "translation_date": "2026-03-06T11:49:27+00:00", + "source_file": "images/character.png", + "language_code": "en" + }, + "click-register.e89a30bf0d4bc9ca.webp": { + "original_hash": "ef9688313524664fad6ab9b0e080c758", + "translation_date": "2026-03-06T11:52:57+00:00", + "source_file": "7-bank-project/2-forms/images/click-register.png", + "language_code": "en" + }, + "clone_repo.5085c48d666ead57.webp": { + "original_hash": "28c00f3d5861ab95d188b4f6a2d337df", + "translation_date": "2026-03-06T11:54:10+00:00", + "source_file": "1-getting-started-lessons/2-github-basics/images/clone_repo.png", + "language_code": "en" + }, + "clone_repo.6a202fb230ab6bdd.webp": { + "original_hash": "9261d014674312eece91deae958538cf", + "translation_date": "2026-03-06T11:49:29+00:00", + "source_file": "images/clone_repo.png", + "language_code": "en" + }, + "codespace.bcecbdf5d2747d3d.webp": { + "original_hash": "ff86a65511122ddb448e092969566b0a", + "translation_date": "2026-03-06T11:54:12+00:00", + "source_file": "9-chat-project/assets/codespace.png", + "language_code": "en" + }, + "create-a-fork.297ab42b4bd0af99.webp": { + "original_hash": "10712b80e3dcfa7c44fb8820a6ff3ad3", + "translation_date": "2026-03-06T11:51:36+00:00", + "source_file": "8-code-editor/images/create-a-fork.png", + "language_code": "en" + }, + "create-new-file-pb.0797800d977ec3eb.webp": { + "original_hash": "c149c42e04132f2409651425d6924ffa", + "translation_date": "2026-03-06T11:51:07+00:00", + "source_file": "8-code-editor/images/create-new-file-pb.png", + "language_code": "en" + }, + "create-new-file.2814e609c2af9aeb.webp": { + "original_hash": "cf6df76faeac2d92904e5d877b7bdf69", + "translation_date": "2026-03-06T11:51:04+00:00", + "source_file": "8-code-editor/images/create-new-file.png", + "language_code": "en" + }, + "createcodespace.0238bbf4d7a8d955.webp": { + "original_hash": "4f504323085308f4a0e7b5bfb37e16d7", + "translation_date": "2026-03-06T11:49:25+00:00", + "source_file": "images/createcodespace.png", + "language_code": "en" + }, + "data-flow.fa2354e0908fecc8.webp": { + "original_hash": "c9b82b42fa1973b3b7bfad9c7128c24c", + "translation_date": "2026-03-06T11:53:09+00:00", + "source_file": "7-bank-project/4-state-management/images/data-flow.png", + "language_code": "en" + }, + "default-vscode-dev.5d06881d65c1b323.webp": { + "original_hash": "146fecc3a9da37cb1d5c9d628cd94996", + "translation_date": "2026-03-06T11:51:53+00:00", + "source_file": "8-code-editor/images/default-vscode-dev.png", + "language_code": "en" + }, + "dialog.93bba104afeb79f1.webp": { + "original_hash": "c56b5ad7eb8c4df4b3ed8a99bf67e6e2", + "translation_date": "2026-03-06T11:53:09+00:00", + "source_file": "7-bank-project/4-state-management/images/dialog.png", + "language_code": "en" + }, + "dom-tree.7daf0e763cbbba92.webp": { + "original_hash": "579f4ae298ff15a357def7f442671847", + "translation_date": "2026-03-06T11:53:15+00:00", + "source_file": "3-terrarium/3-intro-to-DOM-and-closures/images/dom-tree.png", + "language_code": "en" + }, + "earlybrowsers.d984b711cdf3a42d.webp": { + "original_hash": "810a4d2348668e25289029c5cfcb67bd", + "translation_date": "2026-03-06T11:52:40+00:00", + "source_file": "5-browser-extension/1-about-browsers/images/earlybrowsers.jpg", + "language_code": "en" + }, + "edit-a-file-pb.263555922c14fc52.webp": { + "original_hash": "5c52723d35259eadd110d0c720a87b04", + "translation_date": "2026-03-06T11:51:49+00:00", + "source_file": "8-code-editor/images/edit-a-file-pb.png", + "language_code": "en" + }, + "edit-a-file.52c0ee665ef19f08.webp": { + "original_hash": "c28903236d60be6bba3f3848ea368c63", + "translation_date": "2026-03-06T11:52:11+00:00", + "source_file": "8-code-editor/images/edit-a-file.png", + "language_code": "en" + }, + "enemyShip.035a46787bff658c.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:17+00:00", + "source_file": "6-space-game/5-keeping-score/solution/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.1a1354d7988de290.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:16+00:00", + "source_file": "6-space-game/6-end-condition/solution/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.22cbee6ea27a5809.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:14+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/your-work/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.321ecb1b4eb21f2c.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:16+00:00", + "source_file": "6-space-game/5-keeping-score/your-work/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.4fbf2889e6129db4.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:15+00:00", + "source_file": "6-space-game/6-end-condition/your-work/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.5df2a822c16650c2.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:14+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/solution/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.62983ed4bfb2220f.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:23+00:00", + "source_file": "6-space-game/3-moving-elements-around/solution/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.add7036e1c3c3014.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:14+00:00", + "source_file": "6-space-game/4-collision-detection/solution/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.b39a140287683bf7.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:23+00:00", + "source_file": "6-space-game/3-moving-elements-around/your-work/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.b9626ed228a17a32.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:13+00:00", + "source_file": "6-space-game/4-collision-detection/your-work/assets/enemyShip.png", + "language_code": "en" + }, + "enemyShip.deb0477a7312f54d.webp": { + "original_hash": "2a41854e0eaa974e8619298f3b333e11", + "translation_date": "2026-03-06T11:52:19+00:00", + "source_file": "6-space-game/solution/spaceArt/png/enemyShip.png", + "language_code": "en" + }, + "enemyUFO.bf8585e4e8dcdb68.webp": { + "original_hash": "18198bef76e4882928e4092344d0fb98", + "translation_date": "2026-03-06T11:52:20+00:00", + "source_file": "6-space-game/solution/spaceArt/png/enemyUFO.png", + "language_code": "en" + }, + "extension-details.9f8f1fd4e9eb2de5.webp": { + "original_hash": "f57d2e246e6ba8a58463d7573640d714", + "translation_date": "2026-03-06T11:52:09+00:00", + "source_file": "8-code-editor/images/extension-details.png", + "language_code": "en" + }, + "extension-screenshot.0e7f5bfa110e92e3.webp": { + "original_hash": "4fdd1d3fdbc9ac2c2932f83847a5e4b8", + "translation_date": "2026-03-06T11:49:23+00:00", + "source_file": "5-browser-extension/extension-screenshot.png", + "language_code": "en" + }, + "extension-settings.21c752ae4f4cdb78.webp": { + "original_hash": "fd7ebcb5d84c78047026ab3337908306", + "translation_date": "2026-03-06T11:51:13+00:00", + "source_file": "8-code-editor/images/extension-settings.png", + "language_code": "en" + }, + "extensions.eca0e0c7f59a10b5.webp": { + "original_hash": "a6c9c8f51d3edd917262e53664f08441", + "translation_date": "2026-03-06T11:51:38+00:00", + "source_file": "8-code-editor/images/extensions.png", + "language_code": "en" + }, + "favicon.37b561214b36d454.webp": { + "original_hash": "228faa6584f8ba1f7e9a75e3200112e9", + "translation_date": "2026-03-06T11:49:25+00:00", + "source_file": "images/favicon.png", + "language_code": "en" + }, + "form-post.61de4ca1b964d91a.webp": { + "original_hash": "7e95c76a8ea2e82bceea70aae89f2360", + "translation_date": "2026-03-06T11:52:59+00:00", + "source_file": "7-bank-project/2-forms/images/form-post.png", + "language_code": "en" + }, + "history.7fdabbafa521e064.webp": { + "original_hash": "445d71bea6a747dfe547df7eea846439", + "translation_date": "2026-03-06T11:52:52+00:00", + "source_file": "7-bank-project/1-template-route/history.png", + "language_code": "en" + }, + "install-on-edge.78634f02842c4828.webp": { + "original_hash": "6224aad8f1cd252da83c2808ff5c7a4e", + "translation_date": "2026-03-06T11:49:17+00:00", + "source_file": "5-browser-extension/install-on-edge.png", + "language_code": "en" + }, + "install-on-edge.d68781acaf0b3d3d.webp": { + "original_hash": "6224aad8f1cd252da83c2808ff5c7a4e", + "translation_date": "2026-03-06T11:52:48+00:00", + "source_file": "5-browser-extension/1-about-browsers/images/install-on-edge.png", + "language_code": "en" + }, + "laserGreen.89904f0f49945560.webp": { + "original_hash": "ddf7102c86fc3ec46037714c60091851", + "translation_date": "2026-03-06T11:52:19+00:00", + "source_file": "6-space-game/solution/spaceArt/png/laserGreen.png", + "language_code": "en" + }, + "laserGreenShot.e4fbfc4714c08a5b.webp": { + "original_hash": "cb6ed500c16736a41998e4cd0c467df7", + "translation_date": "2026-03-06T11:52:19+00:00", + "source_file": "6-space-game/solution/spaceArt/png/laserGreenShot.png", + "language_code": "en" + }, + "laserRed.2040e11f55c0a40a.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:15+00:00", + "source_file": "6-space-game/6-end-condition/solution/assets/laserRed.png", + "language_code": "en" + }, + "laserRed.381bc5555491ce67.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:23+00:00", + "source_file": "6-space-game/3-moving-elements-around/your-work/assets/laserRed.png", + "language_code": "en" + }, + "laserRed.69730edd76f0b3bd.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:15+00:00", + "source_file": "6-space-game/6-end-condition/your-work/assets/laserRed.png", + "language_code": "en" + }, + "laserRed.b583dc1728eb8581.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:17+00:00", + "source_file": "6-space-game/5-keeping-score/solution/assets/laserRed.png", + "language_code": "en" + }, + "laserRed.cae9ab24ea9b18fd.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:13+00:00", + "source_file": "6-space-game/4-collision-detection/solution/assets/laserRed.png", + "language_code": "en" + }, + "laserRed.d81ce4986f87c251.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:18+00:00", + "source_file": "6-space-game/solution/spaceArt/png/laserRed.png", + "language_code": "en" + }, + "laserRed.e58ef8db2585dfbe.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:16+00:00", + "source_file": "6-space-game/5-keeping-score/your-work/assets/laserRed.png", + "language_code": "en" + }, + "laserRed.e66e29ace6666064.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:23+00:00", + "source_file": "6-space-game/3-moving-elements-around/solution/assets/laserRed.png", + "language_code": "en" + }, + "laserRed.e86e8fb629c6026e.webp": { + "original_hash": "6f0626e9839beb9d9a82ff40699aabfd", + "translation_date": "2026-03-06T11:52:13+00:00", + "source_file": "6-space-game/4-collision-detection/your-work/assets/laserRed.png", + "language_code": "en" + }, + "laserRedShot.c39d066745996a71.webp": { + "original_hash": "1f1048184aab9d405e9f7d067a57af01", + "translation_date": "2026-03-06T11:52:19+00:00", + "source_file": "6-space-game/solution/spaceArt/png/laserRedShot.png", + "language_code": "en" + }, + "life.27144b6d4bfdea76.webp": { + "original_hash": "9a5d93e699071693b15b7b157f760a90", + "translation_date": "2026-03-06T11:52:19+00:00", + "source_file": "6-space-game/solution/spaceArt/png/life.png", + "language_code": "en" + }, + "life.2a159298dd98f4ef.webp": { + "original_hash": "9a5d93e699071693b15b7b157f760a90", + "translation_date": "2026-03-06T11:52:16+00:00", + "source_file": "6-space-game/5-keeping-score/your-work/assets/life.png", + "language_code": "en" + }, + "life.466df3b1692a244a.webp": { + "original_hash": "9a5d93e699071693b15b7b157f760a90", + "translation_date": "2026-03-06T11:52:13+00:00", + "source_file": "6-space-game/4-collision-detection/your-work/assets/life.png", + "language_code": "en" + }, + "life.65a2aaceca875284.webp": { + "original_hash": "9a5d93e699071693b15b7b157f760a90", + "translation_date": "2026-03-06T11:52:14+00:00", + "source_file": "6-space-game/4-collision-detection/solution/assets/life.png", + "language_code": "en" + }, + "life.6fb9f50d53ee0413.webp": { + "original_hash": "9a5d93e699071693b15b7b157f760a90", + "translation_date": "2026-03-06T11:52:17+00:00", + "source_file": "6-space-game/5-keeping-score/solution/assets/life.png", + "language_code": "en" + }, + "life.78b6e96a3003767e.webp": { + "original_hash": "9a5d93e699071693b15b7b157f760a90", + "translation_date": "2026-03-06T11:52:15+00:00", + "source_file": "6-space-game/6-end-condition/your-work/assets/life.png", + "language_code": "en" + }, + "life.86d843ce9c23289c.webp": { + "original_hash": "9a5d93e699071693b15b7b157f760a90", + "translation_date": "2026-03-06T11:52:16+00:00", + "source_file": "6-space-game/6-end-condition/solution/assets/life.png", + "language_code": "en" + }, + "localstorage.472f8147b6a3f8d1.webp": { + "original_hash": "7706ccb87a13a08250f315f03140bc61", + "translation_date": "2026-03-06T11:52:26+00:00", + "source_file": "5-browser-extension/2-forms-browsers-local-storage/images/localstorage.png", + "language_code": "en" + }, + "log.804026979f3707e0.webp": { + "original_hash": "4c5e39f339781db01641b77b6b2d6026", + "translation_date": "2026-03-06T11:52:37+00:00", + "source_file": "5-browser-extension/3-background-tasks-and-performance/images/log.png", + "language_code": "en" + }, + "login-error.416fe019b36a6327.webp": { + "original_hash": "ea96ed372d7a4c37ee2df3f0352f79d1", + "translation_date": "2026-03-06T11:53:04+00:00", + "source_file": "7-bank-project/3-data/images/login-error.png", + "language_code": "en" + }, + "meteorBig.1e452b3ad7af50ad.webp": { + "original_hash": "07f37816512f563dd68780fdee2e30a6", + "translation_date": "2026-03-06T11:52:18+00:00", + "source_file": "6-space-game/solution/spaceArt/png/meteorBig.png", + "language_code": "en" + }, + "meteorSmall.0d729bc71c12d41f.webp": { + "original_hash": "ebabf6690cc614f9e33f019c356166fa", + "translation_date": "2026-03-06T11:52:18+00:00", + "source_file": "6-space-game/solution/spaceArt/png/meteorSmall.png", + "language_code": "en" + }, + "moodle.94eb93d714a50cb2.webp": { + "original_hash": "0d04a6ef1ac524b452d5a0aae3f45bee", + "translation_date": "2026-03-06T11:49:05+00:00", + "source_file": "teaching-files/moodle.png", + "language_code": "en" + }, + "mpa.7f7375a1a2d4aa77.webp": { + "original_hash": "021255b74f0b79b0c286c163c210ef3d", + "translation_date": "2026-03-06T11:53:05+00:00", + "source_file": "7-bank-project/3-data/images/mpa.png", + "language_code": "en" + }, + "nebula.55c2933d36d035d3.webp": { + "original_hash": "e0fa4f86653c6fe97bc77271c46241c2", + "translation_date": "2026-03-06T11:52:22+00:00", + "source_file": "6-space-game/solution/spaceArt/png/Background/nebula.png", + "language_code": "en" + }, + "new-file-github.com.c886796d800e8056.webp": { + "original_hash": "2e0ddd0dad4734e3968b70907df9c052", + "translation_date": "2026-03-06T11:51:58+00:00", + "source_file": "8-code-editor/images/new-file-github.com.png", + "language_code": "en" + }, + "open-palette-menu.46dda01084738da8.webp": { + "original_hash": "1860e80bf0534b9d54ef0fcb7e1a9f9e", + "translation_date": "2026-03-06T11:51:51+00:00", + "source_file": "8-code-editor/images/open-palette-menu.png", + "language_code": "en" + }, + "open-remote-repository.bd9c2598b8949e7f.webp": { + "original_hash": "777c01a9242da7d5d0e1b037df9c86f9", + "translation_date": "2026-03-06T11:51:36+00:00", + "source_file": "8-code-editor/images/open-remote-repository.png", + "language_code": "en" + }, + "palette-menu.4946174e07f42622.webp": { + "original_hash": "7387b91076790084ec8828866e88c6ce", + "translation_date": "2026-03-06T11:51:50+00:00", + "source_file": "8-code-editor/images/palette-menu.png", + "language_code": "en" + }, + "partI-solution.36c53b48c9ffae2a.webp": { + "original_hash": "fbbd263368f61f8ed3a86c4571e6810b", + "translation_date": "2026-03-06T11:52:12+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/partI-solution.png", + "language_code": "en" + }, + "plant1.a876180d8659acb9.webp": { + "original_hash": "e08f9b0f46f6d9d7c9949d4c3e590694", + "translation_date": "2026-03-06T11:53:34+00:00", + "source_file": "3-terrarium/solution/images/plant1.png", + "language_code": "en" + }, + "plant10.2f2c47804ae52dd3.webp": { + "original_hash": "dba97454882c2796c52a33c403db61f7", + "translation_date": "2026-03-06T11:53:49+00:00", + "source_file": "3-terrarium/solution/images/plant10.png", + "language_code": "en" + }, + "plant11.0ce0081b0ef17aa1.webp": { + "original_hash": "68346dbd1ae03331b0a87025c3e8e9e2", + "translation_date": "2026-03-06T11:53:45+00:00", + "source_file": "3-terrarium/solution/images/plant11.png", + "language_code": "en" + }, + "plant12.6b934c4312a00228.webp": { + "original_hash": "dafacde8e7a0b56c4baaabe88b4f90e2", + "translation_date": "2026-03-06T11:54:06+00:00", + "source_file": "3-terrarium/solution/images/plant12.png", + "language_code": "en" + }, + "plant13.37d6ab2e2481421f.webp": { + "original_hash": "5cac561d7596ee631c4d02436d8f6998", + "translation_date": "2026-03-06T11:53:53+00:00", + "source_file": "3-terrarium/solution/images/plant13.png", + "language_code": "en" + }, + "plant14.908791477a46eb7f.webp": { + "original_hash": "349b8e5a33d1221bef4a4ac3bb439bb9", + "translation_date": "2026-03-06T11:53:38+00:00", + "source_file": "3-terrarium/solution/images/plant14.png", + "language_code": "en" + }, + "plant2.9e45efea224115b0.webp": { + "original_hash": "24beefd3dcca66085b44d3ae5d9758e1", + "translation_date": "2026-03-06T11:54:04+00:00", + "source_file": "3-terrarium/solution/images/plant2.png", + "language_code": "en" + }, + "plant3.06efdd0fa0c4b115.webp": { + "original_hash": "7e40e6f14cf52f7d75ed42320817b044", + "translation_date": "2026-03-06T11:53:59+00:00", + "source_file": "3-terrarium/solution/images/plant3.png", + "language_code": "en" + }, + "plant4.3b78072b427727c6.webp": { + "original_hash": "c523205855d0691a9a0161c6abca983c", + "translation_date": "2026-03-06T11:53:56+00:00", + "source_file": "3-terrarium/solution/images/plant4.png", + "language_code": "en" + }, + "plant5.8ec58b18ac336fa8.webp": { + "original_hash": "bcf5f2eacd7da3fe6b07c857d7f5a2ce", + "translation_date": "2026-03-06T11:54:01+00:00", + "source_file": "3-terrarium/solution/images/plant5.png", + "language_code": "en" + }, + "plant6.ca4ff8372e6676b1.webp": { + "original_hash": "6932fdb455fcae5b324b129367d2f56a", + "translation_date": "2026-03-06T11:53:41+00:00", + "source_file": "3-terrarium/solution/images/plant6.png", + "language_code": "en" + }, + "plant7.194d5a42fcf5a88c.webp": { + "original_hash": "b7a1e35f9946cb04440ce620c34f201d", + "translation_date": "2026-03-06T11:53:21+00:00", + "source_file": "3-terrarium/solution/images/plant7.png", + "language_code": "en" + }, + "plant8.7b247809ab0eb492.webp": { + "original_hash": "3eb38c747aaf33ce7aa70b58a31b62a8", + "translation_date": "2026-03-06T11:53:32+00:00", + "source_file": "3-terrarium/solution/images/plant8.png", + "language_code": "en" + }, + "plant9.8fe614c01ded1b1e.webp": { + "original_hash": "a9655c162938a27c63d48ac675061e2b", + "translation_date": "2026-03-06T11:53:25+00:00", + "source_file": "3-terrarium/solution/images/plant9.png", + "language_code": "en" + }, + "player.137ee0e47f895ffc.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:16+00:00", + "source_file": "6-space-game/6-end-condition/solution/assets/player.png", + "language_code": "en" + }, + "player.2887422f6982c3cd.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:16+00:00", + "source_file": "6-space-game/5-keeping-score/your-work/assets/player.png", + "language_code": "en" + }, + "player.391fed427ede24f5.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:17+00:00", + "source_file": "6-space-game/5-keeping-score/solution/assets/player.png", + "language_code": "en" + }, + "player.3c4f50182552a73a.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:23+00:00", + "source_file": "6-space-game/3-moving-elements-around/your-work/assets/player.png", + "language_code": "en" + }, + "player.47bc9de0714c723d.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:14+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/your-work/assets/player.png", + "language_code": "en" + }, + "player.57b3107c03012695.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:19+00:00", + "source_file": "6-space-game/solution/spaceArt/png/player.png", + "language_code": "en" + }, + "player.606f85953e5e564e.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:15+00:00", + "source_file": "6-space-game/6-end-condition/your-work/assets/player.png", + "language_code": "en" + }, + "player.680ea4c619b54fe1.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:13+00:00", + "source_file": "6-space-game/4-collision-detection/your-work/assets/player.png", + "language_code": "en" + }, + "player.bfe14f110bddf56d.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:23+00:00", + "source_file": "6-space-game/3-moving-elements-around/solution/assets/player.png", + "language_code": "en" + }, + "player.c99c25d54a615ca0.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:14+00:00", + "source_file": "6-space-game/4-collision-detection/solution/assets/player.png", + "language_code": "en" + }, + "player.dd24c1afa8c71e9b.webp": { + "original_hash": "952e66c2dd458cfd6e82052f7123a97b", + "translation_date": "2026-03-06T11:52:15+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/solution/assets/player.png", + "language_code": "en" + }, + "playerDamaged.181703f652fd5176.webp": { + "original_hash": "9d71aebe7303edd536064fb0f5e2ae82", + "translation_date": "2026-03-06T11:52:20+00:00", + "source_file": "6-space-game/solution/spaceArt/png/playerDamaged.png", + "language_code": "en" + }, + "playerLeft.0f928412e66ba5d9.webp": { + "original_hash": "40a42047b8ee49c6dd87c981e98d4d2e", + "translation_date": "2026-03-06T11:52:21+00:00", + "source_file": "6-space-game/solution/spaceArt/png/playerLeft.png", + "language_code": "en" + }, + "playerRight.e4825f489e29f737.webp": { + "original_hash": "1c7b03f73e1d6ed74955357680cb05cb", + "translation_date": "2026-03-06T11:52:21+00:00", + "source_file": "6-space-game/solution/spaceArt/png/playerRight.png", + "language_code": "en" + }, + "playground-choice.1d23ba7d407f4758.webp": { + "original_hash": "1c2e88cad7aad10922b4de1e87f1a47f", + "translation_date": "2026-03-06T11:54:20+00:00", + "source_file": "9-chat-project/assets/playground-choice.png", + "language_code": "en" + }, + "playground.d2b927122224ff8f.webp": { + "original_hash": "4152bb8cd5f23e73d58b3beb52919477", + "translation_date": "2026-03-06T11:54:19+00:00", + "source_file": "9-chat-project/assets/playground.png", + "language_code": "en" + }, + "preview.9215f0a010074476.webp": { + "original_hash": "6eaab6a69de1fa433e822578652c7287", + "translation_date": "2026-03-06T11:52:18+00:00", + "source_file": "6-space-game/solution/spaceArt/preview.jpg", + "language_code": "en" + }, + "profiler.5a4a62479c5df01c.webp": { + "original_hash": "40b8a4d9f47e2f3e18aa2e814a15356c", + "translation_date": "2026-03-06T11:52:35+00:00", + "source_file": "5-browser-extension/3-background-tasks-and-performance/images/profiler.png", + "language_code": "en" + }, + "project-on-vscode.dev.e79815a9a95ee7fe.webp": { + "original_hash": "35de4bc32ea66a11f919671558e07d52", + "translation_date": "2026-03-06T11:51:54+00:00", + "source_file": "8-code-editor/images/project-on-vscode.dev.png", + "language_code": "en" + }, + "result.96ef01f607bf856a.webp": { + "original_hash": "e83c44a0fcaa7720ce32eb71d53d5250", + "translation_date": "2026-03-06T11:53:01+00:00", + "source_file": "7-bank-project/2-forms/images/result.png", + "language_code": "en" + }, + "screen1.baccbba0f1f93364.webp": { + "original_hash": "92c8fa2dbe566c4e19c98a9e7de6faa6", + "translation_date": "2026-03-06T11:52:54+00:00", + "source_file": "7-bank-project/images/screen1.png", + "language_code": "en" + }, + "screen2.123c82a831a1d14a.webp": { + "original_hash": "43b7f2857d5f758394e443df8fbc31cf", + "translation_date": "2026-03-06T11:52:56+00:00", + "source_file": "7-bank-project/images/screen2.png", + "language_code": "en" + }, + "screenshot.0a1ee0d123df681b.webp": { + "original_hash": "f909b463a14ff6542a816470f68bfac3", + "translation_date": "2026-03-06T11:54:26+00:00", + "source_file": "9-chat-project/assets/screenshot.png", + "language_code": "en" + }, + "screenshot.e7a5ad659e364568.webp": { + "original_hash": "c562c1fdc9d73658456e02b873e4dff9", + "translation_date": "2026-03-06T11:49:34+00:00", + "source_file": "images/screenshot.png", + "language_code": "en" + }, + "screenshot_gray.0c796099a1f9f25e.webp": { + "original_hash": "324b7bff7867c38e100d0acad18ed53d", + "translation_date": "2026-03-06T11:53:11+00:00", + "source_file": "3-terrarium/images/screenshot_gray.png", + "language_code": "en" + }, + "shield.1b9412b7ca6610ab.webp": { + "original_hash": "a672dc1a5f905918272bb58f1e236340", + "translation_date": "2026-03-06T11:52:20+00:00", + "source_file": "6-space-game/solution/spaceArt/png/shield.png", + "language_code": "en" + }, + "snapshot.97750180ebcad737.webp": { + "original_hash": "9db2fa7afcc1d258ec1a130cef145f94", + "translation_date": "2026-03-06T11:52:27+00:00", + "source_file": "5-browser-extension/3-background-tasks-and-performance/images/snapshot.png", + "language_code": "en" + }, + "spa.268ec73b41f992c2.webp": { + "original_hash": "3d3d7273070c2ddab04458fbb084ad4a", + "translation_date": "2026-03-06T11:53:06+00:00", + "source_file": "7-bank-project/3-data/images/spa.png", + "language_code": "en" + }, + "speedLine.5bcabb93f48b5ae1.webp": { + "original_hash": "ef791dbe8ea2e21cf697831e203803d5", + "translation_date": "2026-03-06T11:52:22+00:00", + "source_file": "6-space-game/solution/spaceArt/png/Background/speedLine.png", + "language_code": "en" + }, + "spritesheet.bec82852290b14ee.webp": { + "original_hash": "d593b0f366e9efd2f2b3ef18e7eb2d0c", + "translation_date": "2026-03-06T11:52:13+00:00", + "source_file": "6-space-game/solution/spritesheet.png", + "language_code": "en" + }, + "starBackground.a897b8acb1b0587d.webp": { + "original_hash": "cca00ba0b9e73859ab5bb928d5ca2fa2", + "translation_date": "2026-03-06T11:52:22+00:00", + "source_file": "6-space-game/solution/spaceArt/png/Background/starBackground.png", + "language_code": "en" + }, + "starBig.72e9c6d0d18f363d.webp": { + "original_hash": "4e8f1abc8b48d75990117ea8b6207842", + "translation_date": "2026-03-06T11:52:21+00:00", + "source_file": "6-space-game/solution/spaceArt/png/Background/starBig.png", + "language_code": "en" + }, + "starSmall.ed78b961dbcd0898.webp": { + "original_hash": "609bf88a971475818f95816b8cf71508", + "translation_date": "2026-03-06T11:52:22+00:00", + "source_file": "6-space-game/solution/spaceArt/png/Background/starSmall.png", + "language_code": "en" + }, + "template.67ad477109d29a2b.webp": { + "original_hash": "a184e4c012fd4fca9ab3c552df87bd0c", + "translation_date": "2026-03-06T11:54:21+00:00", + "source_file": "9-chat-project/assets/template.png", + "language_code": "en" + }, + "terrarium-final.0920f16e87c13a84.webp": { + "original_hash": "324b7bff7867c38e100d0acad18ed53d", + "translation_date": "2026-03-06T11:53:17+00:00", + "source_file": "3-terrarium/3-intro-to-DOM-and-closures/images/terrarium-final.png", + "language_code": "en" + }, + "terrarium-final.2f07047ffc597d0a.webp": { + "original_hash": "c669f9222e16690bb2015ce86bb4739c", + "translation_date": "2026-03-06T11:54:07+00:00", + "source_file": "3-terrarium/2-intro-to-css/images/terrarium-final.png", + "language_code": "en" + }, + "validation-error.8bd23e98d416c22f.webp": { + "original_hash": "d614ce6b24e2583901da9038297fe327", + "translation_date": "2026-03-06T11:53:00+00:00", + "source_file": "7-bank-project/2-forms/images/validation-error.png", + "language_code": "en" + }, + "vs-code-index.e2986cf919471eb9.webp": { + "original_hash": "ed8437cb2629b95551fff5e5d72ef4f5", + "translation_date": "2026-03-06T11:53:12+00:00", + "source_file": "3-terrarium/1-intro-to-html/images/vs-code-index.png", + "language_code": "en" + }, + "webdev101-a11y.8ef3025c858d897a.webp": { + "original_hash": "3f5220c5d502a906028b8a85245cc6da", + "translation_date": "2026-03-06T11:50:41+00:00", + "source_file": "sketchnotes/webdev101-a11y.png", + "language_code": "en" + }, + "webdev101-css.3f7af5991bf53a20.webp": { + "original_hash": "9de1dc14864697c82395b02f31a72aec", + "translation_date": "2026-03-06T11:50:18+00:00", + "source_file": "sketchnotes/webdev101-css.png", + "language_code": "en" + }, + "webdev101-github.8846d7971abef6f9.webp": { + "original_hash": "412ec8fc404fead25f314e2fdb564548", + "translation_date": "2026-03-06T11:50:09+00:00", + "source_file": "sketchnotes/webdev101-github.png", + "language_code": "en" + }, + "webdev101-html.4389c2067af68e98.webp": { + "original_hash": "23bf24ecb0e72f0c6c835824dec5ee54", + "translation_date": "2026-03-06T11:49:50+00:00", + "source_file": "sketchnotes/webdev101-html.png", + "language_code": "en" + }, + "webdev101-js-arrays.439d7528b8a29455.webp": { + "original_hash": "564c9e2d7f8e5a3b7e23570df300c732", + "translation_date": "2026-03-06T11:51:02+00:00", + "source_file": "sketchnotes/webdev101-js-arrays.png", + "language_code": "en" + }, + "webdev101-js-datatypes.4cc470179730702c.webp": { + "original_hash": "20fda1612cc0e8d20e6be01ffc28e5f7", + "translation_date": "2026-03-06T11:50:48+00:00", + "source_file": "sketchnotes/webdev101-js-datatypes.png", + "language_code": "en" + }, + "webdev101-js-decisions.69e1b20f272dd1f0.webp": { + "original_hash": "5e49a0b9b4149f782a4378354ba7fd56", + "translation_date": "2026-03-06T11:50:33+00:00", + "source_file": "sketchnotes/webdev101-js-decisions.png", + "language_code": "en" + }, + "webdev101-js-functions.be049c4726e94f8b.webp": { + "original_hash": "ec4279b1b2191fa07a83e78a97e81f29", + "translation_date": "2026-03-06T11:50:26+00:00", + "source_file": "sketchnotes/webdev101-js-functions.png", + "language_code": "en" + }, + "webdev101-js.10280393044d7eaa.webp": { + "original_hash": "fe1f154de74b31fdeb9a6df40e7ad5e1", + "translation_date": "2026-03-06T11:50:56+00:00", + "source_file": "sketchnotes/webdev101-js.png", + "language_code": "en" + }, + "webdev101-programming.d6e3f98e61ac4bff.webp": { + "original_hash": "adf4dac4d350592773dbdba8ebaaa262", + "translation_date": "2026-03-06T11:50:02+00:00", + "source_file": "sketchnotes/webdev101-programming.png", + "language_code": "en" + }, + "working-tree-pb.6cd43e5076f23ba3.webp": { + "original_hash": "f6b14887694745dd143a09bd60b74185", + "translation_date": "2026-03-06T11:52:04+00:00", + "source_file": "8-code-editor/images/working-tree-pb.png", + "language_code": "en" + }, + "working-tree.c58eec08e6335c79.webp": { + "original_hash": "bf2608b4302123a00a8e7b1b6a430b4a", + "translation_date": "2026-03-06T11:52:01+00:00", + "source_file": "8-code-editor/images/working-tree.png", + "language_code": "en" + } +} \ No newline at end of file diff --git a/translated_images/en/1.b6da8c1394b07491.webp b/translated_images/en/1.b6da8c1394b07491.webp new file mode 100644 index 000000000..f951b91e3 Binary files /dev/null and b/translated_images/en/1.b6da8c1394b07491.webp differ diff --git a/translated_images/en/1.cc07a5cbe114ad1d.webp b/translated_images/en/1.cc07a5cbe114ad1d.webp new file mode 100644 index 000000000..33cc711b8 Binary files /dev/null and b/translated_images/en/1.cc07a5cbe114ad1d.webp differ diff --git a/translated_images/en/2.1dae52ff08042246.webp b/translated_images/en/2.1dae52ff08042246.webp new file mode 100644 index 000000000..a36fc5a40 Binary files /dev/null and b/translated_images/en/2.1dae52ff08042246.webp differ diff --git a/translated_images/en/after-codeswing-extension-pb.0ebddddcf73b5509.webp b/translated_images/en/after-codeswing-extension-pb.0ebddddcf73b5509.webp new file mode 100644 index 000000000..d40b409f5 Binary files /dev/null and b/translated_images/en/after-codeswing-extension-pb.0ebddddcf73b5509.webp differ diff --git a/translated_images/en/background.148a8d43afde5730.webp b/translated_images/en/background.148a8d43afde5730.webp new file mode 100644 index 000000000..f735f5cd3 Binary files /dev/null and b/translated_images/en/background.148a8d43afde5730.webp differ diff --git a/translated_images/en/backgroundColor.e19c3c60768150c8.webp b/translated_images/en/backgroundColor.e19c3c60768150c8.webp new file mode 100644 index 000000000..415592530 Binary files /dev/null and b/translated_images/en/backgroundColor.e19c3c60768150c8.webp differ diff --git a/translated_images/en/browser-console.efaf0b51aaaf6778.webp b/translated_images/en/browser-console.efaf0b51aaaf6778.webp new file mode 100644 index 000000000..a40a81488 Binary files /dev/null and b/translated_images/en/browser-console.efaf0b51aaaf6778.webp differ diff --git a/translated_images/en/browser.60317c9be8b7f84a.webp b/translated_images/en/browser.60317c9be8b7f84a.webp new file mode 100644 index 000000000..dd13229c0 Binary files /dev/null and b/translated_images/en/browser.60317c9be8b7f84a.webp differ diff --git a/translated_images/en/canvas.fbd605ff8e5b8aff.webp b/translated_images/en/canvas.fbd605ff8e5b8aff.webp new file mode 100644 index 000000000..e3d6318ff Binary files /dev/null and b/translated_images/en/canvas.fbd605ff8e5b8aff.webp differ diff --git a/translated_images/en/canvas_grid.5f209da785ded492.webp b/translated_images/en/canvas_grid.5f209da785ded492.webp new file mode 100644 index 000000000..2d0256c2f Binary files /dev/null and b/translated_images/en/canvas_grid.5f209da785ded492.webp differ diff --git a/translated_images/en/character.5c0dd8e067ffd693.webp b/translated_images/en/character.5c0dd8e067ffd693.webp new file mode 100644 index 000000000..6a0167cb3 Binary files /dev/null and b/translated_images/en/character.5c0dd8e067ffd693.webp differ diff --git a/translated_images/en/click-register.e89a30bf0d4bc9ca.webp b/translated_images/en/click-register.e89a30bf0d4bc9ca.webp new file mode 100644 index 000000000..f054292ed Binary files /dev/null and b/translated_images/en/click-register.e89a30bf0d4bc9ca.webp differ diff --git a/translated_images/en/clone_repo.5085c48d666ead57.webp b/translated_images/en/clone_repo.5085c48d666ead57.webp new file mode 100644 index 000000000..c384d7ea7 Binary files /dev/null and b/translated_images/en/clone_repo.5085c48d666ead57.webp differ diff --git a/translated_images/en/clone_repo.6a202fb230ab6bdd.webp b/translated_images/en/clone_repo.6a202fb230ab6bdd.webp new file mode 100644 index 000000000..1f0f6ea3a Binary files /dev/null and b/translated_images/en/clone_repo.6a202fb230ab6bdd.webp differ diff --git a/translated_images/en/codespace.bcecbdf5d2747d3d.webp b/translated_images/en/codespace.bcecbdf5d2747d3d.webp new file mode 100644 index 000000000..95ee30832 Binary files /dev/null and b/translated_images/en/codespace.bcecbdf5d2747d3d.webp differ diff --git a/translated_images/en/create-a-fork.297ab42b4bd0af99.webp b/translated_images/en/create-a-fork.297ab42b4bd0af99.webp new file mode 100644 index 000000000..3e6b0419b Binary files /dev/null and b/translated_images/en/create-a-fork.297ab42b4bd0af99.webp differ diff --git a/translated_images/en/create-new-file-pb.0797800d977ec3eb.webp b/translated_images/en/create-new-file-pb.0797800d977ec3eb.webp new file mode 100644 index 000000000..902427c30 Binary files /dev/null and b/translated_images/en/create-new-file-pb.0797800d977ec3eb.webp differ diff --git a/translated_images/en/create-new-file.2814e609c2af9aeb.webp b/translated_images/en/create-new-file.2814e609c2af9aeb.webp new file mode 100644 index 000000000..2bbfdce93 Binary files /dev/null and b/translated_images/en/create-new-file.2814e609c2af9aeb.webp differ diff --git a/translated_images/en/createcodespace.0238bbf4d7a8d955.webp b/translated_images/en/createcodespace.0238bbf4d7a8d955.webp new file mode 100644 index 000000000..9ae4deb49 Binary files /dev/null and b/translated_images/en/createcodespace.0238bbf4d7a8d955.webp differ diff --git a/translated_images/en/data-flow.fa2354e0908fecc8.webp b/translated_images/en/data-flow.fa2354e0908fecc8.webp new file mode 100644 index 000000000..f361d3b04 Binary files /dev/null and b/translated_images/en/data-flow.fa2354e0908fecc8.webp differ diff --git a/translated_images/en/default-vscode-dev.5d06881d65c1b323.webp b/translated_images/en/default-vscode-dev.5d06881d65c1b323.webp new file mode 100644 index 000000000..8e884d0e8 Binary files /dev/null and b/translated_images/en/default-vscode-dev.5d06881d65c1b323.webp differ diff --git a/translated_images/en/dialog.93bba104afeb79f1.webp b/translated_images/en/dialog.93bba104afeb79f1.webp new file mode 100644 index 000000000..20f1cab8f Binary files /dev/null and b/translated_images/en/dialog.93bba104afeb79f1.webp differ diff --git a/translated_images/en/dom-tree.7daf0e763cbbba92.webp b/translated_images/en/dom-tree.7daf0e763cbbba92.webp new file mode 100644 index 000000000..295ff0ed4 Binary files /dev/null and b/translated_images/en/dom-tree.7daf0e763cbbba92.webp differ diff --git a/translated_images/en/earlybrowsers.d984b711cdf3a42d.webp b/translated_images/en/earlybrowsers.d984b711cdf3a42d.webp new file mode 100644 index 000000000..f63eaeaa3 Binary files /dev/null and b/translated_images/en/earlybrowsers.d984b711cdf3a42d.webp differ diff --git a/translated_images/en/edit-a-file-pb.263555922c14fc52.webp b/translated_images/en/edit-a-file-pb.263555922c14fc52.webp new file mode 100644 index 000000000..85cdc715b Binary files /dev/null and b/translated_images/en/edit-a-file-pb.263555922c14fc52.webp differ diff --git a/translated_images/en/edit-a-file.52c0ee665ef19f08.webp b/translated_images/en/edit-a-file.52c0ee665ef19f08.webp new file mode 100644 index 000000000..7c03d44a1 Binary files /dev/null and b/translated_images/en/edit-a-file.52c0ee665ef19f08.webp differ diff --git a/translated_images/en/enemyShip.035a46787bff658c.webp b/translated_images/en/enemyShip.035a46787bff658c.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.035a46787bff658c.webp differ diff --git a/translated_images/en/enemyShip.1a1354d7988de290.webp b/translated_images/en/enemyShip.1a1354d7988de290.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.1a1354d7988de290.webp differ diff --git a/translated_images/en/enemyShip.22cbee6ea27a5809.webp b/translated_images/en/enemyShip.22cbee6ea27a5809.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.22cbee6ea27a5809.webp differ diff --git a/translated_images/en/enemyShip.321ecb1b4eb21f2c.webp b/translated_images/en/enemyShip.321ecb1b4eb21f2c.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.321ecb1b4eb21f2c.webp differ diff --git a/translated_images/en/enemyShip.4fbf2889e6129db4.webp b/translated_images/en/enemyShip.4fbf2889e6129db4.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.4fbf2889e6129db4.webp differ diff --git a/translated_images/en/enemyShip.5df2a822c16650c2.webp b/translated_images/en/enemyShip.5df2a822c16650c2.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.5df2a822c16650c2.webp differ diff --git a/translated_images/en/enemyShip.62983ed4bfb2220f.webp b/translated_images/en/enemyShip.62983ed4bfb2220f.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.62983ed4bfb2220f.webp differ diff --git a/translated_images/en/enemyShip.add7036e1c3c3014.webp b/translated_images/en/enemyShip.add7036e1c3c3014.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.add7036e1c3c3014.webp differ diff --git a/translated_images/en/enemyShip.b39a140287683bf7.webp b/translated_images/en/enemyShip.b39a140287683bf7.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.b39a140287683bf7.webp differ diff --git a/translated_images/en/enemyShip.b9626ed228a17a32.webp b/translated_images/en/enemyShip.b9626ed228a17a32.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.b9626ed228a17a32.webp differ diff --git a/translated_images/en/enemyShip.deb0477a7312f54d.webp b/translated_images/en/enemyShip.deb0477a7312f54d.webp new file mode 100644 index 000000000..a668c6e24 Binary files /dev/null and b/translated_images/en/enemyShip.deb0477a7312f54d.webp differ diff --git a/translated_images/en/enemyUFO.bf8585e4e8dcdb68.webp b/translated_images/en/enemyUFO.bf8585e4e8dcdb68.webp new file mode 100644 index 000000000..4f52507d2 Binary files /dev/null and b/translated_images/en/enemyUFO.bf8585e4e8dcdb68.webp differ diff --git a/translated_images/en/extension-details.9f8f1fd4e9eb2de5.webp b/translated_images/en/extension-details.9f8f1fd4e9eb2de5.webp new file mode 100644 index 000000000..2bb955796 Binary files /dev/null and b/translated_images/en/extension-details.9f8f1fd4e9eb2de5.webp differ diff --git a/translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp b/translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp new file mode 100644 index 000000000..fe31cfec7 Binary files /dev/null and b/translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp differ diff --git a/translated_images/en/extension-settings.21c752ae4f4cdb78.webp b/translated_images/en/extension-settings.21c752ae4f4cdb78.webp new file mode 100644 index 000000000..34f6b2188 Binary files /dev/null and b/translated_images/en/extension-settings.21c752ae4f4cdb78.webp differ diff --git a/translated_images/en/extensions.eca0e0c7f59a10b5.webp b/translated_images/en/extensions.eca0e0c7f59a10b5.webp new file mode 100644 index 000000000..8a01bafba Binary files /dev/null and b/translated_images/en/extensions.eca0e0c7f59a10b5.webp differ diff --git a/translated_images/en/favicon.37b561214b36d454.webp b/translated_images/en/favicon.37b561214b36d454.webp new file mode 100644 index 000000000..48a53960d Binary files /dev/null and b/translated_images/en/favicon.37b561214b36d454.webp differ diff --git a/translated_images/en/form-post.61de4ca1b964d91a.webp b/translated_images/en/form-post.61de4ca1b964d91a.webp new file mode 100644 index 000000000..edd0691f7 Binary files /dev/null and b/translated_images/en/form-post.61de4ca1b964d91a.webp differ diff --git a/translated_images/en/history.7fdabbafa521e064.webp b/translated_images/en/history.7fdabbafa521e064.webp new file mode 100644 index 000000000..162af5d6f Binary files /dev/null and b/translated_images/en/history.7fdabbafa521e064.webp differ diff --git a/translated_images/en/install-on-edge.78634f02842c4828.webp b/translated_images/en/install-on-edge.78634f02842c4828.webp new file mode 100644 index 000000000..d00046ed7 Binary files /dev/null and b/translated_images/en/install-on-edge.78634f02842c4828.webp differ diff --git a/translated_images/en/install-on-edge.d68781acaf0b3d3d.webp b/translated_images/en/install-on-edge.d68781acaf0b3d3d.webp new file mode 100644 index 000000000..d00046ed7 Binary files /dev/null and b/translated_images/en/install-on-edge.d68781acaf0b3d3d.webp differ diff --git a/translated_images/en/laserGreen.89904f0f49945560.webp b/translated_images/en/laserGreen.89904f0f49945560.webp new file mode 100644 index 000000000..bfe37aafc Binary files /dev/null and b/translated_images/en/laserGreen.89904f0f49945560.webp differ diff --git a/translated_images/en/laserGreenShot.e4fbfc4714c08a5b.webp b/translated_images/en/laserGreenShot.e4fbfc4714c08a5b.webp new file mode 100644 index 000000000..dd3e87139 Binary files /dev/null and b/translated_images/en/laserGreenShot.e4fbfc4714c08a5b.webp differ diff --git a/translated_images/en/laserRed.2040e11f55c0a40a.webp b/translated_images/en/laserRed.2040e11f55c0a40a.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.2040e11f55c0a40a.webp differ diff --git a/translated_images/en/laserRed.381bc5555491ce67.webp b/translated_images/en/laserRed.381bc5555491ce67.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.381bc5555491ce67.webp differ diff --git a/translated_images/en/laserRed.69730edd76f0b3bd.webp b/translated_images/en/laserRed.69730edd76f0b3bd.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.69730edd76f0b3bd.webp differ diff --git a/translated_images/en/laserRed.b583dc1728eb8581.webp b/translated_images/en/laserRed.b583dc1728eb8581.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.b583dc1728eb8581.webp differ diff --git a/translated_images/en/laserRed.cae9ab24ea9b18fd.webp b/translated_images/en/laserRed.cae9ab24ea9b18fd.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.cae9ab24ea9b18fd.webp differ diff --git a/translated_images/en/laserRed.d81ce4986f87c251.webp b/translated_images/en/laserRed.d81ce4986f87c251.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.d81ce4986f87c251.webp differ diff --git a/translated_images/en/laserRed.e58ef8db2585dfbe.webp b/translated_images/en/laserRed.e58ef8db2585dfbe.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.e58ef8db2585dfbe.webp differ diff --git a/translated_images/en/laserRed.e66e29ace6666064.webp b/translated_images/en/laserRed.e66e29ace6666064.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.e66e29ace6666064.webp differ diff --git a/translated_images/en/laserRed.e86e8fb629c6026e.webp b/translated_images/en/laserRed.e86e8fb629c6026e.webp new file mode 100644 index 000000000..27c042acb Binary files /dev/null and b/translated_images/en/laserRed.e86e8fb629c6026e.webp differ diff --git a/translated_images/en/laserRedShot.c39d066745996a71.webp b/translated_images/en/laserRedShot.c39d066745996a71.webp new file mode 100644 index 000000000..99fcece7a Binary files /dev/null and b/translated_images/en/laserRedShot.c39d066745996a71.webp differ diff --git a/translated_images/en/life.27144b6d4bfdea76.webp b/translated_images/en/life.27144b6d4bfdea76.webp new file mode 100644 index 000000000..442ec0a5b Binary files /dev/null and b/translated_images/en/life.27144b6d4bfdea76.webp differ diff --git a/translated_images/en/life.2a159298dd98f4ef.webp b/translated_images/en/life.2a159298dd98f4ef.webp new file mode 100644 index 000000000..442ec0a5b Binary files /dev/null and b/translated_images/en/life.2a159298dd98f4ef.webp differ diff --git a/translated_images/en/life.466df3b1692a244a.webp b/translated_images/en/life.466df3b1692a244a.webp new file mode 100644 index 000000000..442ec0a5b Binary files /dev/null and b/translated_images/en/life.466df3b1692a244a.webp differ diff --git a/translated_images/en/life.65a2aaceca875284.webp b/translated_images/en/life.65a2aaceca875284.webp new file mode 100644 index 000000000..442ec0a5b Binary files /dev/null and b/translated_images/en/life.65a2aaceca875284.webp differ diff --git a/translated_images/en/life.6fb9f50d53ee0413.webp b/translated_images/en/life.6fb9f50d53ee0413.webp new file mode 100644 index 000000000..442ec0a5b Binary files /dev/null and b/translated_images/en/life.6fb9f50d53ee0413.webp differ diff --git a/translated_images/en/life.78b6e96a3003767e.webp b/translated_images/en/life.78b6e96a3003767e.webp new file mode 100644 index 000000000..442ec0a5b Binary files /dev/null and b/translated_images/en/life.78b6e96a3003767e.webp differ diff --git a/translated_images/en/life.86d843ce9c23289c.webp b/translated_images/en/life.86d843ce9c23289c.webp new file mode 100644 index 000000000..442ec0a5b Binary files /dev/null and b/translated_images/en/life.86d843ce9c23289c.webp differ diff --git a/translated_images/en/localstorage.472f8147b6a3f8d1.webp b/translated_images/en/localstorage.472f8147b6a3f8d1.webp new file mode 100644 index 000000000..a7e41f9d0 Binary files /dev/null and b/translated_images/en/localstorage.472f8147b6a3f8d1.webp differ diff --git a/translated_images/en/log.804026979f3707e0.webp b/translated_images/en/log.804026979f3707e0.webp new file mode 100644 index 000000000..f8c31cd10 Binary files /dev/null and b/translated_images/en/log.804026979f3707e0.webp differ diff --git a/translated_images/en/login-error.416fe019b36a6327.webp b/translated_images/en/login-error.416fe019b36a6327.webp new file mode 100644 index 000000000..4b4e36656 Binary files /dev/null and b/translated_images/en/login-error.416fe019b36a6327.webp differ diff --git a/translated_images/en/meteorBig.1e452b3ad7af50ad.webp b/translated_images/en/meteorBig.1e452b3ad7af50ad.webp new file mode 100644 index 000000000..39fba1031 Binary files /dev/null and b/translated_images/en/meteorBig.1e452b3ad7af50ad.webp differ diff --git a/translated_images/en/meteorSmall.0d729bc71c12d41f.webp b/translated_images/en/meteorSmall.0d729bc71c12d41f.webp new file mode 100644 index 000000000..631797205 Binary files /dev/null and b/translated_images/en/meteorSmall.0d729bc71c12d41f.webp differ diff --git a/translated_images/en/moodle.94eb93d714a50cb2.webp b/translated_images/en/moodle.94eb93d714a50cb2.webp new file mode 100644 index 000000000..90a52755e Binary files /dev/null and b/translated_images/en/moodle.94eb93d714a50cb2.webp differ diff --git a/translated_images/en/mpa.7f7375a1a2d4aa77.webp b/translated_images/en/mpa.7f7375a1a2d4aa77.webp new file mode 100644 index 000000000..98d533643 Binary files /dev/null and b/translated_images/en/mpa.7f7375a1a2d4aa77.webp differ diff --git a/translated_images/en/nebula.55c2933d36d035d3.webp b/translated_images/en/nebula.55c2933d36d035d3.webp new file mode 100644 index 000000000..a294cbf33 Binary files /dev/null and b/translated_images/en/nebula.55c2933d36d035d3.webp differ diff --git a/translated_images/en/new-file-github.com.c886796d800e8056.webp b/translated_images/en/new-file-github.com.c886796d800e8056.webp new file mode 100644 index 000000000..838642e1c Binary files /dev/null and b/translated_images/en/new-file-github.com.c886796d800e8056.webp differ diff --git a/translated_images/en/open-palette-menu.46dda01084738da8.webp b/translated_images/en/open-palette-menu.46dda01084738da8.webp new file mode 100644 index 000000000..66cde7f5a Binary files /dev/null and b/translated_images/en/open-palette-menu.46dda01084738da8.webp differ diff --git a/translated_images/en/open-remote-repository.bd9c2598b8949e7f.webp b/translated_images/en/open-remote-repository.bd9c2598b8949e7f.webp new file mode 100644 index 000000000..7e4c3555d Binary files /dev/null and b/translated_images/en/open-remote-repository.bd9c2598b8949e7f.webp differ diff --git a/translated_images/en/palette-menu.4946174e07f42622.webp b/translated_images/en/palette-menu.4946174e07f42622.webp new file mode 100644 index 000000000..a257874a1 Binary files /dev/null and b/translated_images/en/palette-menu.4946174e07f42622.webp differ diff --git a/translated_images/en/partI-solution.36c53b48c9ffae2a.webp b/translated_images/en/partI-solution.36c53b48c9ffae2a.webp new file mode 100644 index 000000000..e7df45a1e Binary files /dev/null and b/translated_images/en/partI-solution.36c53b48c9ffae2a.webp differ diff --git a/translated_images/en/plant1.a876180d8659acb9.webp b/translated_images/en/plant1.a876180d8659acb9.webp new file mode 100644 index 000000000..0afdb8492 Binary files /dev/null and b/translated_images/en/plant1.a876180d8659acb9.webp differ diff --git a/translated_images/en/plant10.2f2c47804ae52dd3.webp b/translated_images/en/plant10.2f2c47804ae52dd3.webp new file mode 100644 index 000000000..a972d3197 Binary files /dev/null and b/translated_images/en/plant10.2f2c47804ae52dd3.webp differ diff --git a/translated_images/en/plant11.0ce0081b0ef17aa1.webp b/translated_images/en/plant11.0ce0081b0ef17aa1.webp new file mode 100644 index 000000000..83718f403 Binary files /dev/null and b/translated_images/en/plant11.0ce0081b0ef17aa1.webp differ diff --git a/translated_images/en/plant12.6b934c4312a00228.webp b/translated_images/en/plant12.6b934c4312a00228.webp new file mode 100644 index 000000000..abfcadc6c Binary files /dev/null and b/translated_images/en/plant12.6b934c4312a00228.webp differ diff --git a/translated_images/en/plant13.37d6ab2e2481421f.webp b/translated_images/en/plant13.37d6ab2e2481421f.webp new file mode 100644 index 000000000..77816483d Binary files /dev/null and b/translated_images/en/plant13.37d6ab2e2481421f.webp differ diff --git a/translated_images/en/plant14.908791477a46eb7f.webp b/translated_images/en/plant14.908791477a46eb7f.webp new file mode 100644 index 000000000..9b2eea637 Binary files /dev/null and b/translated_images/en/plant14.908791477a46eb7f.webp differ diff --git a/translated_images/en/plant2.9e45efea224115b0.webp b/translated_images/en/plant2.9e45efea224115b0.webp new file mode 100644 index 000000000..e6b517d90 Binary files /dev/null and b/translated_images/en/plant2.9e45efea224115b0.webp differ diff --git a/translated_images/en/plant3.06efdd0fa0c4b115.webp b/translated_images/en/plant3.06efdd0fa0c4b115.webp new file mode 100644 index 000000000..fa73f15cf Binary files /dev/null and b/translated_images/en/plant3.06efdd0fa0c4b115.webp differ diff --git a/translated_images/en/plant4.3b78072b427727c6.webp b/translated_images/en/plant4.3b78072b427727c6.webp new file mode 100644 index 000000000..be231012e Binary files /dev/null and b/translated_images/en/plant4.3b78072b427727c6.webp differ diff --git a/translated_images/en/plant5.8ec58b18ac336fa8.webp b/translated_images/en/plant5.8ec58b18ac336fa8.webp new file mode 100644 index 000000000..4e295e185 Binary files /dev/null and b/translated_images/en/plant5.8ec58b18ac336fa8.webp differ diff --git a/translated_images/en/plant6.ca4ff8372e6676b1.webp b/translated_images/en/plant6.ca4ff8372e6676b1.webp new file mode 100644 index 000000000..46a89a545 Binary files /dev/null and b/translated_images/en/plant6.ca4ff8372e6676b1.webp differ diff --git a/translated_images/en/plant7.194d5a42fcf5a88c.webp b/translated_images/en/plant7.194d5a42fcf5a88c.webp new file mode 100644 index 000000000..420dca0b9 Binary files /dev/null and b/translated_images/en/plant7.194d5a42fcf5a88c.webp differ diff --git a/translated_images/en/plant8.7b247809ab0eb492.webp b/translated_images/en/plant8.7b247809ab0eb492.webp new file mode 100644 index 000000000..9b4c15c2f Binary files /dev/null and b/translated_images/en/plant8.7b247809ab0eb492.webp differ diff --git a/translated_images/en/plant9.8fe614c01ded1b1e.webp b/translated_images/en/plant9.8fe614c01ded1b1e.webp new file mode 100644 index 000000000..893f89540 Binary files /dev/null and b/translated_images/en/plant9.8fe614c01ded1b1e.webp differ diff --git a/translated_images/en/player.137ee0e47f895ffc.webp b/translated_images/en/player.137ee0e47f895ffc.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.137ee0e47f895ffc.webp differ diff --git a/translated_images/en/player.2887422f6982c3cd.webp b/translated_images/en/player.2887422f6982c3cd.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.2887422f6982c3cd.webp differ diff --git a/translated_images/en/player.391fed427ede24f5.webp b/translated_images/en/player.391fed427ede24f5.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.391fed427ede24f5.webp differ diff --git a/translated_images/en/player.3c4f50182552a73a.webp b/translated_images/en/player.3c4f50182552a73a.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.3c4f50182552a73a.webp differ diff --git a/translated_images/en/player.47bc9de0714c723d.webp b/translated_images/en/player.47bc9de0714c723d.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.47bc9de0714c723d.webp differ diff --git a/translated_images/en/player.57b3107c03012695.webp b/translated_images/en/player.57b3107c03012695.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.57b3107c03012695.webp differ diff --git a/translated_images/en/player.606f85953e5e564e.webp b/translated_images/en/player.606f85953e5e564e.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.606f85953e5e564e.webp differ diff --git a/translated_images/en/player.680ea4c619b54fe1.webp b/translated_images/en/player.680ea4c619b54fe1.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.680ea4c619b54fe1.webp differ diff --git a/translated_images/en/player.bfe14f110bddf56d.webp b/translated_images/en/player.bfe14f110bddf56d.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.bfe14f110bddf56d.webp differ diff --git a/translated_images/en/player.c99c25d54a615ca0.webp b/translated_images/en/player.c99c25d54a615ca0.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.c99c25d54a615ca0.webp differ diff --git a/translated_images/en/player.dd24c1afa8c71e9b.webp b/translated_images/en/player.dd24c1afa8c71e9b.webp new file mode 100644 index 000000000..879c28a80 Binary files /dev/null and b/translated_images/en/player.dd24c1afa8c71e9b.webp differ diff --git a/translated_images/en/playerDamaged.181703f652fd5176.webp b/translated_images/en/playerDamaged.181703f652fd5176.webp new file mode 100644 index 000000000..00d3377d9 Binary files /dev/null and b/translated_images/en/playerDamaged.181703f652fd5176.webp differ diff --git a/translated_images/en/playerLeft.0f928412e66ba5d9.webp b/translated_images/en/playerLeft.0f928412e66ba5d9.webp new file mode 100644 index 000000000..0856babce Binary files /dev/null and b/translated_images/en/playerLeft.0f928412e66ba5d9.webp differ diff --git a/translated_images/en/playerRight.e4825f489e29f737.webp b/translated_images/en/playerRight.e4825f489e29f737.webp new file mode 100644 index 000000000..8d6696a22 Binary files /dev/null and b/translated_images/en/playerRight.e4825f489e29f737.webp differ diff --git a/translated_images/en/playground-choice.1d23ba7d407f4758.webp b/translated_images/en/playground-choice.1d23ba7d407f4758.webp new file mode 100644 index 000000000..bdb9df17c Binary files /dev/null and b/translated_images/en/playground-choice.1d23ba7d407f4758.webp differ diff --git a/translated_images/en/playground.d2b927122224ff8f.webp b/translated_images/en/playground.d2b927122224ff8f.webp new file mode 100644 index 000000000..dbd7f55c9 Binary files /dev/null and b/translated_images/en/playground.d2b927122224ff8f.webp differ diff --git a/translated_images/en/preview.9215f0a010074476.webp b/translated_images/en/preview.9215f0a010074476.webp new file mode 100644 index 000000000..84346fe7c Binary files /dev/null and b/translated_images/en/preview.9215f0a010074476.webp differ diff --git a/translated_images/en/profiler.5a4a62479c5df01c.webp b/translated_images/en/profiler.5a4a62479c5df01c.webp new file mode 100644 index 000000000..0cfd23b63 Binary files /dev/null and b/translated_images/en/profiler.5a4a62479c5df01c.webp differ diff --git a/translated_images/en/project-on-vscode.dev.e79815a9a95ee7fe.webp b/translated_images/en/project-on-vscode.dev.e79815a9a95ee7fe.webp new file mode 100644 index 000000000..afbcd98d1 Binary files /dev/null and b/translated_images/en/project-on-vscode.dev.e79815a9a95ee7fe.webp differ diff --git a/translated_images/en/result.96ef01f607bf856a.webp b/translated_images/en/result.96ef01f607bf856a.webp new file mode 100644 index 000000000..51ef20f14 Binary files /dev/null and b/translated_images/en/result.96ef01f607bf856a.webp differ diff --git a/translated_images/en/screen1.baccbba0f1f93364.webp b/translated_images/en/screen1.baccbba0f1f93364.webp new file mode 100644 index 000000000..07dc0f16a Binary files /dev/null and b/translated_images/en/screen1.baccbba0f1f93364.webp differ diff --git a/translated_images/en/screen2.123c82a831a1d14a.webp b/translated_images/en/screen2.123c82a831a1d14a.webp new file mode 100644 index 000000000..9e6d9a002 Binary files /dev/null and b/translated_images/en/screen2.123c82a831a1d14a.webp differ diff --git a/translated_images/en/screenshot.0a1ee0d123df681b.webp b/translated_images/en/screenshot.0a1ee0d123df681b.webp new file mode 100644 index 000000000..5eee42b6e Binary files /dev/null and b/translated_images/en/screenshot.0a1ee0d123df681b.webp differ diff --git a/translated_images/en/screenshot.e7a5ad659e364568.webp b/translated_images/en/screenshot.e7a5ad659e364568.webp new file mode 100644 index 000000000..b2ddd9c88 Binary files /dev/null and b/translated_images/en/screenshot.e7a5ad659e364568.webp differ diff --git a/translated_images/en/screenshot_gray.0c796099a1f9f25e.webp b/translated_images/en/screenshot_gray.0c796099a1f9f25e.webp new file mode 100644 index 000000000..5fc633e5c Binary files /dev/null and b/translated_images/en/screenshot_gray.0c796099a1f9f25e.webp differ diff --git a/translated_images/en/shield.1b9412b7ca6610ab.webp b/translated_images/en/shield.1b9412b7ca6610ab.webp new file mode 100644 index 000000000..a2e065ca1 Binary files /dev/null and b/translated_images/en/shield.1b9412b7ca6610ab.webp differ diff --git a/translated_images/en/snapshot.97750180ebcad737.webp b/translated_images/en/snapshot.97750180ebcad737.webp new file mode 100644 index 000000000..0babbb24c Binary files /dev/null and b/translated_images/en/snapshot.97750180ebcad737.webp differ diff --git a/translated_images/en/spa.268ec73b41f992c2.webp b/translated_images/en/spa.268ec73b41f992c2.webp new file mode 100644 index 000000000..2bd4c1405 Binary files /dev/null and b/translated_images/en/spa.268ec73b41f992c2.webp differ diff --git a/translated_images/en/speedLine.5bcabb93f48b5ae1.webp b/translated_images/en/speedLine.5bcabb93f48b5ae1.webp new file mode 100644 index 000000000..57b77b342 Binary files /dev/null and b/translated_images/en/speedLine.5bcabb93f48b5ae1.webp differ diff --git a/translated_images/en/spritesheet.bec82852290b14ee.webp b/translated_images/en/spritesheet.bec82852290b14ee.webp new file mode 100644 index 000000000..02853f8a0 Binary files /dev/null and b/translated_images/en/spritesheet.bec82852290b14ee.webp differ diff --git a/translated_images/en/starBackground.a897b8acb1b0587d.webp b/translated_images/en/starBackground.a897b8acb1b0587d.webp new file mode 100644 index 000000000..66280c96a Binary files /dev/null and b/translated_images/en/starBackground.a897b8acb1b0587d.webp differ diff --git a/translated_images/en/starBig.72e9c6d0d18f363d.webp b/translated_images/en/starBig.72e9c6d0d18f363d.webp new file mode 100644 index 000000000..917791333 Binary files /dev/null and b/translated_images/en/starBig.72e9c6d0d18f363d.webp differ diff --git a/translated_images/en/starSmall.ed78b961dbcd0898.webp b/translated_images/en/starSmall.ed78b961dbcd0898.webp new file mode 100644 index 000000000..bf86a6e91 Binary files /dev/null and b/translated_images/en/starSmall.ed78b961dbcd0898.webp differ diff --git a/translated_images/en/template.67ad477109d29a2b.webp b/translated_images/en/template.67ad477109d29a2b.webp new file mode 100644 index 000000000..919a3d51a Binary files /dev/null and b/translated_images/en/template.67ad477109d29a2b.webp differ diff --git a/translated_images/en/terrarium-final.0920f16e87c13a84.webp b/translated_images/en/terrarium-final.0920f16e87c13a84.webp new file mode 100644 index 000000000..5fc633e5c Binary files /dev/null and b/translated_images/en/terrarium-final.0920f16e87c13a84.webp differ diff --git a/translated_images/en/terrarium-final.2f07047ffc597d0a.webp b/translated_images/en/terrarium-final.2f07047ffc597d0a.webp new file mode 100644 index 000000000..98ea433bf Binary files /dev/null and b/translated_images/en/terrarium-final.2f07047ffc597d0a.webp differ diff --git a/translated_images/en/validation-error.8bd23e98d416c22f.webp b/translated_images/en/validation-error.8bd23e98d416c22f.webp new file mode 100644 index 000000000..6436f89c4 Binary files /dev/null and b/translated_images/en/validation-error.8bd23e98d416c22f.webp differ diff --git a/translated_images/en/vs-code-index.e2986cf919471eb9.webp b/translated_images/en/vs-code-index.e2986cf919471eb9.webp new file mode 100644 index 000000000..47d52d488 Binary files /dev/null and b/translated_images/en/vs-code-index.e2986cf919471eb9.webp differ diff --git a/translated_images/en/webdev101-a11y.8ef3025c858d897a.webp b/translated_images/en/webdev101-a11y.8ef3025c858d897a.webp new file mode 100644 index 000000000..7089cea71 Binary files /dev/null and b/translated_images/en/webdev101-a11y.8ef3025c858d897a.webp differ diff --git a/translated_images/en/webdev101-css.3f7af5991bf53a20.webp b/translated_images/en/webdev101-css.3f7af5991bf53a20.webp new file mode 100644 index 000000000..325aa3a8a Binary files /dev/null and b/translated_images/en/webdev101-css.3f7af5991bf53a20.webp differ diff --git a/translated_images/en/webdev101-github.8846d7971abef6f9.webp b/translated_images/en/webdev101-github.8846d7971abef6f9.webp new file mode 100644 index 000000000..1a24746fa Binary files /dev/null and b/translated_images/en/webdev101-github.8846d7971abef6f9.webp differ diff --git a/translated_images/en/webdev101-html.4389c2067af68e98.webp b/translated_images/en/webdev101-html.4389c2067af68e98.webp new file mode 100644 index 000000000..b52c12fcb Binary files /dev/null and b/translated_images/en/webdev101-html.4389c2067af68e98.webp differ diff --git a/translated_images/en/webdev101-js-arrays.439d7528b8a29455.webp b/translated_images/en/webdev101-js-arrays.439d7528b8a29455.webp new file mode 100644 index 000000000..981bfc47c Binary files /dev/null and b/translated_images/en/webdev101-js-arrays.439d7528b8a29455.webp differ diff --git a/translated_images/en/webdev101-js-datatypes.4cc470179730702c.webp b/translated_images/en/webdev101-js-datatypes.4cc470179730702c.webp new file mode 100644 index 000000000..75bca7c93 Binary files /dev/null and b/translated_images/en/webdev101-js-datatypes.4cc470179730702c.webp differ diff --git a/translated_images/en/webdev101-js-decisions.69e1b20f272dd1f0.webp b/translated_images/en/webdev101-js-decisions.69e1b20f272dd1f0.webp new file mode 100644 index 000000000..3f99231cf Binary files /dev/null and b/translated_images/en/webdev101-js-decisions.69e1b20f272dd1f0.webp differ diff --git a/translated_images/en/webdev101-js-functions.be049c4726e94f8b.webp b/translated_images/en/webdev101-js-functions.be049c4726e94f8b.webp new file mode 100644 index 000000000..f5fef90c1 Binary files /dev/null and b/translated_images/en/webdev101-js-functions.be049c4726e94f8b.webp differ diff --git a/translated_images/en/webdev101-js.10280393044d7eaa.webp b/translated_images/en/webdev101-js.10280393044d7eaa.webp new file mode 100644 index 000000000..a11f4f882 Binary files /dev/null and b/translated_images/en/webdev101-js.10280393044d7eaa.webp differ diff --git a/translated_images/en/webdev101-programming.d6e3f98e61ac4bff.webp b/translated_images/en/webdev101-programming.d6e3f98e61ac4bff.webp new file mode 100644 index 000000000..127becaa2 Binary files /dev/null and b/translated_images/en/webdev101-programming.d6e3f98e61ac4bff.webp differ diff --git a/translated_images/en/working-tree-pb.6cd43e5076f23ba3.webp b/translated_images/en/working-tree-pb.6cd43e5076f23ba3.webp new file mode 100644 index 000000000..5c0775fa7 Binary files /dev/null and b/translated_images/en/working-tree-pb.6cd43e5076f23ba3.webp differ diff --git a/translated_images/en/working-tree.c58eec08e6335c79.webp b/translated_images/en/working-tree.c58eec08e6335c79.webp new file mode 100644 index 000000000..4dc43168b Binary files /dev/null and b/translated_images/en/working-tree.c58eec08e6335c79.webp differ diff --git a/translated_images/enemyShip.035a46787bff658cd126f2e02f640e60fc84536ee2d009a1a5792f3e0423c148.en.png b/translated_images/enemyShip.035a46787bff658cd126f2e02f640e60fc84536ee2d009a1a5792f3e0423c148.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.035a46787bff658cd126f2e02f640e60fc84536ee2d009a1a5792f3e0423c148.en.png and /dev/null differ diff --git a/translated_images/enemyShip.1a1354d7988de290ea352832e06745922d463e9a4a7cca3b8f89477e934b16b2.en.png b/translated_images/enemyShip.1a1354d7988de290ea352832e06745922d463e9a4a7cca3b8f89477e934b16b2.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.1a1354d7988de290ea352832e06745922d463e9a4a7cca3b8f89477e934b16b2.en.png and /dev/null differ diff --git a/translated_images/enemyShip.22cbee6ea27a5809ef09dddc81a4f77714de1a4c8fe2b29ee5d13651f8d60fe0.en.png b/translated_images/enemyShip.22cbee6ea27a5809ef09dddc81a4f77714de1a4c8fe2b29ee5d13651f8d60fe0.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.22cbee6ea27a5809ef09dddc81a4f77714de1a4c8fe2b29ee5d13651f8d60fe0.en.png and /dev/null differ diff --git a/translated_images/enemyShip.321ecb1b4eb21f2c5b74a5118216ac3cbdf4cda52de32993a6c157547e7539bd.en.png b/translated_images/enemyShip.321ecb1b4eb21f2c5b74a5118216ac3cbdf4cda52de32993a6c157547e7539bd.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.321ecb1b4eb21f2c5b74a5118216ac3cbdf4cda52de32993a6c157547e7539bd.en.png and /dev/null differ diff --git a/translated_images/enemyShip.4fbf2889e6129db41989c4c74999ae81dd8d4dd994f1df01f720e923a5749a36.en.png b/translated_images/enemyShip.4fbf2889e6129db41989c4c74999ae81dd8d4dd994f1df01f720e923a5749a36.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.4fbf2889e6129db41989c4c74999ae81dd8d4dd994f1df01f720e923a5749a36.en.png and /dev/null differ diff --git a/translated_images/enemyShip.5df2a822c16650c2fb3c06652e8ec8120cdb9122a6de46b9a1a56d54db22657f.en.png b/translated_images/enemyShip.5df2a822c16650c2fb3c06652e8ec8120cdb9122a6de46b9a1a56d54db22657f.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.5df2a822c16650c2fb3c06652e8ec8120cdb9122a6de46b9a1a56d54db22657f.en.png and /dev/null differ diff --git a/translated_images/enemyShip.62983ed4bfb2220fe28986c8c8c5e6f1528caf879a4290bddbf3550469374c5d.en.png b/translated_images/enemyShip.62983ed4bfb2220fe28986c8c8c5e6f1528caf879a4290bddbf3550469374c5d.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.62983ed4bfb2220fe28986c8c8c5e6f1528caf879a4290bddbf3550469374c5d.en.png and /dev/null differ diff --git a/translated_images/enemyShip.add7036e1c3c30144d4500534897f937d962ffb178f6d7dbb536c2b19f05d3b7.en.png b/translated_images/enemyShip.add7036e1c3c30144d4500534897f937d962ffb178f6d7dbb536c2b19f05d3b7.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.add7036e1c3c30144d4500534897f937d962ffb178f6d7dbb536c2b19f05d3b7.en.png and /dev/null differ diff --git a/translated_images/enemyShip.b39a140287683bf7a409e00e19b41f29793c9dea0220e5d9fb174978fec357a2.en.png b/translated_images/enemyShip.b39a140287683bf7a409e00e19b41f29793c9dea0220e5d9fb174978fec357a2.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.b39a140287683bf7a409e00e19b41f29793c9dea0220e5d9fb174978fec357a2.en.png and /dev/null differ diff --git a/translated_images/enemyShip.b9626ed228a17a323a180f11f359f96848de1c9ee48d76702b49cd1cc3ef3821.en.png b/translated_images/enemyShip.b9626ed228a17a323a180f11f359f96848de1c9ee48d76702b49cd1cc3ef3821.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.b9626ed228a17a323a180f11f359f96848de1c9ee48d76702b49cd1cc3ef3821.en.png and /dev/null differ diff --git a/translated_images/enemyShip.deb0477a7312f54d5e9b3f707b02af3cfa2cafa04e1e9a3dd5818e6ab0244b2c.en.png b/translated_images/enemyShip.deb0477a7312f54d5e9b3f707b02af3cfa2cafa04e1e9a3dd5818e6ab0244b2c.en.png deleted file mode 100644 index 511221671..000000000 Binary files a/translated_images/enemyShip.deb0477a7312f54d5e9b3f707b02af3cfa2cafa04e1e9a3dd5818e6ab0244b2c.en.png and /dev/null differ diff --git a/translated_images/enemyUFO.bf8585e4e8dcdb68e03f67a534d870334c5db3557ad4f960027eac7782cf7ceb.en.png b/translated_images/enemyUFO.bf8585e4e8dcdb68e03f67a534d870334c5db3557ad4f960027eac7782cf7ceb.en.png deleted file mode 100644 index 0431526ad..000000000 Binary files a/translated_images/enemyUFO.bf8585e4e8dcdb68e03f67a534d870334c5db3557ad4f960027eac7782cf7ceb.en.png and /dev/null differ diff --git a/translated_images/extension-details.9f8f1fd4e9eb2de5069ae413119eb8ee43172776383ebe2f7cf640e11df2e106.en.png b/translated_images/extension-details.9f8f1fd4e9eb2de5069ae413119eb8ee43172776383ebe2f7cf640e11df2e106.en.png deleted file mode 100644 index e8763a282..000000000 Binary files a/translated_images/extension-details.9f8f1fd4e9eb2de5069ae413119eb8ee43172776383ebe2f7cf640e11df2e106.en.png and /dev/null differ diff --git a/translated_images/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.en.png b/translated_images/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.en.png deleted file mode 100644 index 00d0890db..000000000 Binary files a/translated_images/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.en.png and /dev/null differ diff --git a/translated_images/extension-settings.21c752ae4f4cdb78a867f140ccd0680e04619d0c44bb4afb26373e54b829d934.en.png b/translated_images/extension-settings.21c752ae4f4cdb78a867f140ccd0680e04619d0c44bb4afb26373e54b829d934.en.png deleted file mode 100644 index 0b90bfbe1..000000000 Binary files a/translated_images/extension-settings.21c752ae4f4cdb78a867f140ccd0680e04619d0c44bb4afb26373e54b829d934.en.png and /dev/null differ diff --git a/translated_images/extensions.eca0e0c7f59a10b5c88be7fe24b3e32cca6b6058b35a49026c3a9d80b1813b7c.en.png b/translated_images/extensions.eca0e0c7f59a10b5c88be7fe24b3e32cca6b6058b35a49026c3a9d80b1813b7c.en.png deleted file mode 100644 index ecc6a080d..000000000 Binary files a/translated_images/extensions.eca0e0c7f59a10b5c88be7fe24b3e32cca6b6058b35a49026c3a9d80b1813b7c.en.png and /dev/null differ diff --git a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.en.png b/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.en.png deleted file mode 100644 index 26e0ae439..000000000 Binary files a/translated_images/favicon.37b561214b36d454f9fd1f725d77f310fe256eb88f2a0ae08b9cb18aeb30650c.en.png and /dev/null differ diff --git a/translated_images/form-post.61de4ca1b964d91a9e338416e19f218504dd0af5f762fbebabfe7ae80edf885f.en.png b/translated_images/form-post.61de4ca1b964d91a9e338416e19f218504dd0af5f762fbebabfe7ae80edf885f.en.png deleted file mode 100644 index 5ddd08a26..000000000 Binary files a/translated_images/form-post.61de4ca1b964d91a9e338416e19f218504dd0af5f762fbebabfe7ae80edf885f.en.png and /dev/null differ diff --git a/translated_images/history.7fdabbafa521e06455b738d3dafa3ff41d3071deae60ead8c7e0844b9ed987d8.en.png b/translated_images/history.7fdabbafa521e06455b738d3dafa3ff41d3071deae60ead8c7e0844b9ed987d8.en.png deleted file mode 100644 index b66a67183..000000000 Binary files a/translated_images/history.7fdabbafa521e06455b738d3dafa3ff41d3071deae60ead8c7e0844b9ed987d8.en.png and /dev/null differ diff --git a/translated_images/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.en.png b/translated_images/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.en.png deleted file mode 100644 index bcd6d49dd..000000000 Binary files a/translated_images/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.en.png and /dev/null differ diff --git a/translated_images/install-on-edge.d68781acaf0b3d3dada8b7507cde7a64bf74b7040d9818baaa9070668e819f90.en.png b/translated_images/install-on-edge.d68781acaf0b3d3dada8b7507cde7a64bf74b7040d9818baaa9070668e819f90.en.png deleted file mode 100644 index bcd6d49dd..000000000 Binary files a/translated_images/install-on-edge.d68781acaf0b3d3dada8b7507cde7a64bf74b7040d9818baaa9070668e819f90.en.png and /dev/null differ diff --git a/translated_images/laserGreen.89904f0f499455604f204b641dfe992cb6f688d5b1c82a2227d1674af84c0b20.en.png b/translated_images/laserGreen.89904f0f499455604f204b641dfe992cb6f688d5b1c82a2227d1674af84c0b20.en.png deleted file mode 100644 index cfd373b41..000000000 Binary files a/translated_images/laserGreen.89904f0f499455604f204b641dfe992cb6f688d5b1c82a2227d1674af84c0b20.en.png and /dev/null differ diff --git a/translated_images/laserGreenShot.e4fbfc4714c08a5b1a3e94429dde0e5ad4f010c25f0d0b6c321aea62014ed203.en.png b/translated_images/laserGreenShot.e4fbfc4714c08a5b1a3e94429dde0e5ad4f010c25f0d0b6c321aea62014ed203.en.png deleted file mode 100644 index 816fdf33c..000000000 Binary files a/translated_images/laserGreenShot.e4fbfc4714c08a5b1a3e94429dde0e5ad4f010c25f0d0b6c321aea62014ed203.en.png and /dev/null differ diff --git a/translated_images/laserRed.2040e11f55c0a40a9800af7a11247676b4969e6c87e697f29589f605a0192b05.en.png b/translated_images/laserRed.2040e11f55c0a40a9800af7a11247676b4969e6c87e697f29589f605a0192b05.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.2040e11f55c0a40a9800af7a11247676b4969e6c87e697f29589f605a0192b05.en.png and /dev/null differ diff --git a/translated_images/laserRed.381bc5555491ce677eedc34e728c7c4f5676ce6c74db68d8a4d82fde952cb8fb.en.png b/translated_images/laserRed.381bc5555491ce677eedc34e728c7c4f5676ce6c74db68d8a4d82fde952cb8fb.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.381bc5555491ce677eedc34e728c7c4f5676ce6c74db68d8a4d82fde952cb8fb.en.png and /dev/null differ diff --git a/translated_images/laserRed.69730edd76f0b3bd5a45ae075c3dd1a064017020ddff4b4c3f007c21d9a62ebc.en.png b/translated_images/laserRed.69730edd76f0b3bd5a45ae075c3dd1a064017020ddff4b4c3f007c21d9a62ebc.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.69730edd76f0b3bd5a45ae075c3dd1a064017020ddff4b4c3f007c21d9a62ebc.en.png and /dev/null differ diff --git a/translated_images/laserRed.b583dc1728eb8581da951a0ec74c42cf06cf6903e9b939c71baaf04ef1a60f90.en.png b/translated_images/laserRed.b583dc1728eb8581da951a0ec74c42cf06cf6903e9b939c71baaf04ef1a60f90.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.b583dc1728eb8581da951a0ec74c42cf06cf6903e9b939c71baaf04ef1a60f90.en.png and /dev/null differ diff --git a/translated_images/laserRed.cae9ab24ea9b18fd5fde4b22153f4d71291a363bd611de8108bc6a40cecefe24.en.png b/translated_images/laserRed.cae9ab24ea9b18fd5fde4b22153f4d71291a363bd611de8108bc6a40cecefe24.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.cae9ab24ea9b18fd5fde4b22153f4d71291a363bd611de8108bc6a40cecefe24.en.png and /dev/null differ diff --git a/translated_images/laserRed.d81ce4986f87c251d4fd93a2fcfb8215c90684ad71d59de7bb0c2561a8e76d56.en.png b/translated_images/laserRed.d81ce4986f87c251d4fd93a2fcfb8215c90684ad71d59de7bb0c2561a8e76d56.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.d81ce4986f87c251d4fd93a2fcfb8215c90684ad71d59de7bb0c2561a8e76d56.en.png and /dev/null differ diff --git a/translated_images/laserRed.e58ef8db2585dfbe451c9f46f4190d75f555479ddc24e2b75be28fe3a2894f24.en.png b/translated_images/laserRed.e58ef8db2585dfbe451c9f46f4190d75f555479ddc24e2b75be28fe3a2894f24.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.e58ef8db2585dfbe451c9f46f4190d75f555479ddc24e2b75be28fe3a2894f24.en.png and /dev/null differ diff --git a/translated_images/laserRed.e66e29ace6666064cf451ce990d73b779028e21542cded84ecad88577353aad1.en.png b/translated_images/laserRed.e66e29ace6666064cf451ce990d73b779028e21542cded84ecad88577353aad1.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.e66e29ace6666064cf451ce990d73b779028e21542cded84ecad88577353aad1.en.png and /dev/null differ diff --git a/translated_images/laserRed.e86e8fb629c6026e20cc7e8507f8a1f2fc82cc355117c721eb08ac67c40d3e6a.en.png b/translated_images/laserRed.e86e8fb629c6026e20cc7e8507f8a1f2fc82cc355117c721eb08ac67c40d3e6a.en.png deleted file mode 100644 index 9b6c5f9b8..000000000 Binary files a/translated_images/laserRed.e86e8fb629c6026e20cc7e8507f8a1f2fc82cc355117c721eb08ac67c40d3e6a.en.png and /dev/null differ diff --git a/translated_images/laserRedShot.c39d066745996a71e5ffb0eeec4eff60fede6dc7fb65bdf8ef8b64193fda04c9.en.png b/translated_images/laserRedShot.c39d066745996a71e5ffb0eeec4eff60fede6dc7fb65bdf8ef8b64193fda04c9.en.png deleted file mode 100644 index 28ecda5ba..000000000 Binary files a/translated_images/laserRedShot.c39d066745996a71e5ffb0eeec4eff60fede6dc7fb65bdf8ef8b64193fda04c9.en.png and /dev/null differ diff --git a/translated_images/life.27144b6d4bfdea76e9613184ff89c93d44888d2c9068a8599553a4306cd539ea.en.png b/translated_images/life.27144b6d4bfdea76e9613184ff89c93d44888d2c9068a8599553a4306cd539ea.en.png deleted file mode 100644 index 3487f796a..000000000 Binary files a/translated_images/life.27144b6d4bfdea76e9613184ff89c93d44888d2c9068a8599553a4306cd539ea.en.png and /dev/null differ diff --git a/translated_images/life.2a159298dd98f4efde6d8b2792eaff08d6944f39e57dbfa65b0b3d7f27addf7e.en.png b/translated_images/life.2a159298dd98f4efde6d8b2792eaff08d6944f39e57dbfa65b0b3d7f27addf7e.en.png deleted file mode 100644 index 3487f796a..000000000 Binary files a/translated_images/life.2a159298dd98f4efde6d8b2792eaff08d6944f39e57dbfa65b0b3d7f27addf7e.en.png and /dev/null differ diff --git a/translated_images/life.466df3b1692a244ad9189538ae5184e6bb43165d7c3172f66b5a60790a1541cc.en.png b/translated_images/life.466df3b1692a244ad9189538ae5184e6bb43165d7c3172f66b5a60790a1541cc.en.png deleted file mode 100644 index 3487f796a..000000000 Binary files a/translated_images/life.466df3b1692a244ad9189538ae5184e6bb43165d7c3172f66b5a60790a1541cc.en.png and /dev/null differ diff --git a/translated_images/life.65a2aaceca87528424e6e93a36e953b58d4facfefbfd42dc4d6ad2db43076018.en.png b/translated_images/life.65a2aaceca87528424e6e93a36e953b58d4facfefbfd42dc4d6ad2db43076018.en.png deleted file mode 100644 index 3487f796a..000000000 Binary files a/translated_images/life.65a2aaceca87528424e6e93a36e953b58d4facfefbfd42dc4d6ad2db43076018.en.png and /dev/null differ diff --git a/translated_images/life.6fb9f50d53ee0413cd91aa411f7c296e10a1a6de5c4a4197c718b49bf7d63ebf.en.png b/translated_images/life.6fb9f50d53ee0413cd91aa411f7c296e10a1a6de5c4a4197c718b49bf7d63ebf.en.png deleted file mode 100644 index 3487f796a..000000000 Binary files a/translated_images/life.6fb9f50d53ee0413cd91aa411f7c296e10a1a6de5c4a4197c718b49bf7d63ebf.en.png and /dev/null differ diff --git a/translated_images/life.78b6e96a3003767e113e7d6fbb5d57fc59245a92579256c08af23c93f2e2b0a3.en.png b/translated_images/life.78b6e96a3003767e113e7d6fbb5d57fc59245a92579256c08af23c93f2e2b0a3.en.png deleted file mode 100644 index 3487f796a..000000000 Binary files a/translated_images/life.78b6e96a3003767e113e7d6fbb5d57fc59245a92579256c08af23c93f2e2b0a3.en.png and /dev/null differ diff --git a/translated_images/life.86d843ce9c23289c0094eff7154a7b6d3cada290b7db733424ee1c68864143c5.en.png b/translated_images/life.86d843ce9c23289c0094eff7154a7b6d3cada290b7db733424ee1c68864143c5.en.png deleted file mode 100644 index 3487f796a..000000000 Binary files a/translated_images/life.86d843ce9c23289c0094eff7154a7b6d3cada290b7db733424ee1c68864143c5.en.png and /dev/null differ diff --git a/translated_images/localstorage.472f8147b6a3f8d141d9551c95a2da610ac9a3c6a73d4a1c224081c98bae09d9.en.png b/translated_images/localstorage.472f8147b6a3f8d141d9551c95a2da610ac9a3c6a73d4a1c224081c98bae09d9.en.png deleted file mode 100644 index 251fcfcee..000000000 Binary files a/translated_images/localstorage.472f8147b6a3f8d141d9551c95a2da610ac9a3c6a73d4a1c224081c98bae09d9.en.png and /dev/null differ diff --git a/translated_images/log.804026979f3707e00eebcfa028b2b5a88cec6292f858767bb6703afba65a7d9c.en.png b/translated_images/log.804026979f3707e00eebcfa028b2b5a88cec6292f858767bb6703afba65a7d9c.en.png deleted file mode 100644 index 10c7c0d0d..000000000 Binary files a/translated_images/log.804026979f3707e00eebcfa028b2b5a88cec6292f858767bb6703afba65a7d9c.en.png and /dev/null differ diff --git a/translated_images/login-error.416fe019b36a63276764c2349df5d99e04ebda54fefe60c715ee87a28d5d4ad0.en.png b/translated_images/login-error.416fe019b36a63276764c2349df5d99e04ebda54fefe60c715ee87a28d5d4ad0.en.png deleted file mode 100644 index 53147dc21..000000000 Binary files a/translated_images/login-error.416fe019b36a63276764c2349df5d99e04ebda54fefe60c715ee87a28d5d4ad0.en.png and /dev/null differ diff --git a/translated_images/meteorBig.1e452b3ad7af50adaafcbe25c82b2758be31cdff66d6b417b79f5453bf9ad3e0.en.png b/translated_images/meteorBig.1e452b3ad7af50adaafcbe25c82b2758be31cdff66d6b417b79f5453bf9ad3e0.en.png deleted file mode 100644 index b3cd54079..000000000 Binary files a/translated_images/meteorBig.1e452b3ad7af50adaafcbe25c82b2758be31cdff66d6b417b79f5453bf9ad3e0.en.png and /dev/null differ diff --git a/translated_images/meteorSmall.0d729bc71c12d41f26f077dfbecaccb9016e21e11dac7966e4f2de825e5de3b6.en.png b/translated_images/meteorSmall.0d729bc71c12d41f26f077dfbecaccb9016e21e11dac7966e4f2de825e5de3b6.en.png deleted file mode 100644 index a61e0e285..000000000 Binary files a/translated_images/meteorSmall.0d729bc71c12d41f26f077dfbecaccb9016e21e11dac7966e4f2de825e5de3b6.en.png and /dev/null differ diff --git a/translated_images/moodle.94eb93d714a50cb2c97435b408017dee224348b61bc86203ffd43a4f4e57b95f.en.png b/translated_images/moodle.94eb93d714a50cb2c97435b408017dee224348b61bc86203ffd43a4f4e57b95f.en.png deleted file mode 100644 index 65b0a4fd6..000000000 Binary files a/translated_images/moodle.94eb93d714a50cb2c97435b408017dee224348b61bc86203ffd43a4f4e57b95f.en.png and /dev/null differ diff --git a/translated_images/mpa.7f7375a1a2d4aa779d3f928a2aaaf9ad76bcdeb05cfce2dc27ab126024050f51.en.png b/translated_images/mpa.7f7375a1a2d4aa779d3f928a2aaaf9ad76bcdeb05cfce2dc27ab126024050f51.en.png deleted file mode 100644 index a1eff225e..000000000 Binary files a/translated_images/mpa.7f7375a1a2d4aa779d3f928a2aaaf9ad76bcdeb05cfce2dc27ab126024050f51.en.png and /dev/null differ diff --git a/translated_images/nebula.55c2933d36d035d359ef8d8422e7a7f260b3f6d15c026a18472bf8e71185d59c.en.png b/translated_images/nebula.55c2933d36d035d359ef8d8422e7a7f260b3f6d15c026a18472bf8e71185d59c.en.png deleted file mode 100644 index 755230882..000000000 Binary files a/translated_images/nebula.55c2933d36d035d359ef8d8422e7a7f260b3f6d15c026a18472bf8e71185d59c.en.png and /dev/null differ diff --git a/translated_images/new-file-github.com.c886796d800e8056561829a181be1382c5303da9d902d8b2dd82b68a4806e21f.en.png b/translated_images/new-file-github.com.c886796d800e8056561829a181be1382c5303da9d902d8b2dd82b68a4806e21f.en.png deleted file mode 100644 index 6032b4abf..000000000 Binary files a/translated_images/new-file-github.com.c886796d800e8056561829a181be1382c5303da9d902d8b2dd82b68a4806e21f.en.png and /dev/null differ diff --git a/translated_images/open-palette-menu.46dda01084738da84fc55100956fcc915f33e9de8c19813148ac3b1803871cff.en.png b/translated_images/open-palette-menu.46dda01084738da84fc55100956fcc915f33e9de8c19813148ac3b1803871cff.en.png deleted file mode 100644 index 4d8582431..000000000 Binary files a/translated_images/open-palette-menu.46dda01084738da84fc55100956fcc915f33e9de8c19813148ac3b1803871cff.en.png and /dev/null differ diff --git a/translated_images/open-remote-repository.bd9c2598b8949e7fc283cdfc8f4050c6205a7c7c6d3f78c4b135115d037d6fa2.en.png b/translated_images/open-remote-repository.bd9c2598b8949e7fc283cdfc8f4050c6205a7c7c6d3f78c4b135115d037d6fa2.en.png deleted file mode 100644 index 9dc30ee1c..000000000 Binary files a/translated_images/open-remote-repository.bd9c2598b8949e7fc283cdfc8f4050c6205a7c7c6d3f78c4b135115d037d6fa2.en.png and /dev/null differ diff --git a/translated_images/palette-menu.4946174e07f426226afcdad707d19b8d5150e41591c751c45b5dee213affef91.en.png b/translated_images/palette-menu.4946174e07f426226afcdad707d19b8d5150e41591c751c45b5dee213affef91.en.png deleted file mode 100644 index 1c1b335c9..000000000 Binary files a/translated_images/palette-menu.4946174e07f426226afcdad707d19b8d5150e41591c751c45b5dee213affef91.en.png and /dev/null differ diff --git a/translated_images/partI-solution.36c53b48c9ffae2a5e15496b23b604ba5393433e4bf91608a7a0a020eb7a2691.en.png b/translated_images/partI-solution.36c53b48c9ffae2a5e15496b23b604ba5393433e4bf91608a7a0a020eb7a2691.en.png deleted file mode 100644 index 88783500d..000000000 Binary files a/translated_images/partI-solution.36c53b48c9ffae2a5e15496b23b604ba5393433e4bf91608a7a0a020eb7a2691.en.png and /dev/null differ diff --git a/translated_images/plant1.a876180d8659acb9a51f95b2466b207b95dec201fafa23efcd4137fb62d0acb1.en.png b/translated_images/plant1.a876180d8659acb9a51f95b2466b207b95dec201fafa23efcd4137fb62d0acb1.en.png deleted file mode 100644 index 0632233d0..000000000 Binary files a/translated_images/plant1.a876180d8659acb9a51f95b2466b207b95dec201fafa23efcd4137fb62d0acb1.en.png and /dev/null differ diff --git a/translated_images/plant10.2f2c47804ae52dd3550b3f97782a76629d5819bba30e8a8b79933a9ccde606d4.en.png b/translated_images/plant10.2f2c47804ae52dd3550b3f97782a76629d5819bba30e8a8b79933a9ccde606d4.en.png deleted file mode 100644 index 209ee5d22..000000000 Binary files a/translated_images/plant10.2f2c47804ae52dd3550b3f97782a76629d5819bba30e8a8b79933a9ccde606d4.en.png and /dev/null differ diff --git a/translated_images/plant11.0ce0081b0ef17aa1793cc5fe6d7de6f8cf7f8cfb24933c3c457386194fc10e77.en.png b/translated_images/plant11.0ce0081b0ef17aa1793cc5fe6d7de6f8cf7f8cfb24933c3c457386194fc10e77.en.png deleted file mode 100644 index 201bec9e6..000000000 Binary files a/translated_images/plant11.0ce0081b0ef17aa1793cc5fe6d7de6f8cf7f8cfb24933c3c457386194fc10e77.en.png and /dev/null differ diff --git a/translated_images/plant12.6b934c4312a00228719509ac56cd568ec45672bfdcc732bac7f42391035d606c.en.png b/translated_images/plant12.6b934c4312a00228719509ac56cd568ec45672bfdcc732bac7f42391035d606c.en.png deleted file mode 100644 index 593e15732..000000000 Binary files a/translated_images/plant12.6b934c4312a00228719509ac56cd568ec45672bfdcc732bac7f42391035d606c.en.png and /dev/null differ diff --git a/translated_images/plant13.37d6ab2e2481421f0611f07685309cc07fe42d63e6abbaa963f972dbff7d176d.en.png b/translated_images/plant13.37d6ab2e2481421f0611f07685309cc07fe42d63e6abbaa963f972dbff7d176d.en.png deleted file mode 100644 index 0f69b814b..000000000 Binary files a/translated_images/plant13.37d6ab2e2481421f0611f07685309cc07fe42d63e6abbaa963f972dbff7d176d.en.png and /dev/null differ diff --git a/translated_images/plant14.908791477a46eb7f40a85155f53861fa5734be5075443b5c19f78e758f64d286.en.png b/translated_images/plant14.908791477a46eb7f40a85155f53861fa5734be5075443b5c19f78e758f64d286.en.png deleted file mode 100644 index 221277ef2..000000000 Binary files a/translated_images/plant14.908791477a46eb7f40a85155f53861fa5734be5075443b5c19f78e758f64d286.en.png and /dev/null differ diff --git a/translated_images/plant2.9e45efea224115b077fade85ce6871246bf85de20f419c57faed6b78e9ac7fcd.en.png b/translated_images/plant2.9e45efea224115b077fade85ce6871246bf85de20f419c57faed6b78e9ac7fcd.en.png deleted file mode 100644 index 331ca68d1..000000000 Binary files a/translated_images/plant2.9e45efea224115b077fade85ce6871246bf85de20f419c57faed6b78e9ac7fcd.en.png and /dev/null differ diff --git a/translated_images/plant3.06efdd0fa0c4b1152034312e11765b1a8fad48ebc00b72a3e7df657f66f45449.en.png b/translated_images/plant3.06efdd0fa0c4b1152034312e11765b1a8fad48ebc00b72a3e7df657f66f45449.en.png deleted file mode 100644 index d94bd097e..000000000 Binary files a/translated_images/plant3.06efdd0fa0c4b1152034312e11765b1a8fad48ebc00b72a3e7df657f66f45449.en.png and /dev/null differ diff --git a/translated_images/plant4.3b78072b427727c6e6eb08eefc8451b248577412dd025002cefb707238e8bf46.en.png b/translated_images/plant4.3b78072b427727c6e6eb08eefc8451b248577412dd025002cefb707238e8bf46.en.png deleted file mode 100644 index c60f756c7..000000000 Binary files a/translated_images/plant4.3b78072b427727c6e6eb08eefc8451b248577412dd025002cefb707238e8bf46.en.png and /dev/null differ diff --git a/translated_images/plant5.8ec58b18ac336fa8ec87ce1d5b433ee58c4918e67fdf0315d5407d80cbd97569.en.png b/translated_images/plant5.8ec58b18ac336fa8ec87ce1d5b433ee58c4918e67fdf0315d5407d80cbd97569.en.png deleted file mode 100644 index f2fe32fb9..000000000 Binary files a/translated_images/plant5.8ec58b18ac336fa8ec87ce1d5b433ee58c4918e67fdf0315d5407d80cbd97569.en.png and /dev/null differ diff --git a/translated_images/plant6.ca4ff8372e6676b1ffed650fba21cb2af52c70df969a8203e57fb5bedd81e9f0.en.png b/translated_images/plant6.ca4ff8372e6676b1ffed650fba21cb2af52c70df969a8203e57fb5bedd81e9f0.en.png deleted file mode 100644 index 82e0db0d9..000000000 Binary files a/translated_images/plant6.ca4ff8372e6676b1ffed650fba21cb2af52c70df969a8203e57fb5bedd81e9f0.en.png and /dev/null differ diff --git a/translated_images/plant7.194d5a42fcf5a88c5dd4960c68e6f78707acdb4e21bf533a6a65f8d002ab660b.en.png b/translated_images/plant7.194d5a42fcf5a88c5dd4960c68e6f78707acdb4e21bf533a6a65f8d002ab660b.en.png deleted file mode 100644 index 07cb7054d..000000000 Binary files a/translated_images/plant7.194d5a42fcf5a88c5dd4960c68e6f78707acdb4e21bf533a6a65f8d002ab660b.en.png and /dev/null differ diff --git a/translated_images/plant8.7b247809ab0eb492105cac4f42b79ac771ce56e401fdf3df170b3b6ef03c5642.en.png b/translated_images/plant8.7b247809ab0eb492105cac4f42b79ac771ce56e401fdf3df170b3b6ef03c5642.en.png deleted file mode 100644 index a0d261a90..000000000 Binary files a/translated_images/plant8.7b247809ab0eb492105cac4f42b79ac771ce56e401fdf3df170b3b6ef03c5642.en.png and /dev/null differ diff --git a/translated_images/plant9.8fe614c01ded1b1ec05d1b4d6d527047b1ece5edba299c1c516aaf4b05eb19ed.en.png b/translated_images/plant9.8fe614c01ded1b1ec05d1b4d6d527047b1ece5edba299c1c516aaf4b05eb19ed.en.png deleted file mode 100644 index bc09a0506..000000000 Binary files a/translated_images/plant9.8fe614c01ded1b1ec05d1b4d6d527047b1ece5edba299c1c516aaf4b05eb19ed.en.png and /dev/null differ diff --git a/translated_images/player.137ee0e47f895ffcdb50ba1b316936715ec8decfd6cee3258332a6c60e5d0d04.en.png b/translated_images/player.137ee0e47f895ffcdb50ba1b316936715ec8decfd6cee3258332a6c60e5d0d04.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.137ee0e47f895ffcdb50ba1b316936715ec8decfd6cee3258332a6c60e5d0d04.en.png and /dev/null differ diff --git a/translated_images/player.2887422f6982c3cd284b2bafd7551ff073a7b7b8a66edd2f0c2c722f94acfd5c.en.png b/translated_images/player.2887422f6982c3cd284b2bafd7551ff073a7b7b8a66edd2f0c2c722f94acfd5c.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.2887422f6982c3cd284b2bafd7551ff073a7b7b8a66edd2f0c2c722f94acfd5c.en.png and /dev/null differ diff --git a/translated_images/player.391fed427ede24f513d4b559cff8ff60f00818b31c81268b783a7f89054fda90.en.png b/translated_images/player.391fed427ede24f513d4b559cff8ff60f00818b31c81268b783a7f89054fda90.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.391fed427ede24f513d4b559cff8ff60f00818b31c81268b783a7f89054fda90.en.png and /dev/null differ diff --git a/translated_images/player.3c4f50182552a73a2b22542c75209c57231da2f51d88d571f198382e2fb3b45b.en.png b/translated_images/player.3c4f50182552a73a2b22542c75209c57231da2f51d88d571f198382e2fb3b45b.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.3c4f50182552a73a2b22542c75209c57231da2f51d88d571f198382e2fb3b45b.en.png and /dev/null differ diff --git a/translated_images/player.47bc9de0714c723dfe0705c328fb8769de71c87b99d340921c2247674d9d631a.en.png b/translated_images/player.47bc9de0714c723dfe0705c328fb8769de71c87b99d340921c2247674d9d631a.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.47bc9de0714c723dfe0705c328fb8769de71c87b99d340921c2247674d9d631a.en.png and /dev/null differ diff --git a/translated_images/player.57b3107c03012695cedb271fdda06900e2d0d9580ae5fab5c563fdb029ba8584.en.png b/translated_images/player.57b3107c03012695cedb271fdda06900e2d0d9580ae5fab5c563fdb029ba8584.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.57b3107c03012695cedb271fdda06900e2d0d9580ae5fab5c563fdb029ba8584.en.png and /dev/null differ diff --git a/translated_images/player.606f85953e5e564e7711d22697724750fdcc661d5f7c5295e2da7e46905fd322.en.png b/translated_images/player.606f85953e5e564e7711d22697724750fdcc661d5f7c5295e2da7e46905fd322.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.606f85953e5e564e7711d22697724750fdcc661d5f7c5295e2da7e46905fd322.en.png and /dev/null differ diff --git a/translated_images/player.680ea4c619b54fe160261abdfe2e68139dedacb8d884b6cb405b9a6ab162940d.en.png b/translated_images/player.680ea4c619b54fe160261abdfe2e68139dedacb8d884b6cb405b9a6ab162940d.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.680ea4c619b54fe160261abdfe2e68139dedacb8d884b6cb405b9a6ab162940d.en.png and /dev/null differ diff --git a/translated_images/player.bfe14f110bddf56d10a1989066d170af2ce6b1412626c37a7e184963e54c7ef4.en.png b/translated_images/player.bfe14f110bddf56d10a1989066d170af2ce6b1412626c37a7e184963e54c7ef4.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.bfe14f110bddf56d10a1989066d170af2ce6b1412626c37a7e184963e54c7ef4.en.png and /dev/null differ diff --git a/translated_images/player.c99c25d54a615ca088fc55515a6ee76c766fba0e31b167816062f3ab3d22fbcd.en.png b/translated_images/player.c99c25d54a615ca088fc55515a6ee76c766fba0e31b167816062f3ab3d22fbcd.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.c99c25d54a615ca088fc55515a6ee76c766fba0e31b167816062f3ab3d22fbcd.en.png and /dev/null differ diff --git a/translated_images/player.dd24c1afa8c71e9b82b2958946d4bad13308681392d4b5ddcc61a0e818ef8088.en.png b/translated_images/player.dd24c1afa8c71e9b82b2958946d4bad13308681392d4b5ddcc61a0e818ef8088.en.png deleted file mode 100644 index 13fc0247c..000000000 Binary files a/translated_images/player.dd24c1afa8c71e9b82b2958946d4bad13308681392d4b5ddcc61a0e818ef8088.en.png and /dev/null differ diff --git a/translated_images/playerDamaged.181703f652fd5176d25dbc286cdab2b79c9d7470dfd95af344dbb024780b6176.en.png b/translated_images/playerDamaged.181703f652fd5176d25dbc286cdab2b79c9d7470dfd95af344dbb024780b6176.en.png deleted file mode 100644 index 91d73b263..000000000 Binary files a/translated_images/playerDamaged.181703f652fd5176d25dbc286cdab2b79c9d7470dfd95af344dbb024780b6176.en.png and /dev/null differ diff --git a/translated_images/playerLeft.0f928412e66ba5d9455ccc99ef113088d2510843b23f8dbcd3106425b221979f.en.png b/translated_images/playerLeft.0f928412e66ba5d9455ccc99ef113088d2510843b23f8dbcd3106425b221979f.en.png deleted file mode 100644 index 941cd3ace..000000000 Binary files a/translated_images/playerLeft.0f928412e66ba5d9455ccc99ef113088d2510843b23f8dbcd3106425b221979f.en.png and /dev/null differ diff --git a/translated_images/playerRight.e4825f489e29f73719f8e3197ba0e5742e2ffbc178641009b57fe254c6abdc38.en.png b/translated_images/playerRight.e4825f489e29f73719f8e3197ba0e5742e2ffbc178641009b57fe254c6abdc38.en.png deleted file mode 100644 index 4e69314c4..000000000 Binary files a/translated_images/playerRight.e4825f489e29f73719f8e3197ba0e5742e2ffbc178641009b57fe254c6abdc38.en.png and /dev/null differ diff --git a/translated_images/playground-choice.1d23ba7d407f47584c9f446c77f0bcf70cae794cc9c8d7849a3cca4a3693e6c4.en.png b/translated_images/playground-choice.1d23ba7d407f47584c9f446c77f0bcf70cae794cc9c8d7849a3cca4a3693e6c4.en.png deleted file mode 100644 index 0cfc445d7..000000000 Binary files a/translated_images/playground-choice.1d23ba7d407f47584c9f446c77f0bcf70cae794cc9c8d7849a3cca4a3693e6c4.en.png and /dev/null differ diff --git a/translated_images/playground.d2b927122224ff8ff4028fc842176e353c339147d8925455f36c92fb1655c477.en.png b/translated_images/playground.d2b927122224ff8ff4028fc842176e353c339147d8925455f36c92fb1655c477.en.png deleted file mode 100644 index 0ae823503..000000000 Binary files a/translated_images/playground.d2b927122224ff8ff4028fc842176e353c339147d8925455f36c92fb1655c477.en.png and /dev/null differ diff --git a/translated_images/preview.9215f0a010074476f8ab66e6becf3c1b594a30cca0a28b88fb4f3f4821594dc0.en.jpg b/translated_images/preview.9215f0a010074476f8ab66e6becf3c1b594a30cca0a28b88fb4f3f4821594dc0.en.jpg deleted file mode 100644 index b776392d7..000000000 Binary files a/translated_images/preview.9215f0a010074476f8ab66e6becf3c1b594a30cca0a28b88fb4f3f4821594dc0.en.jpg and /dev/null differ diff --git a/translated_images/profiler.5a4a62479c5df01cfec9aab74173dba13f91d2c968e1a1ae434c26165792df15.en.png b/translated_images/profiler.5a4a62479c5df01cfec9aab74173dba13f91d2c968e1a1ae434c26165792df15.en.png deleted file mode 100644 index c1c079cfb..000000000 Binary files a/translated_images/profiler.5a4a62479c5df01cfec9aab74173dba13f91d2c968e1a1ae434c26165792df15.en.png and /dev/null differ diff --git a/translated_images/project-on-vscode.dev.e79815a9a95ee7feac72ebe5c941c91279716be37c575dbdbf2f43bea2c7d8b6.en.png b/translated_images/project-on-vscode.dev.e79815a9a95ee7feac72ebe5c941c91279716be37c575dbdbf2f43bea2c7d8b6.en.png deleted file mode 100644 index 98f02933a..000000000 Binary files a/translated_images/project-on-vscode.dev.e79815a9a95ee7feac72ebe5c941c91279716be37c575dbdbf2f43bea2c7d8b6.en.png and /dev/null differ diff --git a/translated_images/result.96ef01f607bf856aa9789078633e94a4f7664d912f235efce2657299becca483.en.png b/translated_images/result.96ef01f607bf856aa9789078633e94a4f7664d912f235efce2657299becca483.en.png deleted file mode 100644 index 755bf0f58..000000000 Binary files a/translated_images/result.96ef01f607bf856aa9789078633e94a4f7664d912f235efce2657299becca483.en.png and /dev/null differ diff --git a/translated_images/screen1.baccbba0f1f93364672eb250d2fbd21574bb1caf79a2155022dc098a741cbdfe.en.png b/translated_images/screen1.baccbba0f1f93364672eb250d2fbd21574bb1caf79a2155022dc098a741cbdfe.en.png deleted file mode 100644 index 9f669d468..000000000 Binary files a/translated_images/screen1.baccbba0f1f93364672eb250d2fbd21574bb1caf79a2155022dc098a741cbdfe.en.png and /dev/null differ diff --git a/translated_images/screen2.123c82a831a1d14ab2061994be2fa5de9cec1ce651047217d326d4773a6348e4.en.png b/translated_images/screen2.123c82a831a1d14ab2061994be2fa5de9cec1ce651047217d326d4773a6348e4.en.png deleted file mode 100644 index 91c965e9b..000000000 Binary files a/translated_images/screen2.123c82a831a1d14ab2061994be2fa5de9cec1ce651047217d326d4773a6348e4.en.png and /dev/null differ diff --git a/translated_images/screenshot.0a1ee0d123df681b4501eb53ffb267519fcc20aa653eabecef1e7561ddfb1cab.en.png b/translated_images/screenshot.0a1ee0d123df681b4501eb53ffb267519fcc20aa653eabecef1e7561ddfb1cab.en.png deleted file mode 100644 index 518fbb44f..000000000 Binary files a/translated_images/screenshot.0a1ee0d123df681b4501eb53ffb267519fcc20aa653eabecef1e7561ddfb1cab.en.png and /dev/null differ diff --git a/translated_images/screenshot.e7a5ad659e3645682a7d44bd944af8147012dc403b4965712a052214b42e77c1.en.png b/translated_images/screenshot.e7a5ad659e3645682a7d44bd944af8147012dc403b4965712a052214b42e77c1.en.png deleted file mode 100644 index e56466c7e..000000000 Binary files a/translated_images/screenshot.e7a5ad659e3645682a7d44bd944af8147012dc403b4965712a052214b42e77c1.en.png and /dev/null differ diff --git a/translated_images/screenshot_gray.0c796099a1f9f25e40aa55ead81f268434c00af30d7092490759945eda63067d.en.png b/translated_images/screenshot_gray.0c796099a1f9f25e40aa55ead81f268434c00af30d7092490759945eda63067d.en.png deleted file mode 100644 index c46266c6b..000000000 Binary files a/translated_images/screenshot_gray.0c796099a1f9f25e40aa55ead81f268434c00af30d7092490759945eda63067d.en.png and /dev/null differ diff --git a/translated_images/shield.1b9412b7ca6610ab21f8836483f4e1ec7835b7fe61617f2cead3ff3317ddd56f.en.png b/translated_images/shield.1b9412b7ca6610ab21f8836483f4e1ec7835b7fe61617f2cead3ff3317ddd56f.en.png deleted file mode 100644 index b962a2f13..000000000 Binary files a/translated_images/shield.1b9412b7ca6610ab21f8836483f4e1ec7835b7fe61617f2cead3ff3317ddd56f.en.png and /dev/null differ diff --git a/translated_images/snapshot.97750180ebcad73794a3594b36925eb5c8dbaac9e03fec7f9b974188c9ac63c7.en.png b/translated_images/snapshot.97750180ebcad73794a3594b36925eb5c8dbaac9e03fec7f9b974188c9ac63c7.en.png deleted file mode 100644 index 7101e10cd..000000000 Binary files a/translated_images/snapshot.97750180ebcad73794a3594b36925eb5c8dbaac9e03fec7f9b974188c9ac63c7.en.png and /dev/null differ diff --git a/translated_images/spa.268ec73b41f992c2a21ef9294235c6ae597b3c37e2c03f0494c2d8857325cc57.en.png b/translated_images/spa.268ec73b41f992c2a21ef9294235c6ae597b3c37e2c03f0494c2d8857325cc57.en.png deleted file mode 100644 index 80f8578e5..000000000 Binary files a/translated_images/spa.268ec73b41f992c2a21ef9294235c6ae597b3c37e2c03f0494c2d8857325cc57.en.png and /dev/null differ diff --git a/translated_images/speedLine.5bcabb93f48b5ae1fe081a6b8832ed314636560b7bb228889bfbeb75a0322490.en.png b/translated_images/speedLine.5bcabb93f48b5ae1fe081a6b8832ed314636560b7bb228889bfbeb75a0322490.en.png deleted file mode 100644 index 03018e7f2..000000000 Binary files a/translated_images/speedLine.5bcabb93f48b5ae1fe081a6b8832ed314636560b7bb228889bfbeb75a0322490.en.png and /dev/null differ diff --git a/translated_images/spritesheet.bec82852290b14ee8f814b4173f8d823658151a2402c2be8f15b17159290d1ab.en.png b/translated_images/spritesheet.bec82852290b14ee8f814b4173f8d823658151a2402c2be8f15b17159290d1ab.en.png deleted file mode 100644 index c7f6f709d..000000000 Binary files a/translated_images/spritesheet.bec82852290b14ee8f814b4173f8d823658151a2402c2be8f15b17159290d1ab.en.png and /dev/null differ diff --git a/translated_images/starBackground.a897b8acb1b0587dbb2cdbf8beeaa388269510bb3ac3b4165f0141dc893045a2.en.png b/translated_images/starBackground.a897b8acb1b0587dbb2cdbf8beeaa388269510bb3ac3b4165f0141dc893045a2.en.png deleted file mode 100644 index 7344ae888..000000000 Binary files a/translated_images/starBackground.a897b8acb1b0587dbb2cdbf8beeaa388269510bb3ac3b4165f0141dc893045a2.en.png and /dev/null differ diff --git a/translated_images/starBig.72e9c6d0d18f363d485fd26a32c346d269d465f6a87bc0ca5e94ecd34fcd7362.en.png b/translated_images/starBig.72e9c6d0d18f363d485fd26a32c346d269d465f6a87bc0ca5e94ecd34fcd7362.en.png deleted file mode 100644 index e38c77b7c..000000000 Binary files a/translated_images/starBig.72e9c6d0d18f363d485fd26a32c346d269d465f6a87bc0ca5e94ecd34fcd7362.en.png and /dev/null differ diff --git a/translated_images/starSmall.ed78b961dbcd0898e8b9b721cbaaa8d54a0a1165a52a13f19650064add273eec.en.png b/translated_images/starSmall.ed78b961dbcd0898e8b9b721cbaaa8d54a0a1165a52a13f19650064add273eec.en.png deleted file mode 100644 index 56bcfd58c..000000000 Binary files a/translated_images/starSmall.ed78b961dbcd0898e8b9b721cbaaa8d54a0a1165a52a13f19650064add273eec.en.png and /dev/null differ diff --git a/translated_images/template.67ad477109d29a2b04599a83c964c87fcde041256d4f04d3589cbb00c696f76c.en.png b/translated_images/template.67ad477109d29a2b04599a83c964c87fcde041256d4f04d3589cbb00c696f76c.en.png deleted file mode 100644 index 3b2a2c44b..000000000 Binary files a/translated_images/template.67ad477109d29a2b04599a83c964c87fcde041256d4f04d3589cbb00c696f76c.en.png and /dev/null differ diff --git a/translated_images/terrarium-final.0920f16e87c13a84cd2b553a5af9a3ad1cffbd41fbf8ce715d9e9c43809a5e2c.en.png b/translated_images/terrarium-final.0920f16e87c13a84cd2b553a5af9a3ad1cffbd41fbf8ce715d9e9c43809a5e2c.en.png deleted file mode 100644 index c46266c6b..000000000 Binary files a/translated_images/terrarium-final.0920f16e87c13a84cd2b553a5af9a3ad1cffbd41fbf8ce715d9e9c43809a5e2c.en.png and /dev/null differ diff --git a/translated_images/terrarium-final.2f07047ffc597d0a06b06cab28a77801a10dd12fdb6c7fc630e9c40665491c53.en.png b/translated_images/terrarium-final.2f07047ffc597d0a06b06cab28a77801a10dd12fdb6c7fc630e9c40665491c53.en.png deleted file mode 100644 index 50f5d0af5..000000000 Binary files a/translated_images/terrarium-final.2f07047ffc597d0a06b06cab28a77801a10dd12fdb6c7fc630e9c40665491c53.en.png and /dev/null differ diff --git a/translated_images/validation-error.8bd23e98d416c22f80076d04829a4bb718e0e550fd622862ef59008ccf0d5dce.en.png b/translated_images/validation-error.8bd23e98d416c22f80076d04829a4bb718e0e550fd622862ef59008ccf0d5dce.en.png deleted file mode 100644 index ca7fed243..000000000 Binary files a/translated_images/validation-error.8bd23e98d416c22f80076d04829a4bb718e0e550fd622862ef59008ccf0d5dce.en.png and /dev/null differ diff --git a/translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.en.png b/translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.en.png deleted file mode 100644 index 0b483b87e..000000000 Binary files a/translated_images/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.en.png and /dev/null differ diff --git a/translated_images/webdev101-a11y.8ef3025c858d897a403a1a42c0897c76e11b724d9a8a0c0578dd4316f7507622.en.png b/translated_images/webdev101-a11y.8ef3025c858d897a403a1a42c0897c76e11b724d9a8a0c0578dd4316f7507622.en.png deleted file mode 100644 index b2b0220d5..000000000 Binary files a/translated_images/webdev101-a11y.8ef3025c858d897a403a1a42c0897c76e11b724d9a8a0c0578dd4316f7507622.en.png and /dev/null differ diff --git a/translated_images/webdev101-css.3f7af5991bf53a200d79e7257e5e450408d8ea97f5b531d31b2e3976317338ee.en.png b/translated_images/webdev101-css.3f7af5991bf53a200d79e7257e5e450408d8ea97f5b531d31b2e3976317338ee.en.png deleted file mode 100644 index 098efdf50..000000000 Binary files a/translated_images/webdev101-css.3f7af5991bf53a200d79e7257e5e450408d8ea97f5b531d31b2e3976317338ee.en.png and /dev/null differ diff --git a/translated_images/webdev101-github.8846d7971abef6f947909b4f9d343e2a23778aa716ca6b9d71df7174ee5009ac.en.png b/translated_images/webdev101-github.8846d7971abef6f947909b4f9d343e2a23778aa716ca6b9d71df7174ee5009ac.en.png deleted file mode 100644 index 29388480a..000000000 Binary files a/translated_images/webdev101-github.8846d7971abef6f947909b4f9d343e2a23778aa716ca6b9d71df7174ee5009ac.en.png and /dev/null differ diff --git a/translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.en.png b/translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.en.png deleted file mode 100644 index f6cf31b49..000000000 Binary files a/translated_images/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.en.png and /dev/null differ diff --git a/translated_images/webdev101-js-arrays.439d7528b8a294558d0e4302e448d193f8ad7495cc407539cc81f1afe904b470.en.png b/translated_images/webdev101-js-arrays.439d7528b8a294558d0e4302e448d193f8ad7495cc407539cc81f1afe904b470.en.png deleted file mode 100644 index 37c841353..000000000 Binary files a/translated_images/webdev101-js-arrays.439d7528b8a294558d0e4302e448d193f8ad7495cc407539cc81f1afe904b470.en.png and /dev/null differ diff --git a/translated_images/webdev101-js-datatypes.4cc470179730702c756480d3ffa46507f746e5975ebf80f99fdaaf1cff09a7f4.en.png b/translated_images/webdev101-js-datatypes.4cc470179730702c756480d3ffa46507f746e5975ebf80f99fdaaf1cff09a7f4.en.png deleted file mode 100644 index a7c724e8a..000000000 Binary files a/translated_images/webdev101-js-datatypes.4cc470179730702c756480d3ffa46507f746e5975ebf80f99fdaaf1cff09a7f4.en.png and /dev/null differ diff --git a/translated_images/webdev101-js-decisions.69e1b20f272dd1f0b1cb2f8adaff3ed2a77c4f91db96d8a0594132a353fa189a.en.png b/translated_images/webdev101-js-decisions.69e1b20f272dd1f0b1cb2f8adaff3ed2a77c4f91db96d8a0594132a353fa189a.en.png deleted file mode 100644 index 7f6ffbf6e..000000000 Binary files a/translated_images/webdev101-js-decisions.69e1b20f272dd1f0b1cb2f8adaff3ed2a77c4f91db96d8a0594132a353fa189a.en.png and /dev/null differ diff --git a/translated_images/webdev101-js-functions.be049c4726e94f8b7605c36330ac42eeb5cd8ed02bcdd60fdac778174d6cb865.en.png b/translated_images/webdev101-js-functions.be049c4726e94f8b7605c36330ac42eeb5cd8ed02bcdd60fdac778174d6cb865.en.png deleted file mode 100644 index cfce51a5c..000000000 Binary files a/translated_images/webdev101-js-functions.be049c4726e94f8b7605c36330ac42eeb5cd8ed02bcdd60fdac778174d6cb865.en.png and /dev/null differ diff --git a/translated_images/webdev101-js.10280393044d7eaaec7e847574946add7ddae6be2b2194567d848b61d849334a.en.png b/translated_images/webdev101-js.10280393044d7eaaec7e847574946add7ddae6be2b2194567d848b61d849334a.en.png deleted file mode 100644 index 259f524b2..000000000 Binary files a/translated_images/webdev101-js.10280393044d7eaaec7e847574946add7ddae6be2b2194567d848b61d849334a.en.png and /dev/null differ diff --git a/translated_images/webdev101-programming.d6e3f98e61ac4bff0b27dcbf1c3f16c8ed46984866f2d29988929678b0058fde.en.png b/translated_images/webdev101-programming.d6e3f98e61ac4bff0b27dcbf1c3f16c8ed46984866f2d29988929678b0058fde.en.png deleted file mode 100644 index cb4b05596..000000000 Binary files a/translated_images/webdev101-programming.d6e3f98e61ac4bff0b27dcbf1c3f16c8ed46984866f2d29988929678b0058fde.en.png and /dev/null differ diff --git a/translated_images/working-tree-pb.6cd43e5076f23ba3d017f7662394bd87f975e194a068556905e4cc99da9cbfdc.en.png b/translated_images/working-tree-pb.6cd43e5076f23ba3d017f7662394bd87f975e194a068556905e4cc99da9cbfdc.en.png deleted file mode 100644 index e5bfe5642..000000000 Binary files a/translated_images/working-tree-pb.6cd43e5076f23ba3d017f7662394bd87f975e194a068556905e4cc99da9cbfdc.en.png and /dev/null differ diff --git a/translated_images/working-tree.c58eec08e6335c79cc708c0c220c0b7fea61514bd3c7fb7471905a864aceac7c.en.png b/translated_images/working-tree.c58eec08e6335c79cc708c0c220c0b7fea61514bd3c7fb7471905a864aceac7c.en.png deleted file mode 100644 index 129c89ced..000000000 Binary files a/translated_images/working-tree.c58eec08e6335c79cc708c0c220c0b7fea61514bd3c7fb7471905a864aceac7c.en.png and /dev/null differ diff --git a/translations/ar/.co-op-translator.json b/translations/ar/.co-op-translator.json index 45534e001..f5a44f35c 100644 --- a/translations/ar/.co-op-translator.json +++ b/translations/ar/.co-op-translator.json @@ -1,7 +1,7 @@ { "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { - "original_hash": "d45ddcc54eb9232a76d08328b09d792e", - "translation_date": "2025-11-03T12:28:46+00:00", + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T16:49:23+00:00", "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", "language_code": "ar" }, @@ -493,7 +493,7 @@ }, "AGENTS.md": { "original_hash": "a362efd06d64d4134a0cfe8515a86d34", - "translation_date": "2026-02-06T15:58:39+00:00", + "translation_date": "2026-03-06T16:52:52+00:00", "source_file": "AGENTS.md", "language_code": "ar" }, @@ -516,8 +516,8 @@ "language_code": "ar" }, "README.md": { - "original_hash": "6d6385fd098088cb2d690fb0a6cdaedc", - "translation_date": "2026-02-06T15:53:16+00:00", + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T16:45:52+00:00", "source_file": "README.md", "language_code": "ar" }, diff --git a/translations/ar/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/ar/1-getting-started-lessons/1-intro-to-programming-languages/README.md index b22f7c838..f1523c3bc 100644 --- a/translations/ar/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/ar/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,183 +1,181 @@ -# مقدمة إلى لغات البرمجة وأدوات المطورين الحديثة +# مقدمة في لغات البرمجة وأدوات المطور الحديثة -مرحبًا أيها المطور المستقبلي! 👋 هل يمكنني أن أخبرك بشيء يجعلني أشعر بالحماس كل يوم؟ أنت على وشك اكتشاف أن البرمجة ليست مجرد التعامل مع أجهزة الكمبيوتر – إنها امتلاك قوى خارقة حقيقية لتحويل أفكارك الأكثر جنونًا إلى واقع! +مرحبًا أيها المطور المستقبلي! 👋 هل يمكنني أن أخبرك بشيء لا يزال يصيبني بالقشعريرة كل يوم؟ أنت على وشك اكتشاف أن البرمجة ليست مجرد أجهزة كمبيوتر – إنها عن امتلاك قوى خارقة حقيقية لإحياء أفكارك الأكثر جنونًا! -تعرف ذلك الشعور عندما تستخدم تطبيقك المفضل وكل شيء يعمل بسلاسة؟ عندما تضغط على زر ويحدث شيء سحري يجعلك تقول "واو، كيف فعلوا ذلك؟" حسنًا، شخص مثلك تمامًا – ربما جالس في مقهىه المفضل في الساعة الثانية صباحًا مع كوبه الثالث من الإسبريسو – كتب الكود الذي صنع تلك السحرية. وهنا ما سيذهلك: بنهاية هذا الدرس، لن تفهم فقط كيف فعلوا ذلك، بل ستكون متحمسًا لتجربته بنفسك! +أتعرف ذلك اللحظة عندما تستخدم تطبيقك المفضل ويسير كل شيء على أكمل وجه؟ عندما تضغط زرًا يحدث شيء سحري تمامًا يجعلك تقول "رائع، كيف فعلوا ذلك؟" حسنًا، شخص ما مثلك تمامًا – ربما يجلس في مقهاه المفضل في الساعة 2 صباحًا مع الإسبريسو الثالث – كتب الشفرة التي خلقت تلك السحر. وهنا ما سيفجر عقلك: بحلول نهاية هذا الدرس، لن تفهم فقط كيف فعلوا ذلك، بل ستتشوق لتجربته بنفسك! -انظر، أنا أفهم تمامًا إذا كانت البرمجة تبدو مخيفة الآن. عندما بدأت لأول مرة، كنت أعتقد بصراحة أنك بحاجة إلى أن تكون عبقريًا في الرياضيات أو أن تكون قد بدأت البرمجة منذ أن كنت في الخامسة من عمرك. لكن ما غير وجهة نظري تمامًا هو أن البرمجة تشبه تمامًا تعلم التحدث بلغة جديدة. تبدأ بـ "مرحبًا" و"شكرًا"، ثم تتقدم إلى طلب القهوة، وقبل أن تدرك، تجد نفسك تخوض مناقشات فلسفية عميقة! إلا أن الأمر هنا يتعلق بالتحدث مع أجهزة الكمبيوتر، وبصراحة؟ إنها أكثر شركاء المحادثة صبرًا – لا تحكم على أخطائك أبدًا ودائمًا متحمسة لتجربة مرة أخرى! +انظر، أنا أتفهم تمامًا إذا كانت البرمجة تبدو مخيفة الآن. عندما بدأت، كنت أعتقد بصدق أنك بحاجة لأن تكون عبقريًا في الرياضيات أو أنك كنت تبرمج منذ أن كنت في الخامسة من عمرك. ولكن هنا ما غيّر وجهة نظري تمامًا: البرمجة هي تمامًا مثل تعلم المحادثة بلغة جديدة. تبدأ بـ"مرحبا" و"شكرًا"، ثم تتدرج إلى طلب القهوة، وقبل أن تعرف، تكون تجري نقاشات فلسفية عميقة! باستثناء أنك في هذه الحالة، تجري المحادثات مع الحواسيب، وبصراحة؟ إنهم أكثر شركاء المحادثة صبرًا على الإطلاق – لا يحكمون على أخطائك ودائمًا متحمسون لتجربة ثانية! -اليوم، سنستكشف الأدوات الرائعة التي تجعل تطوير الويب الحديث ليس فقط ممكنًا، بل ممتعًا للغاية. أنا أتحدث عن نفس المحررات والمتصفحات وطرق العمل التي يستخدمها المطورون في Netflix وSpotify واستوديوهات التطبيقات المستقلة المفضلة لديك كل يوم. وهنا الجزء الذي سيجعلك ترقص فرحًا: معظم هذه الأدوات الاحترافية والمعتمدة في الصناعة مجانية تمامًا! +اليوم، سنستكشف الأدوات المذهلة التي تجعل تطوير الويب الحديث ليس ممكنًا فحسب، بل مدمنًا حقيقيًا. أتحدث عن نفس المحررات والمتصفحات وسير العمل التي يستخدمها المطورون في نيتفليكس، سبوتيفاي، واستوديوهات التطبيقات المستقلة المفضلة لديك يوميًا. وهنا الجزء الذي سيجعلك ترقص فرحًا: معظم هذه الأدوات الاحترافية والمعتمدة على الصناعة هي مجانية تمامًا! ![مقدمة البرمجة](../../../../translated_images/ar/webdev101-programming.d6e3f98e61ac4bff.webp) -> رسم توضيحي بواسطة [Tomomi Imura](https://twitter.com/girlie_mac) +> مخطط مرسوم بواسطة [Tomomi Imura](https://twitter.com/girlie_mac) ```mermaid journey - title Your Programming Journey Today - section Discover - What is Programming: 5: You - Programming Languages: 4: You - Tools Overview: 5: You - section Explore - Code Editors: 4: You - Browsers & DevTools: 5: You - Command Line: 3: You - section Practice - Language Detective: 4: You - Tool Exploration: 5: You - Community Connection: 5: You + title رحلتك البرمجية اليوم + section اكتشف + ما هو البرمجة: 5: You + لغات البرمجة: 4: You + نظرة عامة على الأدوات: 5: You + section استكشف + محررات الكود: 4: You + المتصفحات وأدوات المطور: 5: You + سطر الأوامر: 3: You + section مارس + محقق اللغة: 4: You + استكشاف الأدوات: 5: You + التواصل المجتمعي: 5: You ``` +## لنرَ ما تعرفه بالفعل! -## دعنا نرى ما تعرفه بالفعل! +قبل أن نبدأ في الأشياء الممتعة، أنا فضولي – ما الذي تعرفه بالفعل عن عالم البرمجة هذا؟ واستمع، إذا كنت تنظر إلى هذه الأسئلة وتفكر "ليس لدي أدنى فكرة عن أي شيء من هذا"، فهذا ليس فقط مقبولًا، بل مثالي! هذا يعني أنك في المكان الصحيح تمامًا. فكر في هذا الاختبار كتمرين إحماء قبل التمرين – نحن فقط نقوم بتسخين عضلات الدماغ! -قبل أن نبدأ في الأمور الممتعة، أنا فضولي – ماذا تعرف بالفعل عن عالم البرمجة هذا؟ وإذا كنت تنظر إلى هذه الأسئلة وتفكر "ليس لدي أي فكرة عن أي من هذا"، فهذا ليس فقط مقبولًا، بل مثالي! هذا يعني أنك في المكان الصحيح تمامًا. فكر في هذا الاختبار كتمرين تمدد قبل التمرين – نحن فقط نقوم بتسخين عضلات الدماغ! +[خض اختبار ما قبل الدرس](https://ff-quizzes.netlify.app/web/) -[خذ اختبار ما قبل الدرس](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) ## المغامرة التي سنخوضها معًا -حسنًا، أنا متحمس جدًا لما سنستكشفه اليوم! بصراحة، أتمنى أن أرى وجهك عندما تفهم بعض هذه المفاهيم. إليك الرحلة الرائعة التي سنخوضها معًا: +حسنًا، أنا متحمس حقًا لما سنستكشفه اليوم! حقًا، أتمنى لو أستطيع رؤية وجهك عندما تتضح لك بعض هذه المفاهيم. إليك الرحلة الرائعة التي سنسيرها معًا: -- **ما هي البرمجة حقًا (ولماذا هي أروع شيء على الإطلاق!)** – سنكتشف كيف أن الكود هو السحر الخفي الذي يشغل كل شيء حولك، من المنبه الذي يعرف بطريقة ما أنه صباح يوم الاثنين إلى الخوارزمية التي تختار لك توصيات Netflix المثالية. -- **لغات البرمجة وشخصياتها المذهلة** – تخيل أنك تدخل حفلة حيث لكل شخص قوى خارقة مختلفة وطرق لحل المشكلات. هذا هو عالم لغات البرمجة، وستحب التعرف عليها! -- **الأسس التي تجعل السحر الرقمي يحدث** – فكر في هذه كأروع مجموعة LEGO إبداعية. بمجرد أن تفهم كيف تتناسب هذه القطع معًا، ستدرك أنه يمكنك بناء أي شيء تحلم به. -- **أدوات احترافية ستجعلك تشعر وكأنك حصلت على عصا سحرية** – أنا لا أبالغ هنا – هذه الأدوات ستجعلك تشعر حقًا وكأن لديك قوى خارقة، والجزء الأفضل؟ إنها نفس الأدوات التي يستخدمها المحترفون! +- **ما هي البرمجة فعليًا (ولماذا هي أروع شيء على الإطلاق!)** – سنكتشف كيف أن الشفرة هي السحر الخفي الذي يدير كل شيء حولك، من ذلك المنبه الذي بطريقة ما يعرف أن اليوم هو الإثنين صباحًا إلى الخوارزمية التي تنسق توصيات نيتفليكس الخاصة بك بشكل مثالي +- **لغات البرمجة وشخصياتها الرائعة** – تخيل دخولك حفلة حيث يمتلك كل شخص قوى خارقة مختلفة تمامًا وطرقًا مختلفة لحل المشكلات. هذا هو عالم لغات البرمجة، وستحب لقائها! +- **الكتل الأساسية التي تجعل السحر الرقمي يحدث** – فكر في هذه كما لو كانت مجموعة LEGO الإبداعية النهائية. بمجرد أن تفهم كيف تتلاءم هذه القطع معًا، ستدرك أنه يمكنك بناء أي شيء تحلم به خيالك +- **الأدوات الاحترافية التي ستجعلك تشعر وكأنك تم تسليمك عصا ساحر** – لست أبالغ هنا – هذه الأدوات ستجعلك تشعر حقًا أن لديك قوى خارقة، والجزء الأفضل؟ إنها نفس الأدوات التي يستخدمها المحترفون! -> 💡 **إليك الأمر**: لا تفكر حتى في محاولة حفظ كل شيء اليوم! الآن، أريدك فقط أن تشعر بتلك الشرارة من الحماس حول ما هو ممكن. التفاصيل ستبقى بشكل طبيعي عندما نتدرب معًا – هكذا يحدث التعلم الحقيقي! +> 💡 **إليك الأمر**: لا تفكر حتى في محاولة حفظ كل شيء اليوم! الآن، أريدك فقط أن تشعر بشرارة الحماس حول ما هو ممكن. التفاصيل ستثبت بشكل طبيعي أثناء ممارستنا معًا – هكذا يحدث التعلم الحقيقي! -> يمكنك أخذ هذا الدرس على [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! +> يمكنك أخذ هذا الدرس على [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! -## إذًا ما هي البرمجة بالضبط؟ +## فما هو *البرمجة* بالضبط؟ -حسنًا، دعونا نتناول السؤال الذي يساوي مليون دولار: ما هي البرمجة حقًا؟ +حسنًا، دعنا نتناول سؤال المليون دولار: ما هي البرمجة حقًا؟ -سأخبرك بقصة غيرت تمامًا طريقة تفكيري حول هذا الموضوع. الأسبوع الماضي، كنت أحاول شرح كيفية استخدام جهاز التحكم عن بعد الجديد للتلفزيون الذكي لوالدتي. وجدت نفسي أقول أشياء مثل "اضغط على الزر الأحمر، ولكن ليس الزر الأحمر الكبير، الزر الأحمر الصغير على اليسار... لا، يسارك الآخر... حسنًا، الآن اضغط عليه لمدة ثانيتين، ليس واحدة، وليس ثلاث..." يبدو مألوفًا؟ 😅 +سأعطيك قصة غيرت تمامًا كيف أفكر في هذا. الأسبوع الماضي، كنت أحاول أن أشرح لأمي كيف تستخدم جهاز التحكم التلفزيوني الذكي الجديد لدينا. وجدت نفسي أقول أشياء مثل "اضغطي على الزر الأحمر، لكن ليس الزر الأحمر الكبير، الزر الأحمر الصغير على اليسار... لا، الجانب الآخر على اليسار... حسنًا، الآن اضغطي لمدة ثانيتين، ليست واحدة، وليست ثلاث..." هل يبدو مألوفًا؟ 😅 -هذه هي البرمجة! إنها فن إعطاء تعليمات مفصلة للغاية، خطوة بخطوة، لشيء قوي جدًا ولكنه يحتاج إلى كل شيء مكتوب بشكل مثالي. إلا أنك بدلاً من شرح ذلك لوالدتك (التي يمكنها أن تسأل "أي زر أحمر؟!")، تشرحه لجهاز كمبيوتر (الذي يفعل بالضبط ما تقوله، حتى لو لم يكن ما قلته هو ما كنت تقصده). +هذه هي البرمجة! إنها فن إعطاء تعليمات مفصلة للغاية، خطوة بخطوة، لشيء قوي جدًا لكنه يحتاج إلى كل شيء موضح تمامًا. إلا أن بدلًا من أن تشرح لأمك (التي يمكنها أن تسأل "أي زر أحمر؟!"), أنت تشرح للكمبيوتر (الذي ينفذ بالضبط ما تقول، حتى لو لم يكن ما قلته هو بالضبط ما قصدته). -إليك ما أدهشني عندما تعلمت هذا لأول مرة: أجهزة الكمبيوتر في الواقع بسيطة جدًا في جوهرها. إنها تفهم حرفيًا شيئين فقط – 1 و0، وهو ما يعني ببساطة "نعم" و"لا" أو "تشغيل" و"إيقاف". هذا كل شيء! ولكن هنا يأتي السحر – لا يتعين علينا التحدث بلغة 1 و0 كما لو كنا في فيلم ماتريكس. هنا تأتي **لغات البرمجة** لإنقاذنا. إنها مثل وجود أفضل مترجم في العالم يأخذ أفكارك البشرية العادية ويحولها إلى لغة الكمبيوتر. +ما أذهلني عندما تعلمت هذا لأول مرة: الحواسيب في جوهرها بسيطة للغاية. هي تفهم فعليًا شيئين فقط – 1 و0، وهما في الأساس تعني "نعم" و"لا" أو "تشغيل" و"إيقاف". هذا كل شيء! لكنها تصبح سحرية هنا – لا نحتاج لأن نتحدث بالواحدات والأصفار كما لو كنا في المصفوفة. هنا تأتي **لغات البرمجة** لإنقاذنا. فهي مثل وجود أفضل مترجم في العالم يأخذ أفكارك البشرية العادية ويحوّلها إلى لغة الكمبيوتر. -وهنا ما يجعلني أشعر بالحماس كل صباح عندما أستيقظ: كل شيء رقمي في حياتك بدأ بشخص مثلك تمامًا، ربما جالسًا في بيجامته مع كوب قهوة، يكتب الكود على جهاز الكمبيوتر المحمول الخاص به. ذلك الفلتر في إنستغرام الذي يجعلك تبدو رائعًا؟ شخص ما برمجه. التوصية التي قادتك إلى أغنيتك المفضلة الجديدة؟ مطور بنى تلك الخوارزمية. التطبيق الذي يساعدك على تقسيم فاتورة العشاء مع أصدقائك؟ نعم، شخص ما فكر "هذا مزعج، أراهن أنني أستطيع إصلاح هذا" ثم... فعل ذلك! +وهذا ما لا يزال يصيبني بالقشعريرة كل صباح عندما أستيقظ: فعليًا *كل* شيء رقمي في حياتك بدأ بشخص مثلك تمامًا، ربما يجلس في بيجامته مع كوب قهوة، يكتب الشفرة على حاسوبه المحمول. ذلك الفلتر في إنستغرام الذي يجعلك تبدو بلا عيوب؟ شخص ما برمج ذلك. التوصية التي قادتك إلى أغنيتك المفضلة الجديدة؟ مطور صنع تلك الخوارزمية. التطبيق الذي يساعدك في تقسيم فاتورة العشاء مع الأصدقاء؟ نعم، شخص فكر "هذا مزعج، أظن أنني يمكنني إصلاحه" ثم… فعلها! -عندما تتعلم البرمجة، فأنت لا تكتسب مهارة جديدة فقط – بل تصبح جزءًا من مجتمع رائع من حلّال المشاكل الذين يقضون أيامهم في التفكير، "ماذا لو استطعت بناء شيء يجعل يوم شخص ما أفضل قليلاً؟" بصراحة، هل هناك شيء أكثر روعة من ذلك؟ +عندما تتعلم البرمجة، لا تكتسب مهارة جديدة فحسب – بل تصبح جزءًا من هذه الجماعة الرائعة من حلالي المشكلات الذين يقضون أيامهم يفكرون، "ماذا لو استطعت بناء شيء يجعل يوم شخص ما أفضل بقليل؟" بصراحة، هل هناك شيء أروع من ذلك؟ -✅ **معلومة ممتعة للبحث عنها**: إليك شيء رائع يمكنك البحث عنه عندما يكون لديك وقت فراغ – من تعتقد أنه كان أول مبرمج كمبيوتر في العالم؟ سأعطيك تلميحًا: قد لا يكون الشخص الذي تتوقعه! قصة هذا الشخص رائعة حقًا وتظهر أن البرمجة كانت دائمًا تدور حول حل المشكلات الإبداعي والتفكير خارج الصندوق. +✅ **مطاردة حقائق ممتعة**: إليك شيء رائع لتبحث عنه عندما يكون لديك بعض الوقت – من تعتقد أنه أول مبرمج حواسيب في العالم؟ سأعطيك تلميحًا: قد لا يكون من تتوقع! قصة هذا الشخص مثيرة للغاية وتظهر أن البرمجة كانت دائمًا عن حل المشكلات بإبداع والتفكير خارج الصندوق. -### 🧠 **وقت التحقق: كيف تشعر؟** +### 🧠 **وقت التقييم: كيف تشعر؟** **خذ لحظة للتفكير:** -- هل فكرة "إعطاء تعليمات لأجهزة الكمبيوتر" أصبحت واضحة لك الآن؟ -- هل يمكنك التفكير في مهمة يومية ترغب في أتمتتها باستخدام البرمجة؟ -- ما هي الأسئلة التي تدور في ذهنك حول هذا الشيء المسمى البرمجة؟ +- هل أصبحت فكرة "إعطاء تعليمات للحواسيب" واضحة الآن؟ +- هل يمكنك التفكير في مهمة يومية تود أتمتتها بالبرمجة؟ +- ما هي الأسئلة التي تخطر ببالك حول موضوع البرمجة هذا؟ -> **تذكر**: من الطبيعي تمامًا إذا كانت بعض المفاهيم لا تزال غامضة الآن. تعلم البرمجة يشبه تعلم لغة جديدة – يستغرق وقتًا حتى يبني عقلك تلك الروابط العصبية. أنت تقوم بعمل رائع! +> **تذكر**: من الطبيعي تمامًا أن تبدو بعض المفاهيم غير واضحة الآن. تعلم البرمجة يشبه تعلم لغة جديدة – يحتاج دماغك وقتًا لبناء تلك المسارات العصبية. أنت تقوم بعمل رائع! ## لغات البرمجة مثل نكهات مختلفة من السحر -حسنًا، هذا قد يبدو غريبًا، لكن ابق معي – لغات البرمجة تشبه كثيرًا أنواع الموسيقى المختلفة. فكر في الأمر: لديك الجاز، الذي يتميز بالسلاسة والارتجال، والروك الذي يتميز بالقوة والبساطة، والكلاسيكية التي تتميز بالأناقة والتنظيم، والهيب هوب الذي يتميز بالإبداع والتعبير. كل نوع له طابعه الخاص، ومجتمعه الخاص من المعجبين المتحمسين، وكل واحد مثالي لمزاج ومناسبة مختلفة. +حسنًا، هذا قد يبدو غريبًا، لكن تمسك معي – لغات البرمجة تشبه كثيرًا أنواع الموسيقى المختلفة. فكر في الأمر: لديك الجاز، الذي هو سلس ويعتمد على الارتجال، والروك الذي هو قوي ومباشر، والكلاسيكي الذي أنيق ومنظم، والهيب هوب الذي مبدع ومعبر. لكل نمط جوه الخاص، وجمهور من المعجبين المتحمسين، وكل واحد منها مثالي لأمزجة ومناسبات مختلفة. -لغات البرمجة تعمل بنفس الطريقة تمامًا! لن تستخدم نفس اللغة لبناء لعبة هاتف ممتعة كما تستخدم لتحليل كميات هائلة من بيانات المناخ، تمامًا كما لن تشغل موسيقى الميتال الصاخبة في صف يوغا (حسنًا، ربما ليس في معظم صفوف اليوغا! 😄). +لغات البرمجة تعمل بنفس الطريقة! لن تستخدم نفس اللغة لبناء لعبة موبايل ممتعة كما تستخدم لتحليل كميات هائلة من بيانات المناخ، تمامًا كما أنك لن تعزف ديث ميتال في فصل يوجا (حسنًا، في معظم صفوف اليوجا على الأقل! 😄). -لكن هنا ما يدهشني كل مرة أفكر فيه: هذه اللغات تشبه وجود مترجم رائع وصبور بجانبك. يمكنك التعبير عن أفكارك بطريقة طبيعية لعقلك البشري، وهم يتولون كل العمل المعقد لتحويل ذلك إلى لغة 1 و0 التي تتحدثها أجهزة الكمبيوتر. إنه مثل وجود صديق يتحدث بطلاقة "الإبداع البشري" و"منطق الكمبيوتر" – ولا يتعب أبدًا، ولا يحتاج إلى استراحة قهوة، ولا يحكم عليك إذا سألت نفس السؤال مرتين! +ولكن ما يفجر عقلي في كل مرة أفكر فيه: هذه اللغات هي مثل وجود أكثر مترجم عبقري وصبور في العالم جالس بجانبك. يمكنك التعبير عن أفكارك بطريقة طبيعية لدماغك البشري، وهم يتولون العمل المعقد للغاية لترجمتها إلى الواحدات والأصفار التي تتحدثها الحواسيب فعليًا. إنه كأن لديك صديقًا يجيد بطلاقة كل من "الإبداع البشري" و"منطق الكمبيوتر" – وهم لا يتعبون أبدًا، ولا يحتاجون إلى استراحات قهوة، ولا يحكمون عليك لأنك سألت نفس السؤال مرتين! ### لغات البرمجة الشهيرة واستخداماتها ```mermaid mindmap - root((Programming Languages)) - Web Development - JavaScript - Frontend Magic - Interactive Websites - TypeScript - JavaScript + Types - Enterprise Apps - Data & AI - Python - Data Science - Machine Learning - Automation - R - Statistics - Research - Mobile Apps - Java - Android - Enterprise - Swift + root((لغات البرمجة)) + تطوير الويب + جافا سكريبت + سحر الواجهة الأمامية + مواقع تفاعلية + تايب سكريبت + جافا سكريبت + أنواع + تطبيقات المؤسسات + البيانات والذكاء الاصطناعي + بايثون + علم البيانات + تعلم الآلة + الأتمتة + آر + الإحصائيات + البحث + تطبيقات الجوال + جافا + أندرويد + المؤسسات + سويفت iOS - Apple Ecosystem - Kotlin - Modern Android - Cross-platform - Systems & Performance - C++ - Games - Performance Critical - Rust - Memory Safety - System Programming - Go - Cloud Services - Scalable Backend + نظام آبل البيئي + كوتلن + أندرويد الحديثة + متعدد المنصات + الأنظمة والأداء + سي++ + الألعاب + أداء حرج + روست + أمان الذاكرة + برمجة النظام + جو + خدمات السحابة + خادم خلفي قابل للتوسع ``` - -| اللغة | الأفضل لـ | لماذا هي شائعة | -|-------|------------|----------------| -| **JavaScript** | تطوير الويب، واجهات المستخدم | تعمل في المتصفحات وتشغل المواقع التفاعلية | +| اللغة | الأفضل لـ | سبب شعبيتها | +|----------|----------|------------------| +| **JavaScript** | تطوير الويب، واجهات المستخدم | تعمل في المتصفحات وتدعم المواقع التفاعلية | | **Python** | علم البيانات، الأتمتة، الذكاء الاصطناعي | سهلة القراءة والتعلم، مكتبات قوية | -| **Java** | التطبيقات المؤسسية، تطبيقات أندرويد | مستقلة عن المنصة، قوية للأنظمة الكبيرة | +| **Java** | تطبيقات المؤسسات، تطبيقات أندرويد | مستقلة عن المنصة، قوية للأنظمة الكبيرة | | **C#** | تطبيقات ويندوز، تطوير الألعاب | دعم قوي من نظام مايكروسوفت | -| **Go** | خدمات السحابة، أنظمة الخلفية | سريعة، بسيطة، مصممة للحوسبة الحديثة | +| **Go** | خدمات السحابة، أنظمة الخادم الخلفي | سريعة، بسيطة، مصممة للحوسبة الحديثة | -### لغات عالية المستوى مقابل لغات منخفضة المستوى +### لغات المستوى العالي مقابل لغات المستوى المنخفض -حسنًا، هذا كان المفهوم الذي أربك عقلي عندما بدأت التعلم لأول مرة، لذا سأشاركك التشبيه الذي جعلني أفهمه أخيرًا – وأتمنى أن يساعدك أيضًا! +حسنًا، هذا كان صراحة المفهوم الذي كسر عقلي عندما بدأت التعلم، لذلك سأشاركك التشبيه الذي جعل الأمر يتضح لي – وآمل حقًا أن يساعدك أيضًا! -تخيل أنك تزور بلدًا لا تتحدث لغته، وتحتاج بشدة إلى العثور على أقرب حمام (كلنا مررنا بهذا، أليس كذلك؟ 😅): +تخيل أنك تزور دولة لا تتحدث لغتها، وتحتاج بشدة إلى إيجاد أقرب حمام (كلنا مررنا بذلك، أليس كذلك؟ 😅): -- **البرمجة منخفضة المستوى** تشبه تعلم اللهجة المحلية بشكل جيد جدًا بحيث يمكنك التحدث مع الجدة التي تبيع الفاكهة في الزاوية باستخدام إشارات ثقافية، وعبارات محلية، ونكات داخلية لا يفهمها إلا من نشأ هناك. مثير للإعجاب للغاية وفعال جدًا... إذا كنت تتحدث بطلاقة! ولكن قد يكون الأمر مربكًا جدًا عندما تحاول فقط العثور على حمام. +- **البرمجة منخفضة المستوى** مثل تعلم اللهجة المحلية جيدًا بحيث يمكنك الدردشة مع الجدة التي تبيع الفواكه على الزاوية باستخدام مراجع ثقافية، وتعابير محلية، ونكات داخلية لا يفهمها سوى من نشأ هناك. مثير للإعجاب وفعال جدًا... إذا كنت تجيدها! لكنها مربكة جدًا عندما تحاول فقط إيجاد حمام. -- **البرمجة عالية المستوى** تشبه وجود ذلك الصديق المحلي الرائع الذي يفهمك تمامًا. يمكنك أن تقول "أنا بحاجة ماسة للعثور على حمام" بلغة بسيطة، وهم يتولون كل الترجمة الثقافية ويعطونك الاتجاهات بطريقة منطقية لعقلك غير المحلي. +- **البرمجة عالية المستوى** مثل وجود صديق محلي رائع يفهمك تمامًا. يمكنك أن تقول "أحتاج بشدة إلى إيجاد حمام" بالإنجليزية البسيطة، وهو يتولى كل الترجمة الثقافية ويعطيك الاتجاهات بطريقة مفهومة لدماغك غير المحلي. بمصطلحات البرمجة: -- **اللغات منخفضة المستوى** (مثل Assembly أو C) تتيح لك إجراء محادثات مفصلة للغاية مع الأجهزة الفعلية للكمبيوتر، ولكن عليك التفكير مثل الآلة، وهو... حسنًا، دعنا نقول إنه تغيير عقلي كبير! -- **اللغات عالية المستوى** (مثل JavaScript، Python، أو C#) تتيح لك التفكير كإنسان بينما تتولى هي كل الحديث بلغة الآلة خلف الكواليس. بالإضافة إلى ذلك، لديها مجتمعات مرحبة مليئة بأشخاص يتذكرون كيف كان الأمر عندما كانوا مبتدئين ويريدون حقًا مساعدتك! +- **لغات المستوى المنخفض** (مثل Assembly أو C) تتيح لك محادثات مفصلة للغاية مع مكونات الكمبيوتر الحقيقية، لكنك تحتاج إلى التفكير كما تفكر الآلة، وهو... حسنًا، لنقل إنه تحول ذهني كبير جدًا! +- **لغات المستوى العالي** (مثل JavaScript، Python، أو C#) تتيح لك التفكير كبشر بينما تتولى هي كل لغة الآلة خلف الكواليس. بالإضافة إلى أنها تحوي مجتمعات ترحيبية مليئة بأشخاص يتذكرون كيف كان شعورهم عندما بدأوا ويريدون حقًا المساعدة! -تخيل أي منها سأقترح عليك أن تبدأ به؟ 😉 اللغات عالية المستوى تشبه وجود عجلات تدريب لا تريد أبدًا إزالتها لأنها تجعل التجربة بأكملها أكثر متعة! +خمن أيها سأقترح عليك أن تبدأ بها؟ 😉 لغات المستوى العالي مثل وجود عجلات تدريبية لن ترغب في إزالتها أبدًا لأنها تجعل التجربة كلها ممتعة جدًا! ```mermaid flowchart TB - A["👤 Human Thought:
'I want to calculate Fibonacci numbers'"] --> B{Choose Language Level} + A["👤 التفكير البشري:
'أريد حساب أرقام فيبوناتشي'"] --> B{اختر مستوى اللغة} - B -->|High-Level| C["🌟 JavaScript/Python
Easy to read and write"] - B -->|Low-Level| D["⚙️ Assembly/C
Direct hardware control"] + B -->|مستوى عالي| C["🌟 جافا سكريبت/بايثون
سهل القراءة والكتابة"] + B -->|مستوى منخفض| D["⚙️ التجميع/C
التحكم المباشر في العتاد"] - C --> E["📝 Write: fibonacci(10)"] - D --> F["📝 Write: mov r0,#00
sub r0,r0,#01"] + C --> E["📝 اكتب: fibonacci(10)"] + D --> F["📝 اكتب: mov r0,#00
sub r0,r0,#01"] - E --> G["🤖 Computer Understanding:
Translator handles complexity"] + E --> G["🤖 فهم الحاسوب:
المترجم يتولى التعقيد"] F --> G - G --> H["💻 Same Result:
0, 1, 1, 2, 3, 5, 8, 13..."] + G --> H["💻 نفس النتيجة:
0، 1، 1، 2، 3، 5، 8، 13..."] style C fill:#e1f5fe style D fill:#fff3e0 style H fill:#e8f5e8 ``` +### دعني أوضح لك لماذا لغات المستوى العالي أكثر ودية -### دعني أريك لماذا اللغات عالية المستوى أكثر ودية - -حسنًا، سأريك شيئًا يوضح تمامًا لماذا وقعت في حب اللغات عالية المستوى، ولكن أولاً – أحتاجك أن تعدني بشيء. عندما ترى المثال الأول للكود، لا تفزع! من المفترض أن يبدو مخيفًا. هذا هو النقطة التي أريد توضيحها! +حسنًا، سأريك شيئًا يمثل تمامًا لماذا أحببت لغات المستوى العالي، لكن أولًا – أحتاج منك وعدًا بشيء. عندما ترى المثال الأول للشفرة، لا تقلق! من المفترض أن يبدو مخيفًا. هذا هو بالضبط النقطة التي أريد توضيحها! -سننظر إلى نفس المهمة مكتوبة بأسلوبين مختلفين تمامًا. كلاهما ينشئ ما يسمى تسلسل فيبوناتشي – إنه نمط رياضي جميل حيث كل رقم هو مجموع الرقمين السابقين: 0، 1، 1، 2، 3، 5، 8، 13... (معلومة ممتعة: ستجد هذا النمط في كل مكان في الطبيعة – دوامات بذور عباد الشمس، أنماط مخروط الصنوبر، وحتى طريقة تشكل المجرات!) +سننظر إلى نفس المهمة مكتوبة بأسلوبين مختلفين تمامًا. كلاهما ينشئ ما يسمى تسلسل فيبوناتشي – وهو نمط رياضي جميل حيث كل رقم هو مجموع الرقمين السابقين: 0، 1، 1، 2، 3، 5، 8، 13... (معلومة ممتعة: ستجد هذا النمط حرفيًا في كل مكان في الطبيعة – دوامات بذور دوار الشمس، أنماط مخروط الصنوبر، وحتى طريقة تكوين المجرات!) -جاهز لرؤية الفرق؟ لنبدأ! +هل أنت مستعد لرؤية الفرق؟ لنبدأ! -**لغة عالية المستوى (JavaScript) – صديقة للإنسان:** +**لغة عالية المستوى (JavaScript) – مناسبة للبشر:** ```javascript -// Step 1: Basic Fibonacci setup +// الخطوة 1: إعداد الأساسي لفبوناتشي const fibonacciCount = 10; let current = 0; let next = 1; @@ -185,32 +183,32 @@ let next = 1; console.log('Fibonacci sequence:'); ``` -**ما يفعله هذا الكود:** -- **تعريف** ثابت لتحديد عدد أرقام فيبوناتشي التي نريد إنشائها -- **تهيئة** متغيرين لتتبع الرقم الحالي والرقم التالي في التسلسل -- **إعداد** القيم الأولية (0 و1) التي تحدد نمط فيبوناتشي -- **عرض** رسالة تعريفية لتحديد الناتج +**هذا ما تفعله هذه الشفرة:** +- **تعريف** ثابت يحدد عدد أعداد فيبوناتشي التي نريد توليدها +- **تهيئة** متغيرين لتتبع الرقم الحالي والتالي في التسلسل +- **ضبط** القيم الابتدائية (0 و1) التي تحدد نمط فيبوناتشي +- **عرض** رسالة عنوان لتحديد ناتجنا ```javascript -// Step 2: Generate the sequence with a loop +// الخطوة 2: توليد التسلسل باستخدام حلقة for (let i = 0; i < fibonacciCount; i++) { console.log(`Position ${i + 1}: ${current}`); - // Calculate next number in sequence + // حساب الرقم التالي في التسلسل const sum = current + next; current = next; next = sum; } ``` -**تفصيل ما يحدث هنا:** +**توضيح ما يحدث هنا:** - **التكرار** عبر كل موقع في التسلسل باستخدام حلقة `for` -- **عرض** كل رقم مع موقعه باستخدام تنسيق القالب النصي -- **حساب** الرقم التالي في تسلسل فيبوناتشي بإضافة القيم الحالية والتالية -- **تحديث** متغيرات التتبع للانتقال إلى التكرار التالي +- **عرض** كل رقم مع موقعه باستخدام تنسيق القوالب الحرفية +- **حساب** الرقم التالي في فيبوناتشي بجمع القيم الحالية والتالية +- **تحديث** متغيرات التتبع للانتقال للتكرار التالي ```javascript -// Step 3: Modern functional approach +// الخطوة ٣: النهج الوظيفي الحديث const generateFibonacci = (count) => { const sequence = [0, 1]; @@ -221,18 +219,18 @@ const generateFibonacci = (count) => { return sequence; }; -// Usage example +// مثال على الاستخدام const fibSequence = generateFibonacci(10); console.log(fibSequence); ``` -**في المثال أعلاه، قمنا بـ:** -- **إنشاء** وظيفة قابلة لإعادة الاستخدام باستخدام صياغة وظيفة السهم الحديثة -- **بناء** مصفوفة لتخزين التسلسل الكامل بدلاً من عرضه رقمًا برقم +**في الأعلى، قمنا بـ:** +- **إنشاء** دالة قابلة لإعادة الاستخدام باستخدام صياغة الدالة الحديثة بالسهم +- **بناء** مصفوفة لتخزين التسلسل الكامل بدلاً من العرض واحدًا تلو الآخر - **استخدام** فهرسة المصفوفة لحساب كل رقم جديد من القيم السابقة -- **إرجاع** التسلسل الكامل لاستخدامه بشكل مرن في أجزاء أخرى من البرنامج +- **إرجاع** التسلسل الكامل لاستخدام مرن في أجزاء أخرى من برنامجنا -**لغة منخفضة المستوى (ARM Assembly) – صديقة للكمبيوتر:** +**لغة منخفضة المستوى (ARM Assembly) – مناسبة للكمبيوتر:** ```assembly area ascen,code,readonly @@ -259,127 +257,127 @@ back add r0,r1 end ``` -لاحظ كيف أن نسخة JavaScript تُقرأ تقريبًا كتعليمات باللغة الإنجليزية، بينما تستخدم نسخة Assembly أوامر غامضة تتحكم مباشرة في معالج الكمبيوتر. كلاهما ينجز نفس المهمة، لكن اللغة عالية المستوى أسهل بكثير للفهم والكتابة والصيانة. +لاحظ كيف يبدو إصدار JavaScript كما لو كان تعليمات باللغة الإنجليزية تقريبًا، بينما يستخدم إصدار التجميع أوامر غامضة تتحكم مباشرة في معالج الكمبيوتر. كلاهما ينجز نفس المهمة بدقة، لكن لغة المستوى العالي أسهل بكثير على البشر لفهمها وكتابتها وصيانتها. **الاختلافات الرئيسية التي ستلاحظها:** -- **الوضوح**: JavaScript تستخدم أسماء وصفية مثل `fibonacciCount` بينما Assembly تستخدم تسميات غامضة مثل `r0`, `r1` -- **التعليقات**: اللغات عالية المستوى تشجع على كتابة تعليقات توضيحية تجعل الكود واضحًا وسهل الفهم. -- **الهيكل**: التدفق المنطقي للغة JavaScript يتماشى مع الطريقة التي يفكر بها البشر في حل المشكلات خطوة بخطوة. -- **الصيانة**: تحديث إصدار JavaScript لتلبية متطلبات مختلفة أمر بسيط وواضح. +- **سهولة القراءة**: يستخدم جافاسكريبت أسماء وصفية مثل `fibonacciCount` بينما يستخدم الأسمبلي تسميات مشفرة مثل `r0`، `r1` +- **التعليقات**: تشجع اللغات عالية المستوى على كتابة تعليقات تفسيرية تجعل الكود موثقًا ذاتيًا +- **الهيكلية**: يتطابق التدفق المنطقي لجافاسكريبت مع طريقة تفكير البشر في حل المشكلات خطوة بخطوة +- **الصيانة**: تحديث نسخة جافاسكريبت لمتطلبات مختلفة أمر بسيط وواضح -✅ **حول تسلسل فيبوناتشي**: هذا النمط الرقمي الرائع (حيث يساوي كل رقم مجموع الرقمين السابقين له: 0، 1، 1، 2، 3، 5، 8...) يظهر حرفيًا *في كل مكان* في الطبيعة! ستجده في دوامات عباد الشمس، أنماط أكواز الصنوبر، طريقة انحناء أصداف النوتيلوس، وحتى في كيفية نمو فروع الأشجار. إنه أمر مذهل كيف يمكن للرياضيات والبرمجة مساعدتنا في فهم وإعادة إنشاء الأنماط التي تستخدمها الطبيعة لخلق الجمال! +✅ **عن متتالية فيبوناتشي**: هذا النمط الرقمي الرائع تمامًا (حيث يساوي كل رقم مجموع الرقمين قبله: 0، 1، 1، 2، 3، 5، 8...) يظهر حرفيًا *في كل مكان* في الطبيعة! ستجده في دوامات عباد الشمس، ونمط الصنوبر، وطريقة تقوس صدفيات النوتيلوس، وحتى في كيفية نمو فروع الأشجار. إنه أمر مذهل حقًا كيف يمكن للرياضيات والكود مساعدتنا على فهم وإعادة إنشاء الأنماط التي تستخدمها الطبيعة لصنع الجمال! -## اللبنات الأساسية التي تصنع السحر +## اللبنات الأساسية التي تجعل السحر يحدث -حسنًا، الآن بعد أن رأيت كيف تبدو لغات البرمجة أثناء العمل، دعنا نحلل العناصر الأساسية التي تشكل كل برنامج تم كتابته على الإطلاق. فكر في هذه العناصر كالمكونات الأساسية لوصفتك المفضلة – بمجرد أن تفهم وظيفة كل منها، ستتمكن من قراءة وكتابة الكود في أي لغة تقريبًا! +حسنًا، الآن بعد أن رأيت كيف تبدو لغات البرمجة في العمل، دعنا نحلل القطع الأساسية التي تشكل حرفيًا كل برنامج تم كتابته على الإطلاق. فكر في هذه كمكونات أساسية في وصفتك المفضلة — بمجرد أن تفهم وظيفة كل واحدة منها، ستتمكن من قراءة وكتابة الكود في أي لغة تقريبًا! -هذا يشبه تعلم قواعد البرمجة. تذكر عندما كنت في المدرسة وتعلمت عن الأسماء والأفعال وكيفية تكوين الجمل؟ البرمجة لديها نسختها الخاصة من القواعد، وبصراحة، إنها أكثر منطقية وتسامحًا من قواعد اللغة الإنجليزية! 😄 +هذا يشبه إلى حد ما تعلم قواعد النحو للبرمجة. هل تتذكر في المدرسة عندما تعلمت عن الأسماء والأفعال وكيفية تركيب الجمل؟ للبرمجة نسختها الخاصة من القواعد، وبصراحة، هي أكثر منطقية وتسامحًا بكثير من قواعد اللغة الإنجليزية! 😄 -### العبارات: التعليمات خطوة بخطوة +### الجمل البرمجية: التعليمات خطوة بخطوة -لنبدأ بـ **العبارات** – هذه مثل الجمل الفردية في محادثة مع جهاز الكمبيوتر الخاص بك. كل عبارة تخبر الكمبيوتر بفعل شيء محدد، مثل إعطاء توجيهات: "انعطف يسارًا هنا"، "توقف عند الضوء الأحمر"، "اركن في تلك البقعة". +لنبدأ بـ **الجمل البرمجية** – هذه تشبه جمل منفردة في محادثة مع جهاز الكمبيوتر الخاص بك. كل جملة تخبر الكمبيوتر أن ينفذ شيئًا محددًا، كأن تعطيه إرشادات: "انعطف يسارًا هنا"، "قف عند الإشارة الحمراء"، "اركن في هذا المكان". -ما أحبه في العبارات هو مدى سهولة قراءتها عادةً. انظر إلى هذا المثال: +ما يعجبني في الجمل البرمجية هو مدى سهولة قراءتها عادةً. ألقِ نظرة على هذا: ```javascript -// Basic statements that perform single actions +// عبارات أساسية تنفذ إجراءات منفردة const userName = "Alex"; console.log("Hello, world!"); const sum = 5 + 3; ``` - -**ما يفعله هذا الكود:** -- **إعلان** متغير ثابت لتخزين اسم المستخدم -- **عرض** رسالة ترحيب في إخراج وحدة التحكم -- **حساب** وتخزين نتيجة عملية رياضية + +**إليك ما يفعله هذا الكود:** +- **إعلان** عن متغير ثابت لحفظ اسم المستخدم +- **عرض** رسالة ترحيب على مخرج الكونسول +- **حساب** وتخزين نتيجة عملية رياضية ```javascript -// Statements that interact with web pages +// بيانات تتفاعل مع صفحات الويب document.title = "My Awesome Website"; document.body.style.backgroundColor = "lightblue"; ``` + +**خطوة بخطوة، إليك ما يحدث:** +- **تعديل** عنوان صفحة الويب الذي يظهر على تبويب المتصفح +- **تغيير** لون خلفية جسم الصفحة بالكامل -**خطوة بخطوة، ما يحدث هنا:** -- **تعديل** عنوان صفحة الويب الذي يظهر في علامة تبويب المتصفح -- **تغيير** لون خلفية جسم الصفحة بالكامل - -### المتغيرات: نظام ذاكرة البرنامج الخاص بك +### المتغيرات: نظام ذاكرة برنامجك -حسنًا، **المتغيرات** هي واحدة من مفاهيمي المفضلة للتدريس لأنها تشبه الأشياء التي تستخدمها بالفعل كل يوم! +حسنًا، **المتغيرات** هي حقًا واحدة من مفاهيمي المفضلة جدًا للتدريس لأنها تشبه كثيرًا الأشياء التي تستخدمها يوميًا! -فكر في قائمة جهات الاتصال على هاتفك للحظة. أنت لا تحفظ أرقام الجميع – بدلاً من ذلك، تحفظ "أمي"، "أفضل صديق"، أو "مطعم البيتزا الذي يوصل حتى الساعة 2 صباحًا" وتترك هاتفك يتذكر الأرقام الفعلية. المتغيرات تعمل بنفس الطريقة تمامًا! إنها مثل حاويات مُعلمة حيث يمكن لبرنامجك تخزين المعلومات واسترجاعها لاحقًا باستخدام اسم منطقي. +فكر في قائمة جهات اتصال هاتفك للحظة. أنت لا تحفظ أرقام الجميع عن ظهر قلب – بل تحفظ "أمي"، "أفضل صديق"، أو "مطعم البيتزا الذي يوصل حتى الساعة 2 صباحًا" وتترك لهاتفك أن يتذكر الأرقام الحقيقية. المتغيرات تعمل بنفس الطريقة! إنها كحاويات معنونة حيث يمكن لبرنامجك أن يخزن المعلومات ويستدعيها لاحقًا باستخدام اسم مفهوم فعلاً. -ما هو رائع حقًا: يمكن أن تتغير المتغيرات أثناء تشغيل البرنامج (ومن هنا جاء اسم "متغير" – هل ترى ما فعلوه هنا؟). تمامًا كما قد تقوم بتحديث جهة اتصال مطعم البيتزا عندما تكتشف مكانًا أفضل، يمكن تحديث المتغيرات عندما يتعلم برنامجك معلومات جديدة أو تتغير الظروف! +وهنا الجزء الرائع: يمكن للمتغيرات أن تتغير أثناء تشغيل البرنامج (ومن هنا جاء اسم "متغير" – هل لاحظت؟). تمامًا كما قد تقوم بتحديث جهة اتصال مطعم البيتزا حين تكتشف مكانًا أفضل، يمكن تحديث المتغيرات مع تعلم برنامجك معلومات جديدة أو تغير الظروف! -دعني أريك كيف يمكن أن يكون هذا بسيطًا وجميلًا: +دعني أريك كيف يمكن أن يكون هذا بسيطًا وجميلاً: ```javascript -// Step 1: Creating basic variables +// الخطوة 1: إنشاء المتغيرات الأساسية const siteName = "Weather Dashboard"; let currentWeather = "sunny"; let temperature = 75; let isRaining = false; ``` - -**فهم هذه المفاهيم:** -- **تخزين** القيم الثابتة في متغيرات `const` (مثل اسم الموقع) -- **استخدام** `let` للقيم التي يمكن أن تتغير أثناء تشغيل البرنامج -- **تعيين** أنواع بيانات مختلفة: نصوص، أرقام، وقيم منطقية (صحيح/خطأ) -- **اختيار** أسماء وصفية تشرح ما يحتويه كل متغير + +**فهم هذه المفاهيم:** +- **تخزين** القيم الثابتة في متغيرات `const` (مثل اسم الموقع) +- **استخدام** `let` للقيم التي قد تتغير خلال البرنامج +- **تعيين** أنواع بيانات مختلفة: نصوص، أرقام، وقيم منطقية (صح/خطأ) +- **اختيار** أسماء وصفية تشرح محتوى كل متغير ```javascript -// Step 2: Working with objects to group related data +// الخطوة 2: العمل مع الكائنات لتجميع البيانات ذات الصلة const weatherData = { location: "San Francisco", humidity: 65, windSpeed: 12 }; ``` - -**في المثال أعلاه، قمنا بـ:** -- **إنشاء** كائن لتجميع معلومات الطقس ذات الصلة معًا -- **تنظيم** عدة أجزاء من البيانات تحت اسم متغير واحد -- **استخدام** أزواج المفتاح والقيمة لتسمية كل جزء من المعلومات بوضوح + +**في المثال أعلاه، لقد:** +- **أنشأنا** كائنًا لتجميع معلومات الطقس ذات الصلة معاً +- **نظمنا** عدة بيانات تحت اسم متغير واحد +- **استخدمنا** أزواج المفتاح والقيمة لتسمية كل جزء من المعلومات بوضوح ```javascript -// Step 3: Using and updating variables +// الخطوة 3: استخدام وتحديث المتغيرات console.log(`${siteName}: Today is ${currentWeather} and ${temperature}°F`); console.log(`Wind speed: ${weatherData.windSpeed} mph`); -// Updating changeable variables +// تحديث المتغيرات القابلة للتغيير currentWeather = "cloudy"; temperature = 68; ``` - -**دعنا نفهم كل جزء:** -- **عرض** المعلومات باستخدام القوالب النصية مع صيغة `${}` -- **الوصول** إلى خصائص الكائن باستخدام التدوين النقطي (`weatherData.windSpeed`) -- **تحديث** المتغيرات المعلنة باستخدام `let` لتعكس الظروف المتغيرة -- **دمج** عدة متغيرات لإنشاء رسائل ذات معنى + +**لنفهم كل جزء:** +- **عرض** المعلومات باستخدام القوالب النصية مع صيغة `${}` +- **الوصول** إلى خصائص الكائن باستخدام النقطة (`weatherData.windSpeed`) +- **تحديث** المتغيرات المعلنة بـ `let` لتعكس الظروف المتغيرة +- **دمج** عدة متغيرات لصياغة رسائل ذات معنى ```javascript -// Step 4: Modern destructuring for cleaner code +// الخطوة 4: التفكيك الحديث لكود أنظف const { location, humidity } = weatherData; console.log(`${location} humidity: ${humidity}%`); ``` + +**ما تحتاج إلى معرفته:** +- **استخراج** خصائص معينة من الكائنات باستخدام التفكيك +- **إنشاء** متغيرات جديدة تلقائيًا بأسماء مفاتيح الكائن +- **تبسيط** الكود بتجنب تكرار الصيغة النقطية -**ما تحتاج إلى معرفته:** -- **استخراج** خصائص محددة من الكائنات باستخدام التعيين التفكيكي -- **إنشاء** متغيرات جديدة تلقائيًا بنفس أسماء مفاتيح الكائن -- **تبسيط** الكود عن طريق تجنب التدوين النقطي المتكرر - -### تدفق التحكم: تعليم برنامجك التفكير +### تدفق التحكم: تعليم برنامجك على التفكير -حسنًا، هنا حيث تصبح البرمجة مذهلة للغاية! **تدفق التحكم** هو أساسًا تعليم برنامجك كيفية اتخاذ قرارات ذكية، تمامًا كما تفعل كل يوم دون حتى التفكير في الأمر. +حسنًا، هذا هو الجزء الذي تصبح فيه البرمجة مذهلة حقًا! **تدفق التحكم** هو ببساطة تعليم برنامجك كيفية اتخاذ قرارات ذكية، تمامًا كما تفعل أنت كل يوم دون أن تفكر. -تخيل هذا: هذا الصباح ربما مررت بشيء مثل "إذا كان الجو ممطرًا، سأحمل مظلة. إذا كان الجو باردًا، سأرتدي معطفًا. إذا كنت متأخرًا، سأترك الإفطار وأحصل على قهوة في الطريق." عقلك يتبع هذه المنطقية الشرطية عشرات المرات كل يوم! +تخيل هذا: هذا الصباح ربما قلت لنفسك "إذا كانت تمطر، سأحمل مظلة. إذا كان الجو باردًا، سأرتدي جاكيتًا. إذا كنت متأخرًا، فسأتخطى الإفطار وأشرب القهوة في الطريق." دماغك يتبع هذا المنطق "إذا-ثم" عشرات المرات يوميًا بشكل تلقائي! -هذا ما يجعل البرامج تبدو ذكية وحيوية بدلاً من مجرد اتباع نص ممل ومتوقع. يمكنها بالفعل النظر في الموقف، وتقييم ما يحدث، والاستجابة بشكل مناسب. إنه مثل إعطاء برنامجك عقلًا يمكنه التكيف واتخاذ الخيارات! +هذا ما يجعل البرامج تبدو ذكية وحية بدلًا من أن تتبع نصًا مملًا ومتوقعًا فقط. يمكنها فعلاً أن تنظر إلى الموقف، تقيم ما يحدث، وترد بشكل مناسب. إنه كأنك تمنح برنامجك عقلًا يمكنه التكيف واتخاذ القرارات! -هل تريد أن ترى كيف يعمل هذا بشكل جميل؟ دعني أريك: +هل تريد أن ترى كيف يعمل هذا بشكل رائع؟ دعني أريك: ```javascript -// Step 1: Basic conditional logic +// الخطوة 1: المنطق الشرطي الأساسي const userAge = 17; if (userAge >= 18) { @@ -389,15 +387,15 @@ if (userAge >= 18) { console.log(`You'll be able to vote in ${yearsToWait} year(s).`); } ``` - -**ما يفعله هذا الكود:** -- **التحقق** مما إذا كان عمر المستخدم يلبي متطلبات التصويت -- **تنفيذ** كتل كود مختلفة بناءً على نتيجة الشرط -- **حساب** وعرض المدة حتى أهلية التصويت إذا كان العمر أقل من 18 -- **تقديم** ملاحظات محددة ومفيدة لكل سيناريو + +**إليك ما يفعله هذا الكود:** +- **التحقق** مما إذا كان عمر المستخدم يفي بمتطلبات التصويت +- **تنفيذ** كتل كود مختلفة بناءً على نتيجة الشرط +- **حساب** وعرض المدة المتبقية حتى يحق للمستخدم التصويت إذا كان دون 18 عامًا +- **تقديم** ملاحظات محددة ومفيدة لكل سيناريو ```javascript -// Step 2: Multiple conditions with logical operators +// الخطوة 2: شروط متعددة مع عوامل منطقية const userAge = 17; const hasPermission = true; @@ -409,26 +407,26 @@ if (userAge >= 18 && hasPermission) { console.log("Sorry, you must be at least 16 years old."); } ``` - -**تفصيل ما يحدث هنا:** -- **دمج** شروط متعددة باستخدام المشغل `&&` (و) -- **إنشاء** تسلسل هرمي للشروط باستخدام `else if` لعدة سيناريوهات -- **التعامل** مع جميع الحالات الممكنة باستخدام عبارة `else` النهائية -- **تقديم** ملاحظات واضحة وقابلة للتنفيذ لكل حالة مختلفة + +**تفصيل ما يحدث هنا:** +- **دمج** عدة حالات شرطية باستخدام العامل `&&` (و) +- **إنشاء** تسلسل هرمي من الشروط باستخدام `else if` لسيناريوهات متعددة +- **معالجة** جميع الحالات الممكنة بعبارة `else` النهائية +- **تقديم** ملاحظات واضحة وقابلة للتنفيذ لكل حالة مختلفة ```javascript -// Step 3: Concise conditional with ternary operator +// الخطوة 3: شرط موجز باستخدام عامل ثلاثي const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; console.log(`Status: ${votingStatus}`); ``` - -**ما يجب أن تتذكره:** -- **استخدام** المشغل الثلاثي (`? :`) للشروط ذات الخيارين البسيطين -- **كتابة** الشرط أولاً، متبوعًا بـ `?`، ثم النتيجة الصحيحة، ثم `:`، ثم النتيجة الخاطئة -- **تطبيق** هذا النمط عندما تحتاج إلى تعيين قيم بناءً على الشروط + +**ما يجب أن تتذكره:** +- **استخدام** معامل الثلاثي (`? :`) لحالات شرطية بسيطة ذات خيارين +- **كتابة** الشرط أولًا، تليه `?`، ثم نتيجة صحيحة، ثم `:`، ثم نتيجة خاطئة +- **تطبيق** هذا النمط عندما تحتاج إلى تعيين قيم بناءً على شروط ```javascript -// Step 4: Handling multiple specific cases +// الخطوة 4: التعامل مع حالات محددة متعددة const dayOfWeek = "Tuesday"; switch (dayOfWeek) { @@ -447,58 +445,57 @@ switch (dayOfWeek) { console.log("Invalid day of the week"); } ``` + +**ينجز هذا الكود التالي:** +- **مقارنة** قيمة المتغير مع عدة حالات محددة +- **تجميع** الحالات المتشابهة معًا (أيام الأسبوع مقابل عطلات نهاية الأسبوع) +- **تنفيذ** كتلة الكود المناسبة عند العثور على تطابق +- **تضمين** حالة `default` لمعالجة القيم غير المتوقعة +- **استخدام** عبارات `break` لمنع استمرار تنفيذ الكود إلى الحالة التالية -**هذا الكود يحقق ما يلي:** -- **مطابقة** قيمة المتغير مع عدة حالات محددة -- **تجميع** الحالات المتشابهة معًا (أيام الأسبوع مقابل عطلات نهاية الأسبوع) -- **تنفيذ** كتلة الكود المناسبة عند العثور على تطابق -- **تضمين** حالة `default` للتعامل مع القيم غير المتوقعة -- **استخدام** عبارات `break` لمنع الكود من الاستمرار إلى الحالة التالية - -> 💡 **تشبيه واقعي**: فكر في تدفق التحكم كأنك تمتلك نظام GPS الأكثر صبرًا في العالم يقدم لك التوجيهات. قد يقول "إذا كان هناك ازدحام في شارع رئيسي، خذ الطريق السريع بدلاً من ذلك. إذا كان البناء يغلق الطريق السريع، جرب الطريق ذو المناظر الخلابة." البرامج تستخدم نفس النوع من المنطق الشرطي للاستجابة بذكاء لمواقف مختلفة وتقديم أفضل تجربة ممكنة للمستخدمين. +> 💡 **تشبيه من العالم الحقيقي**: فكر في تدفق التحكم كأن لديك جهاز GPS الصبور الأكثر في العالم يوجهك. قد يقول "إذا كان هناك ازدحام في شارع مين، خذ الطريق السريع بدلًا منه. إذا كان هناك إنشاءات تغلق الطريق السريع، جرب الطريق ذو المنظر الخلاب." تستخدم البرامج نفس نوع المنطق الشرطي للرد بذكاء على الحالات المختلفة ولتقديم أفضل تجربة للمستخدمين. -### 🎯 **اختبار المفاهيم: إتقان اللبنات الأساسية** +### 🎯 **فحص المفاهيم: إتقان اللبنات الأساسية** -**دعنا نرى كيف تسير الأمور مع الأساسيات:** -- هل يمكنك شرح الفرق بين المتغير والعبارة بكلماتك الخاصة؟ -- فكر في سيناريو واقعي حيث ستستخدم قرارًا إذا-ثم (مثل مثال التصويت لدينا) -- ما هو الشيء الذي فاجأك بشأن منطق البرمجة؟ +**لنرَ مدى تقدمك في الأساسيات:** +- هل يمكنك شرح الفرق بين المتغير والجملة البرمجية بكلماتك؟ +- فكر في سيناريو واقعي تستخدم فيه قرار إذا-ثم (مثل مثال التصويت) +- ما هو شيء واحد في منطق البرمجة فاجأك؟ -**تعزيز سريع للثقة:** +**تعزيز سريع للثقة:** ```mermaid flowchart LR - A["📝 Statements
(Instructions)"] --> B["📦 Variables
(Storage)"] --> C["🔀 Control Flow
(Decisions)"] --> D["🎉 Working Program!"] + A["📝 التعليمات
(الأوامر)"] --> B["📦 المتغيرات
(التخزين)"] --> C["🔀 سير التحكم
(القرارات)"] --> D["🎉 البرنامج العامل!"] style A fill:#ffeb3b style B fill:#4caf50 style C fill:#2196f3 style D fill:#ff4081 -``` - -✅ **ما القادم**: سنستمتع كثيرًا بالغوص أعمق في هذه المفاهيم بينما نواصل هذه الرحلة الرائعة معًا! الآن، ركز فقط على الشعور بالإثارة بشأن كل الإمكانيات المذهلة التي تنتظرك. المهارات والتقنيات المحددة ستترسخ بشكل طبيعي مع الممارسة – أعدك أن هذا سيكون أكثر متعة مما تتوقع! +``` +✅ **ما الذي سيأتي بعد ذلك**: سنستمتع كثيرًا بالتعمق أكثر في هذه المفاهيم بينما نواصل هذه الرحلة الرائعة معًا! الآن، ركز فقط على الشعور بالإثارة تجاه كل الإمكانيات المذهلة التي تنتظرك. المهارات والتقنيات المحددة ستترسخ تلقائيًا مع الممارسة – أعدك أن هذه ستكون أكثر متعة مما قد تتوقع! -## أدوات العمل +## أدوات المهنة -حسنًا، هذا هو الجزء الذي يجعلني متحمسًا لدرجة أنني بالكاد أستطيع التحكم في نفسي! 🚀 نحن على وشك الحديث عن الأدوات الرائعة التي ستجعلك تشعر وكأنك حصلت للتو على مفاتيح سفينة فضائية رقمية. +حسنًا، هذا هو المكان الذي أشعر فيه بحماس لا يُوصف! 🚀 نحن على وشك التحدث عن الأدوات الرائعة التي ستجعلك تشعر وكأنك حصلت للتو على مفاتيح سفينة فضاء رقمية. -تعرف كيف يمتلك الطاهي تلك السكاكين المتوازنة تمامًا التي تبدو وكأنها امتداد لأيديهم؟ أو كيف يمتلك الموسيقي تلك الجيتار التي تبدو وكأنها تغني بمجرد لمسها؟ حسنًا، المطورون لديهم نسختهم الخاصة من هذه الأدوات السحرية، وإليك ما سيذهلك تمامًا – معظمها مجاني تمامًا! +هل تعرف كيف يكون لدى الشيف سكاكين متوازنة تمامًا تشعر وكأنها امتداد ليديه؟ أو كيف يكون لدى الموسيقي غيتار يبدو كأنه يغني في اللحظة التي يلمسه فيها؟ حسنًا، لدى المطورين نسختهم الخاصة من هذه الأدوات السحرية، وهنا ما سيبهرك تمامًا – معظمها مجاني بالكامل! -أنا تقريبًا أقفز من الكرسي وأنا أفكر في مشاركة هذه الأدوات معك لأنها أحدثت ثورة كاملة في كيفية بناء البرمجيات. نحن نتحدث عن مساعدات برمجية مدعومة بالذكاء الاصطناعي يمكنها المساعدة في كتابة الكود الخاص بك (لست أمزح!)، بيئات سحابية حيث يمكنك بناء تطبيقات كاملة من أي مكان به اتصال واي فاي، وأدوات تصحيح الأخطاء متطورة لدرجة أنها تشبه امتلاك رؤية بالأشعة السينية لبرامجك. +أنا أتكلم وأتحرك على كرسيي بحماس وأنا أفكر في مشاركتها معك لأنها ثورت تمامًا طريقة بناء البرمجيات لدينا. نتحدث عن مساعدي برمجة مدعومين بالذكاء الاصطناعي يمكنهم مساعدتك في كتابة الكود (لست أمزح!)، وبيئات سحابية حيث يمكنك بناء تطبيقات كاملة من أي مكان يتوفر فيه واي فاي، وأدوات تصحيح أخطاء متطورة جدًا تشبه أن يكون لديك رؤية أشعة إكس لبرامجك. -وهنا الجزء الذي لا يزال يجعلني أشعر بالقشعريرة: هذه ليست "أدوات للمبتدئين" التي ستتجاوزها. هذه هي نفس الأدوات الاحترافية التي يستخدمها المطورون في Google وNetflix واستوديو التطبيقات المستقل الذي تحبه في هذه اللحظة بالذات. ستشعر وكأنك محترف تمامًا أثناء استخدامها! +وهنا الجزء الذي مازال يثير قشرتي: هذه ليست أدوات "للمبتدئين" ستتجاوزها بسرعة. هذه هي نفس الأدوات المهنية التي يستخدمها مطورو جوجل ونتفليكس واستوديوهات التطبيقات المستقلة التي تحبها في هذه اللحظة بالذات. ستشعر بأنك محترف حقيقي وأنت تستخدمها! ```mermaid graph TD - A["💡 Your Idea"] --> B["⌨️ Code Editor
(VS Code)"] - B --> C["🌐 Browser DevTools
(Testing & Debugging)"] - C --> D["⚡ Command Line
(Automation & Tools)"] - D --> E["📚 Documentation
(Learning & Reference)"] - E --> F["🚀 Amazing Web App!"] + A["💡 فكرتك"] --> B["⌨️ محرر الأكواد
(VS Code)"] + B --> C["🌐 أدوات تطوير المتصفح
(الاختبار وتصحيح الأخطاء)"] + C --> D["⚡ سطر الأوامر
(الأتمتة والأدوات)"] + D --> E["📚 الوثائق
(التعلم والمرجعية)"] + E --> F["🚀 تطبيق ويب مذهل!"] - B -.-> G["🤖 AI Assistant
(GitHub Copilot)"] - C -.-> H["📱 Device Testing
(Responsive Design)"] - D -.-> I["📦 Package Managers
(npm, yarn)"] - E -.-> J["👥 Community
(Stack Overflow)"] + B -.-> G["🤖 مساعد الذكاء الاصطناعي
(GitHub Copilot)"] + C -.-> H["📱 اختبار الجهاز
(تصميم متجاوب)"] + D -.-> I["📦 مدراء الحزم
(npm, yarn)"] + E -.-> J["👥 المجتمع
(Stack Overflow)"] style A fill:#fff59d style F fill:#c8e6c9 @@ -506,349 +503,352 @@ graph TD style H fill:#f3e5f5 style I fill:#ffccbc style J fill:#e8eaf6 -``` - -### محررات الكود وبيئات التطوير المتكاملة: أصدقاؤك الرقميون الجدد +``` +### محررات التعليمات البرمجية وبيئات التطوير المتكاملة: أصدقاؤك الرقميون الجدد -دعنا نتحدث عن محررات الكود – هذه ستصبح حقًا أماكنك المفضلة الجديدة! فكر فيها كملاذك الشخصي للبرمجة حيث ستقضي معظم وقتك في صياغة وإتقان إبداعاتك الرقمية. +دعنا نتحدث عن محررات الكود – هذه على وشك أن تصبح أماكنك المفضلة حديثًا للتواجد! فكر فيها كمكانك الشخصي للترميز حيث ستقضي معظم وقتك في صياغة وتحسين إبداعاتك الرقمية. -لكن إليك ما هو سحري تمامًا بشأن المحررات الحديثة: إنها ليست مجرد محررات نصوص فاخرة. إنها مثل وجود أفضل مرشد برمجة بجانبك على مدار الساعة طوال أيام الأسبوع. إنها تلتقط أخطائك الإملائية قبل أن تلاحظها، تقترح تحسينات تجعلك تبدو كعبقري، تساعدك على فهم ما يفعله كل جزء من الكود، وبعضها يمكنه حتى التنبؤ بما ستكتبه وتقديم اقتراحات لإكمال أفكارك! +لكن ما هو السحري حقًا في المحررات الحديثة: إنها ليست مجرد محررات نصوص عادية. إنها كأن لديك أذكى وأفضل مرشد للبرمجة جالس بجانبك 24/7. تكتشف أخطاء كتابتك قبل أن تلاحظها، تقترح تحسينات تجعلك تبدو عبقريًا، تساعدك على فهم وظيفة كل قطعة كود، وبإمكان بعضها حتى توقع ما تود كتابته وتقترح إنهاء أفكارك! -أتذكر عندما اكتشفت الإكمال التلقائي لأول مرة – شعرت حرفيًا وكأنني أعيش في المستقبل. تبدأ بكتابة شيء، ومحررك يقول، "مرحبًا، هل كنت تفكر في هذه الوظيفة التي تفعل بالضبط ما تحتاجه؟" إنه مثل وجود قارئ أفكار كرفيق برمجة! +أتذكر عندما اكتشفت الإكمال التلقائي لأول مرة – شعرت حرفيًا وكأني أعيش في المستقبل. تبدأ بكتابة شيء، فيقول محررك "مرحبًا، هل كنت تفكر في هذه الدالة التي تفعل بالضبط ما تحتاج؟" إنه كأن لديك قارئ أفكار كرفيق ترميز! -**ما الذي يجعل هذه المحررات مذهلة للغاية؟** +**ما الذي يجعل هذه المحررات مذهلة جدًا؟** -محررات الكود الحديثة تقدم مجموعة رائعة من الميزات المصممة لتعزيز إنتاجيتك: +تقدم محررات الكود الحديثة مجموعة مبهرة من الميزات المصممة لتعزيز إنتاجيتك: -| الميزة | ما تفعله | لماذا تساعد | -|---------|--------------|--------------| -| **تمييز الصياغة** | تلوين أجزاء مختلفة من الكود | يجعل الكود أسهل للقراءة واكتشاف الأخطاء | -| **الإكمال التلقائي** | اقتراح الكود أثناء الكتابة | يسرع البرمجة ويقلل الأخطاء | -| **أدوات التصحيح** | تساعدك على العثور على الأخطاء وإصلاحها | توفر ساعات من وقت استكشاف الأخطاء | -| **الإضافات** | إضافة ميزات متخصصة | تخصيص المحرر لأي تقنية | -| **مساعدات الذكاء الاصطناعي** | اقتراح الكود والتفسيرات | تسريع التعلم والإنتاجية | +| الميزة | الوظيفة | الفائدة | +|-------------------|------------------------------|------------------------------------| +| **تمييز الصياغة** | تلوين أجزاء مختلفة من الكود | يجعل الكود أسهل للقراءة واكتشاف الأخطاء | +| **الإكمال التلقائي** | يقترح الكود أثناء الكتابة | يسرّع البرمجة ويقلل الأخطاء الإملائية | +| **أدوات تصحيح الأخطاء** | تساعدك على العثور وإصلاح الأخطاء | توفر ساعات من وقت حل المشاكل | +| **الإضافات** | تضيف ميزات متخصصة | خصص محررك لأي تقنية تستخدمها | +| **مساعدي الذكاء الاصطناعي** | يقترحون الكود والشروح | يسرّعون التعلم والإنتاجية | -> 🎥 **مصدر فيديو**: هل تريد رؤية هذه الأدوات أثناء العمل؟ تحقق من هذا [فيديو أدوات العمل](https://youtube.com/watch?v=69WJeXGBdxg) للحصول على نظرة شاملة. +> 🎥 **مصدر فيديو**: هل تريد رؤية هذه الأدوات في العمل؟ شاهد هذا [فيديو أدوات المهنة](https://youtube.com/watch?v=69WJeXGBdxg) لمحة شاملة. #### المحررات الموصى بها لتطوير الويب -**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (مجاني) -- الأكثر شعبية بين مطوري الويب -- نظام إضافات ممتاز -- محطة مدمجة وتكامل Git -- **الإضافات التي يجب أن تمتلكها**: - - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - اقتراحات الكود المدعومة بالذكاء الاصطناعي - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - التعاون في الوقت الفعلي - - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - تنسيق الكود تلقائيًا - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - اكتشاف الأخطاء الإملائية في الكود +**[فيجوال ستوديو كود](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (مجاني) +- الأكثر شعبية بين مطوري الويب +- نظام إضافات ممتاز +- مدمج به الطرفية ودمج Git +- **إضافات لا بد منها**: + - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - اقتراحات كود مدعومة بالذكاء الاصطناعي + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - تعاون في الوقت الحقيقي + - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - تنسيق الكود تلقائيًا + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - اكتشاف الأخطاء الإملائية في الكود -**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (مدفوع، مجاني للطلاب) -- أدوات تصحيح واختبار متقدمة -- إكمال الكود الذكي -- التحكم في الإصدارات مدمج +**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (مدفوع، مجاني للطلاب) +- أدوات تصحيح واختبار متقدمة +- إكمال ذكي للكود +- تحكم مدمج في الإصدارات -**بيئات التطوير السحابية** (أسعار متنوعة) -- [GitHub Codespaces](https://github.com/features/codespaces) - كامل VS Code في متصفحك -- [Replit](https://replit.com/) - رائع للتعلم ومشاركة الكود -- [StackBlitz](https://stackblitz.com/) - تطوير ويب كامل وفوري +**بيئات تطوير سحابية** (بأسعار مختلفة) +- [GitHub Codespaces](https://github.com/features/codespaces) - VS Code كامل في المتصفح +- [Replit](https://replit.com/) - ممتاز للتعلم ومشاركة الكود +- [StackBlitz](https://stackblitz.com/) - تطوير ويب كامل وفوري -> 💡 **نصيحة للبدء**: ابدأ بـ Visual Studio Code – إنه مجاني، يستخدم على نطاق واسع في الصناعة، ولديه مجتمع ضخم يقدم دروسًا وإضافات مفيدة. +> 💡 **نصيحة للمبتدئين**: ابدأ مع فيجوال ستوديو كود – إنه مجاني، واسع الاستخدام في الصناعة، ولديه مجتمع ضخم ينشئ دروس وإضافات مفيدة. -### متصفحات الويب: مختبرك السري لتطوير البرمجيات +### متصفحات الويب: مختبرك السري للتطوير -حسنًا، استعد لتفاجأ تمامًا! هل تعلم كيف كنت تستخدم المتصفحات لتصفح وسائل التواصل الاجتماعي ومشاهدة الفيديوهات؟ حسنًا، اتضح أنها كانت تخفي مختبرًا سريًا للمطورين مذهلًا طوال الوقت، فقط في انتظار أن تكتشفه! +حسنًا، استعد لأن ينفجر عقلك تمامًا! هل تعلم كيف كنت تستخدم المتصفحات لتصفح وسائل التواصل الاجتماعي ومشاهدة الفيديوهات؟ حسنًا، اتضح أنها كانت تخفي هذا المختبر السري المذهل للمطورين طوال الوقت، في انتظارك لاكتشافه! -كل مرة تنقر بزر الفأرة الأيمن على صفحة ويب وتختار "Inspect Element"، فإنك تفتح عالمًا مخفيًا من أدوات المطورين التي هي بصراحة أكثر قوة من بعض البرامج المكلفة التي كنت أدفع مئات الدولارات للحصول عليها. إنه مثل اكتشاف أن مطبخك العادي كان يخفي مختبرًا للطهاة المحترفين خلف لوحة سرية! -أول مرة أظهر لي أحدهم أدوات المطور في المتصفح، قضيت حوالي ثلاث ساعات فقط أضغط هنا وهناك وأقول: "انتظر، هل يمكنها فعل ذلك أيضًا؟!" يمكنك حرفيًا تعديل أي موقع في الوقت الفعلي، رؤية مدى سرعة تحميل كل شيء، اختبار كيف يبدو موقعك على أجهزة مختلفة، وحتى تصحيح أخطاء JavaScript مثل محترف حقيقي. إنه أمر مذهل للغاية! +في كل مرة تنقر بزر الماوس الأيمن على صفحة ويب وتختار "فحص العنصر"، فإنك تفتح عالمًا خفيًا من أدوات المطورين التي هي في الحقيقة أكثر قوة من بعض البرامج المكلفة التي كنت أدفع مئات الدولارات ثمنها. يشبه اكتشاف أن مطبخك العادي كان يخفي مختبر طهاة محترفين خلف لوح سري! +المرة الأولى التي عرّفني فيها شخص على أدوات مطوري المتصفح (DevTools)، قضيت حوالي ثلاث ساعات فقط وأنا أنقر هنا وهناك وأقول "انتظر، هل يمكنه فعل ذلك أيضًا؟!" يمكنك حرفيًا تعديل أي موقع ويب في الوقت الحقيقي، ورؤية مدى سرعة تحميل كل شيء بالضبط، واختبار كيف يبدو موقعك على أجهزة مختلفة، وحتى تصحيح أخطاء JavaScript كمحترف تمامًا. إنه أمر مذهل للغاية! **إليك لماذا المتصفحات هي سلاحك السري:** -عندما تنشئ موقعًا أو تطبيقًا ويب، تحتاج إلى رؤية كيف يبدو ويتصرف في العالم الحقيقي. المتصفحات لا تعرض عملك فقط، بل تقدم أيضًا ملاحظات تفصيلية حول الأداء، إمكانية الوصول، والمشكلات المحتملة. +عندما تنشئ موقع ويب أو تطبيق ويب، تحتاج إلى رؤية كيف يبدو ويتصرف في العالم الحقيقي. المتصفحات لا تعرض فقط عملك بل توفر أيضًا تغذية راجعة مفصلة حول الأداء، وسهولة الوصول، والمشكلات المحتملة. -#### أدوات المطور في المتصفح (DevTools) +#### أدوات مطوري المتصفح (DevTools) تتضمن المتصفحات الحديثة مجموعات تطوير شاملة: -| فئة الأداة | ما تقوم به | مثال على الاستخدام | -|------------|------------|--------------------| -| **مفتش العناصر** | عرض وتعديل HTML/CSS في الوقت الفعلي | تعديل التصميم لرؤية النتائج فورًا | -| **الكونسول** | عرض رسائل الخطأ واختبار JavaScript | تصحيح المشكلات وتجربة الكود | +| فئة الأداة | ماذا تفعل | مثال على الاستخدام | +|---------------|--------------|------------------| +| **مفتش العناصر** | عرض وتعديل HTML/CSS في الوقت الحقيقي | تعديل التنسيق لرؤية النتائج فورًا | +| **وحدة التحكم (Console)** | عرض رسائل الخطأ واختبار JavaScript | تصحيح المشكلات وتجربة الشيفرة | | **مراقب الشبكة** | تتبع كيفية تحميل الموارد | تحسين الأداء وأوقات التحميل | -| **مدقق إمكانية الوصول** | اختبار التصميم الشامل | ضمان عمل موقعك لجميع المستخدمين | -| **محاكي الأجهزة** | معاينة على أحجام شاشات مختلفة | اختبار التصميم المتجاوب دون الحاجة إلى أجهزة متعددة | +| **مدقق سهولة الوصول** | اختبار التصميم الشامل | ضمان عمل موقعك لجميع المستخدمين | +| **محاكي الأجهزة** | المعاينة على أحجام شاشات مختلفة | اختبار التصميم المتجاوب بدون وجود أجهزة متعددة | #### المتصفحات الموصى بها للتطوير -- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - أدوات DevTools معيار الصناعة مع وثائق شاملة -- **[Firefox](https://developer.mozilla.org/docs/Tools)** - أدوات ممتازة لشبكة CSS وإمكانية الوصول -- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - مبني على Chromium مع موارد تطوير من Microsoft +- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - أدوات تطوير معيارية في الصناعة مع توثيق واسع +- **[Firefox](https://developer.mozilla.org/docs/Tools)** - أدوات ممتازة لـ CSS Grid وسهولة الوصول +- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - مبني على Chromium مع موارد مطوري مايكروسوفت -> ⚠️ **نصيحة اختبار مهمة**: اختبر دائمًا مواقعك في متصفحات متعددة! ما يعمل بشكل مثالي في Chrome قد يبدو مختلفًا في Safari أو Firefox. المطورون المحترفون يختبرون عبر جميع المتصفحات الرئيسية لضمان تجربة مستخدم متسقة. +> ⚠️ **نصيحة اختبار مهمة**: اختبر مواقعك دائمًا في متصفحات متعددة! ما يعمل بشكل مثالي في Chrome قد يبدو مختلفًا في Safari أو Firefox. يختبر المطورون المحترفون عبر كل المتصفحات الرئيسية لضمان تجربة مستخدم متسقة. -### أدوات سطر الأوامر: بوابتك إلى قوى المطور الخارقة -حسنًا، دعونا نكون صادقين تمامًا هنا بشأن سطر الأوامر، لأنني أريدك أن تسمع هذا من شخص يفهم الأمر حقًا. عندما رأيته لأول مرة – مجرد شاشة سوداء مخيفة مع نص يومض – فكرت حرفيًا: "لا، بالتأكيد لا! يبدو هذا وكأنه شيء من فيلم هاكرز في الثمانينيات، وأنا بالتأكيد لست ذكيًا بما يكفي لهذا!" 😅 +### أدوات سطر الأوامر: بوابتك إلى قوى خارقة كمطور -لكن إليك ما كنت أتمنى أن يخبرني به أحدهم حينها، وما سأخبرك به الآن: سطر الأوامر ليس مخيفًا – إنه في الواقع مثل إجراء محادثة مباشرة مع جهاز الكمبيوتر الخاص بك. فكر فيه كأنه الفرق بين طلب الطعام عبر تطبيق فاخر مع صور وقوائم (وهو لطيف وسهل) مقابل الدخول إلى مطعمك المحلي المفضل حيث يعرف الطاهي بالضبط ما تحب ويمكنه إعداد شيء مثالي بمجرد أن تقول "فاجئني بشيء رائع." +حسنًا، دعنا نصارح أنفسنا هنا حول سطر الأوامر، لأنني أريدك أن تسمع هذا من شخص يفهمه حقًا. عندما رأيته لأول مرة - مجرد شاشة سوداء مخيفة بها نص يومض - فكرت حرفيًا، "لا، بالتأكيد لا! هذا يبدو كشيء من فيلم هاكرز من ثمانينيات القرن الماضي، وأنا بالتأكيد لست ذكيًا بما يكفي لهذا!" 😅 -سطر الأوامر هو المكان الذي يذهب إليه المطورون ليشعروا وكأنهم سحرة حقيقيون. تكتب بضع كلمات تبدو سحرية (حسنًا، إنها مجرد أوامر، لكنها تبدو سحرية!)، تضغط على Enter، وبوم – لقد أنشأت هياكل مشاريع كاملة، قمت بتثبيت أدوات قوية من جميع أنحاء العالم، أو نشرت تطبيقك على الإنترنت ليشاهده الملايين. بمجرد أن تحصل على أول طعم لهذه القوة، يصبح الأمر إدمانًا بصراحة! +ولكن هنا ما كنت أتمنى أن يخبرني به شخص آنذاك، وما أخبرك به الآن: سطر الأوامر ليس مخيفًا – إنه فعليًا مثل التحدث مباشرة مع حاسوبك. فكر فيه كفرق بين طلب الطعام عبر تطبيق فاخر به صور وقوائم (وهو سهل وجميل) وبين الدخول إلى مطعمك المحلي المفضل حيث يعرف الشيف بالضبط ما تحب ويمكنه إعداد شيء مثالي بمجرد أن تقول "فاجئني بشيء رائع." + +سطر الأوامر هو المكان الذي يشعر فيه المطورون كأنهم سحرة حقيقيون. تكتب بعض الكلمات التي تبدو سحرية (حسنًا، هي مجرد أوامر، لكنها تبدو سحرية!)، تضغط Enter، وفجأة – لقد أنشأت هياكل مشاريع كاملة، أو ثبتت أدوات قوية من جميع أنحاء العالم، أو نشرت تطبيقك على الإنترنت ليشاهده الملايين. بمجرد أن تتذوق هذه القوة لأول مرة، تصبح مدمنًا عليها! **لماذا سيصبح سطر الأوامر أداتك المفضلة:** -بينما تعتبر الواجهات الرسومية رائعة للعديد من المهام، يتفوق سطر الأوامر في الأتمتة، الدقة، والسرعة. تعمل العديد من أدوات التطوير بشكل أساسي من خلال واجهات سطر الأوامر، وتعلم استخدامها بكفاءة يمكن أن يحسن إنتاجيتك بشكل كبير. +بينما الواجهات الرسومية رائعة للعديد من المهام، يتفوق سطر الأوامر في الأتمتة والدقة والسرعة. تعمل العديد من أدوات التطوير بشكل أساسي من خلال واجهات سطر الأوامر، وتعلم استخدامها بكفاءة يمكن أن يحسن إنتاجيتك بشكل كبير. ```bash -# Step 1: Create and navigate to project directory +# الخطوة 1: إنشاء مجلد المشروع والانتقال إليه mkdir my-awesome-website cd my-awesome-website ``` **ما يفعله هذا الكود:** -- **إنشاء** دليل جديد يسمى "my-awesome-website" لمشروعك -- **التنقل** إلى الدليل الذي تم إنشاؤه حديثًا لبدء العمل +- **إنشاء** مجلد جديد يسمى "my-awesome-website" لمشروعك +- **الانتقال** إلى المجلد الذي تم إنشاؤه حديثًا لبدء العمل ```bash -# Step 2: Initialize project with package.json +# الخطوة 2: تهيئة المشروع باستخدام package.json npm init -y -# Install modern development tools +# تثبيت أدوات التطوير الحديثة npm install --save-dev vite prettier eslint npm install --save-dev @eslint/js ``` -**خطوة بخطوة، ما يحدث هنا:** -- **تهيئة** مشروع Node.js جديد بإعدادات افتراضية باستخدام `npm init -y` -- **تثبيت** Vite كأداة بناء حديثة للتطوير السريع وبناء الإنتاج -- **إضافة** Prettier لتنسيق الكود تلقائيًا وESLint لفحص جودة الكود -- **استخدام** العلامة `--save-dev` لتحديد هذه كاعتماديات خاصة بالتطوير فقط +**خطوة بخطوة، هذا ما يحدث:** +- **تهيئة** مشروع Node.js جديد بالإعدادات الافتراضية باستخدام `npm init -y` +- **تثبيت** Vite كأداة بناء حديثة لتطوير وبناء سريع +- **إضافة** Prettier لتنسيق الشيفرة تلقائيًا و ESLint لفحص جودة الشيفرة +- **استخدام** العلامة `--save-dev` لوضع هذه التبعيات كاعتمادات خاصة بالتطوير فقط ```bash -# Step 3: Create project structure and files +# الخطوة 3: إنشاء هيكل المشروع والملفات mkdir src assets echo 'My Site

Hello World

' > index.html -# Start development server +# بدء خادم التطوير npx vite ``` -**في ما سبق، قمنا بـ:** -- **تنظيم** مشروعنا بإنشاء مجلدات منفصلة للكود المصدري والموارد -- **إنشاء** ملف HTML أساسي مع هيكل وثيقة مناسب -- **بدء** خادم تطوير Vite لإعادة التحميل المباشر واستبدال الوحدات الساخنة +**في الأعلى، قمنا بـ:** +- **تنظيم** مشروعنا بإنشاء مجلدات منفصلة للكود المصدر والموارد +- **إنشاء** ملف HTML أساسي به هيكل مستند صحيح +- **تشغيل** خادم تطوير Vite لإعادة تحميل وتحديث سريع للموديولات الحية #### أدوات سطر الأوامر الأساسية لتطوير الويب | الأداة | الغرض | لماذا تحتاجها | -|--------|-------|---------------| -| **[Git](https://git-scm.com/)** | التحكم في الإصدارات | تتبع التغييرات، التعاون مع الآخرين، نسخ احتياطي لعملك | -| **[Node.js & npm](https://nodejs.org/)** | بيئة تشغيل JavaScript وإدارة الحزم | تشغيل JavaScript خارج المتصفحات، تثبيت أدوات التطوير الحديثة | -| **[Vite](https://vitejs.dev/)** | أداة بناء وخادم تطوير | تطوير سريع للغاية مع استبدال الوحدات الساخنة | -| **[ESLint](https://eslint.org/)** | جودة الكود | العثور على المشكلات في JavaScript وإصلاحها تلقائيًا | -| **[Prettier](https://prettier.io/)** | تنسيق الكود | الحفاظ على تنسيق الكود بشكل متسق وقابل للقراءة | +|------|---------|-----------------| +| **[Git](https://git-scm.com/)** | التحكم في الإصدارات | تتبع التغييرات، التعاون مع الآخرين، عمل نسخ احتياطية | +| **[Node.js & npm](https://nodejs.org/)** | بيئة تشغيل JavaScript وإدارة الحزم | تشغيل JavaScript خارج المتصفحات، تثبيت أدوات تطوير حديثة | +| **[Vite](https://vitejs.dev/)** | أداة بناء وخادم تطوير | تطوير سريع جدًا مع تحديث سريع للموديولات | +| **[ESLint](https://eslint.org/)** | جودة الكود | اكتشاف وإصلاح المشكلات في JavaScript تلقائيًا | +| **[Prettier](https://prettier.io/)** | تنسيق الكود | الحفاظ على تنسيق الشيفرة بشكل موحد وقابل للقراءة | -#### خيارات خاصة بالمنصات +#### خيارات منصات محددة **Windows:** -- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - محطة حديثة وغنية بالميزات -- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - بيئة برمجة قوية -- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - سطر أوامر Windows التقليدي +- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - محطة طرفية حديثة وغنية بالميزات +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - بيئة برمجة نصية قوية +- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - سطر الأوامر التقليدي في ويندوز **macOS:** -- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - تطبيق المحطة المدمج -- **[iTerm2](https://iterm2.com/)** - محطة محسنة مع ميزات متقدمة +- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - تطبيق الطرفية المدمج +- **[iTerm2](https://iterm2.com/)** - محطة طرفية محسنة بميزات متقدمة **Linux:** -- **[Bash](https://www.gnu.org/software/bash/)** 💻 - الصدفة القياسية لنظام Linux -- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - محاكي محطة متقدم +- **[Bash](https://www.gnu.org/software/bash/)** 💻 - الشل القياسي في لينوكس +- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - محاكي طرفية متقدم > 💻 = مثبت مسبقًا على نظام التشغيل -> 🎯 **مسار التعلم**: ابدأ بالأوامر الأساسية مثل `cd` (تغيير الدليل)، `ls` أو `dir` (عرض الملفات)، و`mkdir` (إنشاء مجلد). تدرب على أوامر سير العمل الحديثة مثل `npm install`، `git status`، و`code .` (يفتح الدليل الحالي في VS Code). مع تقدمك في الراحة، ستتعلم بشكل طبيعي المزيد من الأوامر المتقدمة وتقنيات الأتمتة. +> 🎯 **مسار التعلم**: ابدأ بالأوامر الأساسية مثل `cd` (تغيير المجلد)، `ls` أو `dir` (عرض الملفات)، و `mkdir` (إنشاء مجلد). تدرب على أوامر سير العمل الحديثة مثل `npm install`، `git status`، و `code .` (يفتح المجلد الحالي في VS Code). مع الوقت، ستتقن تلقائيًا أوامر وتقنيات أتمتة متقدمة. + -### الوثائق: معلمك المتاح دائمًا للتعلم +### التوثيق: معلمك المتاح دائمًا للتعلم -حسنًا، دعني أشاركك سرًا صغيرًا سيجعلك تشعر بتحسن كبير بشأن كونك مبتدئًا: حتى أكثر المطورين خبرة يقضون جزءًا كبيرًا من وقتهم في قراءة الوثائق. وليس لأنهم لا يعرفون ما يفعلونه – بل لأن ذلك علامة على الحكمة! +حسنًا، دعني أشاركك سرًا صغيرًا سيجعلك تشعر بتحسن كبير تجاه كونك مبتدئًا: حتى أكثر المطورين خبرة يقضون جزءًا كبيرًا من وقتهم في قراءة التوثيق. وليس لأنهم لا يعرفون ماذا يفعلون – بل هو دليل على الحكمة! -فكر في الوثائق كأنك تمتلك وصولًا إلى أكثر المعلمين صبرًا ومعرفة الذين يتوفرون على مدار الساعة. عالق في مشكلة الساعة 2 صباحًا؟ الوثائق موجودة مع عناق افتراضي دافئ والإجابة التي تحتاجها بالضبط. تريد تعلم ميزة جديدة رائعة يتحدث عنها الجميع؟ الوثائق تدعمك بأمثلة خطوة بخطوة. تحاول فهم لماذا يعمل شيء ما بالطريقة التي يعمل بها؟ نعم، الوثائق جاهزة لتشرح لك بطريقة تجعلك تفهمها أخيرًا! +فكر في التوثيق كالوصول لأكثر المعلمين صبرًا وعلمًا في العالم والمتاحين 24/7. عالق في مشكلة في الثانية 2 صباحًا؟ التوثيق هنا مع حضن افتراضي دافئ وبالضبط الإجابة التي تحتاجها. تريد تعلم ميزة جديدة رائجة؟ التوثيق يدعمك بأمثلة خطوة بخطوة. تحاول فهم لماذا يعمل شيء ما بهذه الطريقة؟ بالطبع – التوثيق جاهز لشرح ذلك بطريقة تجعلك تفهم أخيرًا! -إليك شيء غير وجهة نظري تمامًا: عالم تطوير الويب يتحرك بسرعة كبيرة، ولا أحد (أعني لا أحد على الإطلاق!) يحتفظ بكل شيء في ذاكرته. لقد شاهدت مطورين كبار لديهم خبرة تزيد عن 15 عامًا يبحثون عن بناء جملة أساسي، وتعلم ماذا؟ هذا ليس محرجًا – إنه ذكي! الأمر لا يتعلق بامتلاك ذاكرة مثالية؛ بل يتعلق بمعرفة أين تجد الإجابات الموثوقة بسرعة وفهم كيفية تطبيقها. +إليك شيء غير وجهة نظري تمامًا: عالم تطوير الويب يتغير بسرعة خارقة، ولا أحد (أعني حرفيًا لا أحد!) يحفظ كل شيء عن ظهر قلب. شاهدت مطورين كبار بخبرة 15+ سنة يبحثون عن قواعد أساسية، وتعرف ماذا؟ هذا ليس محرجًا – هذا ذكي! المسألة ليست في امتلاك ذاكرة مثالية، بل في معرفة أين تجد إجابات موثوقة بسرعة وكيفية تطبيقها. -**إليك أين يحدث السحر الحقيقي:** +**هنا يحدث السحر الحقيقي:** -يقضي المطورون المحترفون جزءًا كبيرًا من وقتهم في قراءة الوثائق – ليس لأنهم لا يعرفون ما يفعلونه، بل لأن مشهد تطوير الويب يتطور بسرعة كبيرة بحيث يتطلب البقاء على اطلاع مستمر التعلم المستمر. تساعدك الوثائق الجيدة على فهم ليس فقط *كيف* تستخدم شيئًا ما، بل *لماذا* و*متى* تستخدمه. +يقضي المطورون المحترفون جزءًا كبيرًا من وقتهم في قراءة التوثيق – ليس لأنهم لا يعرفون ماذا يفعلون، بل لأن مجال تطوير الويب يتطور بسرعة هائلة والحفاظ على المعرفة المستحدثة يتطلب تعلمًا مستمرًا. التوثيق الرائع يساعدك على فهم ليس فقط *كيف* تستخدم شيئًا، بل و*لماذا* ومتى تستخدمه. -#### موارد الوثائق الأساسية +#### مصادر التوثيق الأساسية **[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** -- المعيار الذهبي لوثائق تقنيات الويب -- أدلة شاملة لـ HTML، CSS، وJavaScript -- تتضمن معلومات توافق المتصفح -- تحتوي على أمثلة عملية وعروض تفاعلية +- المعيار الذهبي لتوثيق تقنيات الويب +- أدلة شاملة لـ HTML، و CSS، و JavaScript +- يشمل معلومات توافق المتصفحات +- يحتوي على أمثلة عملية وعروض تفاعلية **[Web.dev](https://web.dev)** (من Google) -- أفضل ممارسات تطوير الويب الحديث +- أفضل ممارسات تطوير الويب الحديثة - أدلة تحسين الأداء -- مبادئ التصميم الشامل وإمكانية الوصول -- دراسات حالة من مشاريع العالم الحقيقي +- مبادئ سهولة الوصول والتصميم الشامل +- دراسات حالة من مشاريع واقعية **[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** - موارد تطوير متصفح Edge -- أدلة تطبيقات الويب التقدمية -- رؤى تطوير عبر الأنظمة الأساسية +- أدلة Progressive Web App +- رؤى تطوير عبر المنصات **[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** -- مناهج تعليمية منظمة +- مناهج تعلم منظمة - دورات فيديو من خبراء الصناعة -- تمارين برمجة عملية +- تمرينات برمجية عملية -> 📚 **استراتيجية الدراسة**: لا تحاول حفظ الوثائق – بدلاً من ذلك، تعلم كيفية التنقل فيها بكفاءة. ضع إشارات مرجعية للمراجع المستخدمة بشكل متكرر وتدرب على استخدام وظائف البحث للعثور على معلومات محددة بسرعة. +> 📚 **استراتيجية الدراسة**: لا تحاول حفظ التوثيق – بدلاً من ذلك، تعلم كيفية التنقل فيه بكفاءة. احفظ المراجع التي تستخدمها كثيرًا وتدرب على استخدام خاصية البحث لإيجاد المعلومات بسرعة. -### 🔧 **اختبار إتقان الأدوات: ما الذي يثير اهتمامك؟** +### 🔧 **فحص إتقان الأدوات: ما الذي يلامسك؟** **خذ لحظة للتفكير:** -- أي أداة أنت متحمس لتجربتها أولاً؟ (لا توجد إجابة خاطئة!) -- هل لا يزال سطر الأوامر يبدو مخيفًا، أم أنك فضولي بشأنه؟ -- هل يمكنك تخيل استخدام أدوات المطور في المتصفح لاستكشاف ما وراء الكواليس لمواقعك المفضلة؟ +- ما الأداة التي أنت متحمس لتجربتها أولاً؟ (لا توجد إجابة خاطئة!) +- هل لا يزال سطر الأوامر يبدو مخيفًا، أم أنك مهتم به؟ +- هل يمكنك تخيل استخدام أدوات مطوري المتصفح للتجسس على خلفية مواقعك المفضلة؟ ```mermaid -pie title "Developer Time Spent With Tools" - "Code Editor" : 40 - "Browser Testing" : 25 - "Command Line" : 15 - "Reading Docs" : 15 - "Debugging" : 5 +pie title "الوقت الذي يقضيه المطور مع الأدوات" + "محرر الشفرة" : 40 + "اختبار المتصفح" : 25 + "سطر الأوامر" : 15 + "قراءة الوثائق" : 15 + "تصحيح الأخطاء" : 5 ``` +> **معلومة ممتعة**: يقضي معظم المطورين حوالي 40٪ من وقتهم في محرر الشيفرة الخاص بهم، لكن لاحظ كم من الوقت يذهب للاختبار والتعلم وحل المشكلات. البرمجة ليست مجرد كتابة شيفرة – إنها صياغة تجارب! -> **معلومة ممتعة**: يقضي معظم المطورين حوالي 40% من وقتهم في محرر الكود الخاص بهم، لكن لاحظ كم من الوقت يُخصص للاختبار، التعلم، وحل المشكلات. البرمجة ليست فقط كتابة الكود – إنها صناعة تجارب! - -✅ **فكرة للتفكير**: إليك شيء مثير للتفكير – كيف تعتقد أن الأدوات لبناء المواقع (التطوير) قد تختلف عن الأدوات لتصميم كيف تبدو (التصميم)؟ إنه مثل الفرق بين أن تكون مهندسًا معماريًا يصمم منزلًا جميلًا والمقاول الذي يبنيه فعليًا. كلاهما ضروري، لكنهما يحتاجان إلى صناديق أدوات مختلفة! هذا النوع من التفكير سيساعدك حقًا على رؤية الصورة الأكبر لكيفية ظهور المواقع إلى الحياة. +✅ **غذاء للتفكير**: إليك شيئًا مثيرًا للتفكير – كيف تعتقد أن أدوات بناء المواقع (التطوير) قد تختلف عن أدوات تصميم شكلها (التصميم)؟ مثل الفرق بين مهندس معماري يصمم منزلًا جميلًا والمقاول الذي يبنيه بالفعل. كلاهما ضروري لكن يحتاجان إلى أدوات مختلفة! هذا النوع من التفكير سيساعدك حقًا على رؤية الصورة الأكبر لكيفية حياة المواقع. ## تحدي GitHub Copilot Agent 🚀 استخدم وضع الوكيل لإكمال التحدي التالي: -**الوصف:** استكشف ميزات محرر الكود الحديث أو بيئة التطوير المتكاملة (IDE) وأظهر كيف يمكن أن تحسن سير عملك كمطور ويب. +**الوصف:** استكشف ميزات محرر شيفرة حديث أو IDE وشرح كيف يمكنه تحسين سير عملك كمطور ويب. -**المهمة:** اختر محرر كود أو بيئة تطوير متكاملة (مثل Visual Studio Code، WebStorm، أو IDE قائم على السحابة). قم بتحديد ثلاث ميزات أو إضافات تساعدك على كتابة، تصحيح، أو صيانة الكود بكفاءة أكبر. لكل منها، قدم شرحًا موجزًا عن كيفية تحسينها لسير عملك. +**المطلب:** اختر محرر شيفرة أو IDE (مثل Visual Studio Code، WebStorm، أو IDE قائم على السحابة). اذكر ثلاث ميزات أو امتدادات تساعدك على كتابة وتصحيح أو الحفاظ على الشيفرة بفعالية أكثر. لكل منها، قدم شرحًا مختصرًا عن كيفية استفادتك منها في سير العمل. --- ## 🚀 التحدي -**حسنًا، أيها المحقق، هل أنت مستعد لأول قضية لك؟** +**حسنًا، أيها المحقق، هل أنت مستعد لقضيتك الأولى؟** -الآن بعد أن حصلت على هذه الأساسيات الرائعة، لدي مغامرة ستساعدك على رؤية مدى تنوع وجاذبية عالم البرمجة حقًا. واستمع – هذا ليس عن كتابة الكود بعد، لذا لا يوجد ضغط هنا! فكر في نفسك كمحقق لغات برمجة في أول قضية مثيرة لك! +الآن بعد أن أصبحت لديك هذه الأساسيات الرائعة، لدي مغامرة ستساعدك على رؤية مدى التنوع والروعة لعالم البرمجة. واستمع - هذه ليست حول كتابة الشيفرة بعد، فلا ضغط في هذا الأمر! اعتبر نفسك محقق لغات برمجة في قضيتك المثيرة الأولى! -**مهمتك، إذا اخترت قبولها:** -1. **كن مستكشفًا للغات**: اختر ثلاث لغات برمجة من عوالم مختلفة تمامًا – ربما واحدة تبني مواقع، واحدة تنشئ تطبيقات جوال، وواحدة تحلل البيانات للعلماء. ابحث عن أمثلة لنفس المهمة البسيطة مكتوبة بكل لغة. أعدك أنك ستندهش تمامًا من مدى اختلافها أثناء القيام بنفس الشيء! +**مهمتك، إذا قررت قبولها:** +1. **كن مستكشف لغات**: اختر ثلاث لغات برمجة من عوالم مختلفة تمامًا – ربما واحدة لبناء المواقع، وأخرى لإنشاء تطبيقات الهاتف المحمول، وثالثة لمعالجة البيانات للعلماء. ابحث عن أمثلة لنفس المهمة البسيطة مكتوبة بكل لغة. أعدك بأنك ستندهش تمامًا من مدى اختلافها بينما تؤدي نفس الشيء بالضبط! -2. **اكتشف قصص أصلها**: ما الذي يجعل كل لغة مميزة؟ إليك حقيقة رائعة – كل لغة برمجة تم إنشاؤها لأن شخصًا ما فكر، "تعرف ماذا؟ يجب أن يكون هناك طريقة أفضل لحل هذه المشكلة المحددة." هل يمكنك معرفة ما كانت تلك المشكلات؟ بعض هذه القصص مثيرة للاهتمام حقًا! +2. **اكشف قصص نشأتها**: ما الذي يجعل كل لغة مميزة؟ هذه حقيقة رائعة – كل لغة برمجة تم إنشاؤها لأن شخصًا ما فكر، "تعرف ماذا؟ يجب أن تكون هناك طريقة أفضل لحل هذه المشكلة المحددة." هل يمكنك اكتشاف ما هي تلك المشكلات؟ بعض هذه القصص حقًا مثيرة! -3. **تعرف على المجتمعات**: تحقق من مدى ترحيب وشغف مجتمع كل لغة. البعض لديه ملايين المطورين الذين يشاركون المعرفة ويساعدون بعضهم البعض، والبعض الآخر أصغر ولكن مترابط للغاية وداعم. ستعجبك رؤية الشخصيات المختلفة لهذه المجتمعات! +3. **التقى المجتمعات**: اطلع على مدى ترحيب وشغف كل مجتمع للغة. بعضها يضم ملايين المطورين الذين يشاركون المعرفة ويساعدون بعضهم البعض، بينما البعض الآخر أصغر لكن مترابط وداعم بشكل كبير. ستحب رؤية الشخصيات المختلفة لهذه المجتمعات! -4. **اتبع شعورك الداخلي**: أي لغة تبدو أكثر سهولة بالنسبة لك الآن؟ لا تقلق بشأن اتخاذ الخيار "المثالي" – فقط استمع إلى حدسك! لا توجد إجابة خاطئة هنا، ويمكنك دائمًا استكشاف الآخرين لاحقًا. +4. **تابع حدسك**: أي لغة تبدو أكثر قربًا منك حاليًا؟ لا تشغل بالك بالاختيار "المثالي" – فقط استمع إلى إحساسك! لا توجد إجابة خاطئة هنا، ويمكنك دائمًا استكشاف لغات أخرى لاحقًا. -**عمل تحري إضافي**: حاول اكتشاف ما هي المواقع أو التطبيقات الرئيسية التي تم بناؤها بكل لغة. أضمن أنك ستُصدم عندما تعرف ما الذي يشغل Instagram، Netflix، أو تلك اللعبة الجوالة التي لا تستطيع التوقف عن لعبها! +**عمل تحقيق إضافي**: حاول اكتشاف ما هي المواقع أو التطبيقات الكبرى المبنية بكل لغة. أضمن لك أنك ستندهش عندما تعلم ما الذي يشغل إنستغرام، نيتفليكس، أو تلك اللعبة المحمولة التي لا تستطيع التوقف عن لعبها! -> 💡 **تذكر**: أنت لا تحاول أن تصبح خبيرًا في أي من هذه اللغات اليوم. أنت فقط تتعرف على الحي قبل أن تقرر أين تريد أن تستقر. خذ وقتك، استمتع بالأمر، ودع فضولك يقودك! +> 💡 **تذكر**: أنت لا تحاول أن تصبح خبيرًا في أي من هذه اللغات اليوم. أنت فقط تتعرف على الحي قبل أن تقرر أين تريد أن تقيم متجرك. خذ وقتك، استمتع، ودع فضولك يقودك! ## لنحتفل بما اكتشفته! -يا إلهي، لقد استوعبت الكثير من المعلومات الرائعة اليوم! أنا متحمس حقًا لرؤية مدى تأثير هذه الرحلة المذهلة عليك. وتذكر – هذا ليس اختبارًا تحتاج فيه إلى أن تكون مثاليًا. هذا أشبه بالاحتفال بكل الأشياء الرائعة التي تعلمتها عن هذا العالم المثير الذي أنت على وشك الغوص فيه! +يا إلهي، لقد استوعبت قدرًا هائلًا من المعلومات الرائعة اليوم! أنا متحمس حقًا لرؤية مدى التمسك بهذه الرحلة المذهلة. وتذكر – هذا ليس اختبارًا تحتاج أن تجتازه بشكل مثالي. هذا أقرب إلى احتفال بكل الأشياء الرائعة التي تعلمتها عن هذا العالم الرائع الذي ستغوص فيه قريبًا! -[خذ اختبار ما بعد الدرس](https://ff-quizzes.netlify.app/web/) -## المراجعة والدراسة الذاتية +[خض اختبار ما بعد الدرس](https://ff-quizzes.netlify.app/web/) -**خذ وقتك للاستكشاف واستمتع بذلك!** +## مراجعة ودراسة ذاتية -لقد قطعت شوطًا كبيرًا اليوم، وهذا شيء تفخر به! الآن يأتي الجزء الممتع – استكشاف المواضيع التي أثارت فضولك. تذكر، هذا ليس واجبًا منزليًا – إنها مغامرة! +**خذ وقتك للاستكشاف والاستمتاع!** +لقد غطيت الكثير اليوم، وهذا شيء تفخر به! والآن يأتي الجزء الممتع – استكشاف المواضيع التي أثارت فضولك. تذكّر، هذا ليس واجبًا منزليًا – بل هو مغامرة! -**استكشف ما يثير حماسك بعمق:** +**اغص في العمق فيما يثير حماسك:** -**تفاعل مع لغات البرمجة:** -- قم بزيارة المواقع الرسمية لـ 2-3 لغات أثارت اهتمامك. لكل منها شخصيتها وقصتها الخاصة! -- جرب بعض منصات البرمجة عبر الإنترنت مثل [CodePen](https://codepen.io/)، [JSFiddle](https://jsfiddle.net/)، أو [Replit](https://replit.com/). لا تخف من التجربة – لن تكسر شيئًا! -- اقرأ عن كيفية نشأة لغتك المفضلة. صدقني، بعض هذه القصص الأصلية مثيرة للاهتمام وستساعدك على فهم سبب عمل اللغات بالطريقة التي تعمل بها. +**تعمّق في لغات البرمجة:** +- زر المواقع الرسمية لـ 2-3 لغات برمجة لفتت انتباهك. كل واحدة لها شخصيتها وقصتها الخاصة! +- جرّب بعض ساحات البرمجة الإلكترونية مثل [CodePen](https://codepen.io/)، [JSFiddle](https://jsfiddle.net/)، أو [Replit](https://replit.com/). لا تخف من التجربة – لا يمكنك كسر أي شيء! +- اقرأ عن كيف نشأت لغتك المفضلة. حقًا، بعض هذه القصص الأصلية مثيرة وستساعدك على فهم سبب عمل اللغات بالطريقة التي تعمل بها. -**تعرف على أدواتك الجديدة:** -- قم بتنزيل Visual Studio Code إذا لم تقم بذلك بالفعل – إنه مجاني وستحبه! -- اقضِ بضع دقائق في تصفح سوق الإضافات. إنه مثل متجر التطبيقات لمحرر الكود الخاص بك! -- افتح أدوات المطور في متصفحك وانقر هنا وهناك. لا تقلق بشأن فهم كل شيء – فقط تعرّف على ما هو موجود. +**تأقلم مع أدواتك الجديدة:** +- حمّل Visual Studio Code إذا لم تكن قد فعلت ذلك بالفعل – إنه مجاني وستعجبك بشدة! +- اقضِ بضع دقائق في تصفح سوق الإضافات. إنه مثل متجر تطبيقات لمحرر الكود الخاص بك! +- افتح أدوات المطور في متصفحك وانقر هنا وهناك. لا تقلق من فهم كل شيء – فقط تعرّف على ما هو موجود. **انضم إلى المجتمع:** -- تابع بعض مجتمعات المطورين على [Dev.to](https://dev.to/)، [Stack Overflow](https://stackoverflow.com/)، أو [GitHub](https://github.com/). مجتمع البرمجة مرحب جدًا بالمبتدئين! -- شاهد بعض الفيديوهات التعليمية للمبتدئين على YouTube. هناك العديد من المبدعين الرائعين الذين يتذكرون كيف كان الأمر عندما بدأوا. -- فكر في الانضمام إلى لقاءات محلية أو مجتمعات عبر الإنترنت. صدقني، المطورون يحبون مساعدة المبتدئين! +- تابع بعض مجتمعات المطورين على [Dev.to](https://dev.to/)، [Stack Overflow](https://stackoverflow.com/)، أو [GitHub](https://github.com/). مجتمع البرمجة ترحيبي للغاية بالمبتدئين! +- شاهد بعض فيديوهات البرمجة الموجهة للمبتدئين على يوتيوب. هناك العديد من المبدعين الرائعين الذين يتذكرون كيف يكون الأمر عند البدء. +- فكر في الانضمام إلى لقاءات محلية أو مجتمعات إلكترونية. صدقني، المطورون يحبون مساعدة القادمين الجدد! + +> 🎯 **اسمع، هذا ما أريدك أن تتذكره**: لن تتوقع أن تصبح ساحر برمجة بين عشية وضحاها! أنت الآن فقط تتعرف على هذا العالم الرائع الجديد الذي على وشك أن تكون جزءًا منه. خذ وقتك، استمتع بالرحلة، وتذكر – كل مطور تعجب به كان يجلس يومًا ما تمامًا حيث أنت الآن، يشعر بالحماس وربما بقليل من الارباك. هذا أمر طبيعي تمامًا، ويعني أنك تسير على الطريق الصحيح! + -> 🎯 **اسمع، هذا ما أريدك أن تتذكره**: لا يُتوقع منك أن تصبح خبيرًا في البرمجة بين ليلة وضحاها! الآن، أنت فقط تتعرف على هذا العالم الجديد الرائع الذي ستصبح جزءًا منه. خذ وقتك، استمتع بالرحلة، وتذكر – كل مطور تعجب به كان يجلس في مكانك تمامًا، يشعر بالحماس وربما قليلًا من الارتباك. هذا طبيعي تمامًا، ويعني أنك تسير في الطريق الصحيح. ## المهمة -[قراءة الوثائق](assignment.md) +[Reading the Docs](assignment.md) -> 💡 **تلميح صغير لمهمتك**: سأكون سعيدًا جدًا برؤية أنك تستكشف بعض الأدوات التي لم نتحدث عنها بعد! تجاوز المحررات، المتصفحات، وأدوات سطر الأوامر التي تحدثنا عنها – هناك عالم مذهل من أدوات التطوير الرائعة ينتظر أن يتم اكتشافه. ابحث عن الأدوات التي يتم تحديثها بانتظام ولديها مجتمعات نشطة وداعمة (عادةً ما تكون هذه الأدوات لديها أفضل الشروحات وأكثر الأشخاص دعمًا عندما تواجه مشكلة وتحتاج إلى يد مساعدة ودية). +> 💡 **دفعة صغيرة لمهمتك**: سأكون سعيدًا جدًا إذا استكشفت بعض الأدوات التي لم نتطرق إليها بعد! تخطَ المحررات، والمتصفحات، وأدوات سطر الأوامر التي تحدثنا عنها بالفعل – هناك عالم هائل من أدوات التطوير الرائعة في انتظارك لاكتشافها. ابحث عن تلك التي تتم صيانتها بفاعلية وتتمتع بمجتمعات نابضة بالحياة ومساعدة (هذه عادةً ما تحتوي على أفضل الدروس وأكثر الأشخاص دعمًا عندما تعلق وتحتاج إلى يد صديقة). --- ## 🚀 جدول رحلتك البرمجية -### ⚡ **ما يمكنك القيام به في الدقائق الخمس القادمة** -- [ ] ضع إشارة مرجعية على مواقع 2-3 لغات برمجة أثارت اهتمامك -- [ ] قم بتنزيل Visual Studio Code إذا لم تقم بذلك بالفعل -- [ ] افتح أدوات المطور في متصفحك (F12) وانقر هنا وهناك على أي موقع -- [ ] انضم إلى مجتمع برمجي واحد (Dev.to، Reddit r/webdev، أو Stack Overflow) - -### ⏰ **ما يمكنك إنجازه خلال الساعة القادمة** -- [ ] أكمل اختبار ما بعد الدرس وفكر في إجاباتك -- [ ] قم بإعداد VS Code مع إضافة GitHub Copilot -- [ ] جرب مثال "Hello World" في لغتين برمجيتين مختلفتين عبر الإنترنت -- [ ] شاهد فيديو "يوم في حياة مطور" على YouTube -- [ ] ابدأ تحقيقك في لغات البرمجة (من التحدي) - -### 📅 **مغامرتك لمدة أسبوع** -- [ ] أكمل المهمة واستكشف 3 أدوات تطوير جديدة -- [ ] تابع 5 مطورين أو حسابات برمجية على وسائل التواصل الاجتماعي -- [ ] حاول بناء شيء صغير على CodePen أو Replit (حتى لو كان مجرد "مرحبًا، [اسمك]!") -- [ ] اقرأ منشور مدونة لمطور عن رحلته البرمجية -- [ ] انضم إلى لقاء افتراضي أو شاهد حديثًا عن البرمجة -- [ ] ابدأ تعلم اللغة التي اخترتها من خلال الدروس عبر الإنترنت - -### 🗓️ **تحولك خلال شهر** -- [ ] قم ببناء أول مشروع صغير لك (حتى لو كان مجرد صفحة ويب بسيطة!) -- [ ] ساهم في مشروع مفتوح المصدر (ابدأ بإصلاحات الوثائق) -- [ ] قم بتوجيه شخص بدأ للتو رحلته البرمجية -- [ ] أنشئ موقع محفظة المطور الخاص بك -- [ ] تواصل مع مجتمعات المطورين المحلية أو مجموعات الدراسة -- [ ] ابدأ التخطيط لمرحلة التعلم التالية - -### 🎯 **التأمل النهائي** - -**قبل أن تنتقل، خذ لحظة للاحتفال:** -- ما الشيء الذي أثار حماسك بشأن البرمجة اليوم؟ -- ما الأداة أو المفهوم الذي تريد استكشافه أولاً؟ -- كيف تشعر بشأن بدء رحلتك البرمجية؟ -- ما السؤال الذي ترغب في طرحه على مطور الآن؟ +### ⚡ **ما يمكنك فعله في الدقائق الخمس القادمة** +- [ ] احفظ في المفضلة مواقع 2-3 لغات برمجة لفتت انتباهك +- [ ] حمّل Visual Studio Code إذا لم تفعل ذلك بعد +- [ ] افتح أدوات المطور في متصفحك (F12) وانقر في أي موقع إلكتروني +- [ ] انضم إلى مجتمع برمجة واحد (Dev.to، Reddit r/webdev، أو Stack Overflow) + +### ⏰ **ما يمكنك تحقيقه خلال هذه الساعة** +- [ ] أكمل اختبار ما بعد الدرس وتأمل في إجاباتك +- [ ] جهز VS Code مع إضافة GitHub Copilot +- [ ] جرّب مثال "مرحبًا بالعالم" بلغتين برمجيتين مختلفتين أونلاين +- [ ] شاهد فيديو "يوم في حياة مطور" على يوتيوب +- [ ] ابدأ في عمل تحقيقك الخاص حول لغات البرمجة (من التحدي) + +### 📅 **مغامرتك التي تستمر أسبوعًا** +- [ ] أتمم المهمة واستكشف 3 أدوات تطوير جديدة +- [ ] تابع 5 مطورين أو حسابات برمجة على وسائل التواصل الاجتماعي +- [ ] جرّب بناء شيء صغير في CodePen أو Replit (حتى لو كان مجرد "مرحبًا، [اسمك]!") +- [ ] اقرأ تدوينة مطور واحدة عن رحلة برمجية لشخص ما +- [ ] انضم إلى لقاء افتراضي أو شاهد محاضرة برمجية +- [ ] ابدأ تعلم لغتك المختارة عبر الدروس الإلكترونية + +### 🗓️ **تحولك الذي يستمر شهرًا** +- [ ] ابني مشروعك الصغير الأول (حتى صفحة ويب بسيطة تُحسب!) +- [ ] ساهم في مشروع مفتوح المصدر (ابدأ بإصلاح التوثيق) +- [ ] علم شخصًا بدأ رحلته البرمجية للتو +- [ ] أنشئ موقع ملفك الشخصي كمطور +- [ ] تواصل مع مجتمعات مطورين محلية أو مجموعات دراسة +- [ ] ابدأ تخطيط هدفك التعليمي التالي + +### 🎯 **تقييم التأمل النهائي** + +**قبل أن تتابع، خذ لحظة للاحتفال:** +- ما هو الشيء الذي أثار حماسك في البرمجة اليوم؟ +- أي أداة أو مفهوم ترغب في استكشافه أولًا؟ +- كيف تشعر حيال بدء هذه الرحلة البرمجية؟ +- ما السؤال الذي تود طرحه على مطور الآن؟ ```mermaid journey - title Your Confidence Building Journey - section Today - Curious: 3: You - Overwhelmed: 4: You - Excited: 5: You - section This Week - Exploring: 4: You - Learning: 5: You - Connecting: 4: You - section Next Month - Building: 5: You - Confident: 5: You - Helping Others: 5: You + title رحلتك في بناء الثقة بالنفس + section اليوم + Curious: 3: أنت + Overwhelmed: 4: أنت + Excited: 5: أنت + section هذا الأسبوع + Exploring: 4: أنت + Learning: 5: أنت + Connecting: 4: أنت + section الشهر القادم + Building: 5: أنت + Confident: 5: أنت + Helping Others: 5: أنت ``` - -> 🌟 **تذكر**: كل خبير كان يومًا ما مبتدئًا. كل مطور كبير شعر تمامًا كما تشعر الآن – بالحماس، وربما قليلًا من الارتباك، وبالتأكيد فضوليًا بشأن ما هو ممكن. أنت في صحبة رائعة، وهذه الرحلة ستكون مذهلة. مرحبًا بك في عالم البرمجة الرائع! 🎉 +> 🌟 **تذكّر**: كل خبير كان مبتدئًا يومًا ما. كل مطور كبير شعر بنفس شعورك الآن – متحمس، وربما مرتبك قليلاً، وبالتأكيد فضولي حول ما هو ممكن. أنت في صحبة رائعة، وهذه الرحلة ستكون مذهلة. مرحبًا بك في العالم الرائع للبرمجة! 🎉 --- -**إخلاء المسؤولية**: -تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالترجمة البشرية الاحترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file + +**تنويه**: +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى الانتباه إلى أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الهامة أو الحرجة، يُنصح بالاعتماد على الترجمة الاحترافية البشرية. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ناتج عن استخدام هذه الترجمة. + \ No newline at end of file diff --git a/translations/ar/AGENTS.md b/translations/ar/AGENTS.md index 244b7cd08..16098058d 100644 --- a/translations/ar/AGENTS.md +++ b/translations/ar/AGENTS.md @@ -2,27 +2,27 @@ ## نظرة عامة على المشروع -هذا مستودع منهج تعليمي لتدريس أساسيات تطوير الويب للمبتدئين. المنهج هو دورة شاملة لمدة 12 أسبوعًا تم تطويرها بواسطة Microsoft Cloud Advocates، ويحتوي على 24 درسًا عمليًا تغطي JavaScript وCSS وHTML. +هذا مستودع منهج تعليمي لتعليم أساسيات تطوير الويب للمبتدئين. المنهج عبارة عن دورة شاملة لمدة 12 أسبوعًا طورتها Microsoft Cloud Advocates، تشمل 24 درسًا عمليًا تغطي JavaScript و CSS و HTML. ### المكونات الرئيسية -- **المحتوى التعليمي**: 24 درسًا منظمين في وحدات تعتمد على المشاريع -- **مشاريع عملية**: تيراريوم، لعبة الكتابة، امتداد المتصفح، لعبة الفضاء، تطبيق البنك، محرر الشيفرة، ومساعد الدردشة بالذكاء الاصطناعي -- **اختبارات تفاعلية**: 48 اختبارًا يحتوي كل منها على 3 أسئلة (تقييمات قبل/بعد الدرس) -- **دعم متعدد اللغات**: ترجمات مؤتمتة لأكثر من 50 لغة عبر GitHub Actions -- **التقنيات**: HTML، CSS، JavaScript، Vue.js 3، Vite، Node.js، Express، Python (لمشاريع الذكاء الاصطناعي) +- **المحتوى التعليمي**: 24 درسًا منظمًا في وحدات تعتمد على المشاريع +- **مشاريع عملية**: Terrarium, لعبة الطباعة، امتداد المتصفح، لعبة الفضاء، تطبيق مصرفي، محرر كود، ومساعد دردشة ذكي +- **اختبارات تفاعلية**: 48 اختبارًا يحتوي كل منها على 3 أسئلة (تقييمات قبل وبعد الدرس) +- **دعم متعدد اللغات**: ترجمات آلية لأكثر من 50 لغة عبر GitHub Actions +- **التقنيات**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (لمشاريع الذكاء الاصطناعي) -### البنية +### الهيكلية -- مستودع تعليمي به هيكلية تعتمد على الدروس -- كل مجلد درس يحتوي على ملف README، أمثلة شيفرة، وحلول -- مشاريع مستقلة في مجلدات منفصلة (quiz-app، مشاريع دروس متنوعة) -- نظام الترجمة يستخدم GitHub Actions (co-op-translator) -- التوثيق يُقدم عبر Docsify ومتوفر كملف PDF +- مستودع تعليمي به هيكل يعتمد على الدروس +- يحتوي كل مجلد درس على README، أمثلة الكود، والحلول +- مشاريع مستقلة في مجلدات منفصلة (quiz-app، مشاريع الدروس المختلفة) +- نظام ترجمة باستخدام GitHub Actions (co-op-translator) +- توثيق مقدم عبر Docsify ومتوافر كملف PDF ## أوامر الإعداد -هذا المستودع مخصص في المقام الأول لاستهلاك المحتوى التعليمي. للعمل على مشاريع محددة: +هذا المستودع مخصص بشكل أساسي لاستهلاك المحتوى التعليمي. للعمل مع مشاريع محددة: ### إعداد المستودع الرئيسي @@ -31,13 +31,13 @@ git clone https://github.com/microsoft/Web-Dev-For-Beginners.git cd Web-Dev-For-Beginners ``` -### إعداد تطبيق الاختبارات (Vue 3 + Vite) +### إعداد تطبيق الاختبار (Vue 3 + Vite) ```bash cd quiz-app npm install -npm run dev # بدء خادم التطوير -npm run build # البناء للإنتاج +npm run dev # ابدأ خادم التطوير +npm run build # بناء للإنتاج npm run lint # تشغيل ESLint ``` @@ -56,7 +56,7 @@ npm run format # التنسيق باستخدام Prettier ```bash cd 5-browser-extension/solution npm install -# اتبع تعليمات تحميل الامتدادات الخاصة بالمتصفح +# اتبع تعليمات تحميل الإضافات الخاصة بالمتصفح ``` ### مشاريع لعبة الفضاء @@ -64,128 +64,128 @@ npm install ```bash cd 6-space-game/solution npm install -# افتح index.html في المتصفح أو استخدم الخادم المباشر +# افتح index.html في المتصفح أو استخدم Live Server ``` -### مشروع الدردشة (خلفية Python) +### مشروع الدردشة (باك إند بايثون) ```bash cd 9-chat-project/solution/backend/python pip install openai -# تعيين متغير بيئة GITHUB_TOKEN +# تعيين متغير البيئة GITHUB_TOKEN python api.py ``` -## سير عمل التطوير +## سير العمل التطويري -### للمساهمين بالمحتوى +### للمساهمين في المحتوى -1. **انسخ المستودع إلى حساب GitHub الخاص بك (Fork)** -2. **استنسخ نسخة فورك محليًا** -3. **أنشئ فرعًا جديدًا** لإجراء التغييرات -4. اجري تغييرات على محتوى الدروس أو أمثلة الشيفرة -5. اختبر أي تغييرات في مجلدات المشاريع ذات الصلة -6. قدم طلبات سحب (Pull Requests) وفقًا لإرشادات المساهمة +1. **فرع المستودع** إلى حسابك على GitHub +2. **نسخ الفرع** محليًا +3. **إنشاء فرع جديد** للتعديلات التي ستجريها +4. أجرِ التعديلات على محتوى الدرس أو أمثلة الكود +5. اختبر تغييرات الكود في مجلدات المشاريع ذات الصلة +6. أرسل طلبات السحب وفقًا لإرشادات المساهمة ### للمتعلمين -1. انسخ أو استنسخ المستودع -2. انتقل إلى مجلدات الدروس بترتيبها +1. فرع أو استنسخ المستودع +2. انتقل تدريجيًا إلى مجلدات الدروس 3. اقرأ ملفات README لكل درس -4. أكمل اختبارات قبل الدرس على https://ff-quizzes.netlify.app/web/ -5. اعمل على أمثلة الشيفرة في مجلدات الدروس +4. أكمل الاختبارات قبل الدرس على https://ff-quizzes.netlify.app/web/ +5. تابع أمثلة الكود في مجلدات الدروس 6. أكمل الواجبات والتحديات -7. خذ اختبارات ما بعد الدرس +7. خُذ اختبارات ما بعد الدرس ### التطوير الحي -- **التوثيق**: شغل `docsify serve` من جذر المشروع (المنفذ 3000) -- **تطبيق الاختبار**: شغل `npm run dev` في مجلد quiz-app -- **المشاريع**: استخدم امتداد VS Code Live Server لمشاريع HTML -- **مشاريع API**: شغل `npm start` في مجلدات API المعنية +- **التوثيق**: شغّل الأمر `docsify serve` في المسار الجذري (المنفذ 3000) +- **تطبيق الاختبار**: شغّل `npm run dev` في مجلد quiz-app +- **المشاريع**: استخدم إضافة Live Server في VS Code لمشاريع HTML +- **مشاريع API**: شغّل `npm start` في مجلدات API المعنية ## تعليمات الاختبار -### اختبار تطبيق الاختبارات +### اختبار تطبيق الاختبار ```bash cd quiz-app -npm run lint # التحقق من وجود مشاكل في نمط الكود -npm run build # التحقق من نجاح البناء +npm run lint # التحقق من مشاكل نمط الكود +npm run build # التأكد من نجاح الإنشاء ``` ### اختبار API البنك ```bash cd 7-bank-project/api -npm run lint # تحقق من مشكلات نمط الكود -node server.js # تحقق من بدء الخادم بدون أخطاء +npm run lint # التحقق من مشاكل نمط الكود +node server.js # التحقق من بدء الخادم بدون أخطاء ``` -### منهجية الاختبار العامة +### نهج الاختبار العام -- هذا مستودع تعليمي بدون اختبارات مؤتمتة شاملة -- الاختبارات اليدوية تركز على: - - تشغيل أمثلة الشيفرة بدون أخطاء - - عمل الروابط في التوثيق بشكل صحيح - - اكتمال بناء المشاريع بنجاح - - اتباع الأمثلة لأفضل الممارسات +- هذا مستودع تعليمي بدون اختبارات آلية شاملة +- الاختبار اليدوي يركز على: + - تشغيل أمثلة الكود بدون أخطاء + - تأكد من عمل الروابط في التوثيق بشكل صحيح + - اكتمال بناء المشروع بنجاح + - اتباع أمثلة الكود لأفضل الممارسات -### فحوصات ما قبل الإرسال +### الفحوصات قبل الإرسال -- شغل `npm run lint` في المجلدات التي تحتوي package.json -- تحقق من صلاحية روابط Markdown -- اختبر أمثلة الشيفرة في المتصفح أو Node.js -- تأكد أن الترجمات تحافظ على البنية الصحيحة +- شغّل `npm run lint` في المجلدات التي تحوي package.json +- تحقق من صحة روابط markdown +- اختبر أمثلة الكود في المتصفح أو Node.js +- تأكد من أن الترجمات تحافظ على الهيكل الصحيح -## إرشادات نمط الشيفرة +## إرشادات نمط الكود ### جافا سكريبت -- استخدم بناء جملة ES6+ الحديثة -- اتبع إعدادات ESLint القياسية المقدمة في المشاريع -- استخدم أسماء متغيرات ودوال ذات معنى للتعليم -- أضف تعليقات توضح المفاهيم للمتعلمين -- نسق الشيفرة باستخدام Prettier حيثما كان مفعلاً +- استخدم صياغة ES6+ الحديثة +- اتبع تكوينات ESLint القياسية المقدمة في المشاريع +- استخدم أسماء متغيرات ودوال ذات معنى لتعزيز وضوح التعليم +- أضف تعليقات تشرح المفاهيم للمتعلمين +- نسق باستخدام Prettier حيثما تم التكوين -### HTML / CSS +### HTML/CSS -- عناصر HTML5 الدلالية -- مبادئ التصميم المستجيب -- قواعد واضحة لتسمية الأصناف (الكلاسات) -- تعليقات تفصيلية لتقنيات CSS للمتعلمين +- استخدم عناصر HTML5 الدلالية +- مبادئ التصميم المتجاوب +- تسميات واضحة للفئات (class) +- تعليقات تشرح تقنيات CSS للمتعلمين ### بايثون -- إرشادات نمط PEP 8 -- أمثلة شيفرة واضحة وتعليمية -- تعليمات النوع حيث تفيد في التعلم +- اتبع إرشادات نمط PEP 8 +- أمثلة كود واضحة وتعليمية +- استخدم تنبيهات النوع (Type hints) إن كان مفيدًا للتعلم ### توثيق Markdown -- تسلسل واضح للرؤوس -- كتل الشيفرة مع تحديد لغة البرمجة +- تسلسل واضح للعناوين +- كتل كود مع تحديد اللغة - روابط لموارد إضافية -- لقطات شاشة وصور في مجلد `images/` -- نص بديل للصور من أجل سهولة الوصول +- لقطات شاشة وصور في مجلدات `images/` +- نص بديل للصور لدعم إمكانية الوصول ### تنظيم الملفات -- الدروس مرقمة تسلسليًا (1-getting-started-lessons, 2-js-basics, الخ) -- لكل مشروع مجلد `solution/` وغالبًا مجلد `start/` أو `your-work/` -- الصور مخزنة في مجلدات `images/` الخاصة بكل درس -- الترجمات في بنية `translations/{language-code}/` +- ترقم الدروس بشكل تسلسلي (1-getting-started-lessons, 2-js-basics، ..) +- يحتوي كل مشروع على مجلد `solution/` وغالبًا `start/` أو `your-work/` +- تُخزن الصور في مجلدات `images/` الخاصة بكل درس +- الترجمات في هيكل `translations/{language-code}/` ## البناء والنشر -### نشر تطبيق الاختبارات (Azure Static Web Apps) +### نشر تطبيق الاختبار (Azure Static Web Apps) -تم تكوين تطبيق الاختبارات للنشر على Azure Static Web Apps: +تم تكوين quiz-app للنشر على Azure Static Web Apps: ```bash cd quiz-app npm run build # ينشئ مجلد dist/ -# ينشر عبر سير عمل GitHub Actions عند الدفع إلى الفرع الرئيسي +# ينفذ النشر عبر سير عمل GitHub Actions عند الدفع إلى الفرع الرئيسي ``` تكوين Azure Static Web Apps: @@ -193,11 +193,11 @@ npm run build # ينشئ مجلد dist/ - **موقع المخرجات**: `dist` - **سير العمل**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` -### إنشاء ملف PDF للتوثيق +### توليد ملف PDF للتوثيق ```bash npm install # تثبيت docsify-to-pdf -npm run convert # إنشاء ملف PDF من مستندات.docs +npm run convert # إنشاء ملف PDF من المستندات ``` ### توثيق Docsify @@ -207,76 +207,76 @@ npm install -g docsify-cli # تثبيت Docsify على مستوى النظا docsify serve # الخادم على localhost:3000 ``` -### بناء خاص بالمشروع +### بناء خاص بكل مشروع قد يحتوي كل مجلد مشروع على عملية بناء خاصة به: -- مشاريع Vue: `npm run build` لإنشاء الحزم الإنتاجية -- مشاريع ثابتة: بدون خطوة بناء، قدّم الملفات مباشرة +- مشاريع Vue: `npm run build` لإنشاء الحزم للإنتاج +- المشاريع الثابتة: لا توجد خطوة بناء، تقديم الملفات مباشرة -## إرشادات طلب السحب +## إرشادات طلبات السحب ### صيغة العنوان -استخدم عناوين واضحة وواصفة توضح مجال التغيير: -- `[Quiz-app] إضافة اختبار جديد للدرس X` -- `[Lesson-3] إصلاح خطأ مطبعي في مشروع التيراريوم` -- `[Translation] إضافة الترجمة الإسبانية للدرس 5` -- `[Docs] تحديث تعليمات الإعداد` +استخدم عناوين واضحة وواصفة تشير إلى مجال التغيير: +- `[Quiz-app] أضف اختبارًا جديدًا للدرس X` +- `[Lesson-3] أصلح خطأ إملائي في مشروع Terrarium` +- `[Translation] أضف ترجمة إسبانية للدرس 5` +- `[Docs] حدث تعليمات الإعداد` ### الفحوصات المطلوبة -قبل تقديم طلب السحب: +قبل إرسال طلب السحب: -1. **جودة الشيفرة**: - - شغل `npm run lint` في مجلدات المشاريع المتأثرة - - أصلح كافة الأخطاء والتحذيرات +1. **جودة الكود**: + - شغّل `npm run lint` في مجلدات المشاريع المتأثرة + - أصلح جميع أخطاء التحليل التحذيرية 2. **التحقق من البناء**: - - شغل `npm run build` إذا كان ذلك ممكنًا + - شغّل `npm run build` إذا كان ذلك مطبقًا - تأكد من عدم وجود أخطاء في البناء 3. **التحقق من الروابط**: - - اختبر جميع روابط Markdown + - اختبر جميع روابط markdown - تحقق من عمل مراجع الصور 4. **مراجعة المحتوى**: - - تدقيق تهجئة ونحو - - تأكد من صحة الأمثلة التعليمية للكود - - تحقق من أن الترجمات تحافظ على المعنى الأصلي + - تدقيق إملائي ونحوي + - تأكد من صحة أمثلة الكود وتعليميتها + - تحقق من المحافظة على المعنى الأصلي في الترجمات ### متطلبات المساهمة -- الموافقة على اتفاقية ترخيص المساهمة من Microsoft (التحقق آليًا في أول طلب سحب) -- اتباع [مدونة السلوك لمصدر Microsoft المفتوح](https://opensource.microsoft.com/codeofconduct/) -- اطلع على [CONTRIBUTING.md](./CONTRIBUTING.md) للإرشادات المفصلة -- إرفاق أرقام القضايا في وصف طلب السحب إن وجدت +- الموافقة على اتفاقية ترخيص المساهمة من Microsoft (فحص تلقائي في أول طلب سحب) +- الالتزام ب[مدونة السلوك المفتوحة لمايكروسوفت](https://opensource.microsoft.com/codeofconduct/) +- راجع [CONTRIBUTING.md](./CONTRIBUTING.md) للإرشادات التفصيلية +- أشر إلى أرقام القضايا في وصف طلب السحب إن وجد ### عملية المراجعة -- يتم مراجعة طلبات السحب من قبل القائمين على الصيانة والمجتمع -- تُعطى الأولوية لوضوح المحتوى التعليمي -- يجب أن تتبع أمثلة الشيفرة أفضل الممارسات الحالية -- تُراجع الترجمات للدقة والملاءمة الثقافية +- مراجعة طلبات السحب من قبل الصيانة والمجتمع +- الأولوية لوضوح التعليم +- يجب أن تتبع أمثلة الكود أفضل الممارسات الحالية +- مراجعة الترجمات للدقة والملاءمة الثقافية ## نظام الترجمة -### الترجمة المؤتمتة +### الترجمة الآلية -- تستخدم GitHub Actions مع سير العمل co-op-translator -- تترجم تلقائيًا إلى أكثر من 50 لغة -- الملفات المصدرية في الدلائل الرئيسية +- يستخدم GitHub Actions مع سير العمل co-op-translator +- يترجم إلى أكثر من 50 لغة تلقائيًا +- الملفات المصدر في الدلائل الرئيسية - الملفات المترجمة في مجلدات `translations/{language-code}/` -### إضافة تحسينات الترجمة يدويًا +### إضافة تحسينات الترجمة اليدوية 1. حدد موقع الملف في `translations/{language-code}/` -2. أجرِ تحسينات مع الحفاظ على البنية -3. تأكد من استمرار عمل أمثلة الشيفرة +2. أجرِ تحسينات مع الحفاظ على الهيكل +3. تأكد من بقاء أمثلة الكود فعالة 4. اختبر أي محتوى اختبار محلي -### بيانات وصف الترجمة +### بيانات الترجمة الوصفية -تحتوي الملفات المترجمة على رأس بيانات وصفية: +الملفات المترجمة تشمل رأس بيانات وصفية: ```markdown ``` -## تصحيح الأخطاء واستكشاف المشكلات +## التحري عن الأخطاء وحل المشاكل ### المشاكل الشائعة -**فشل تطبيق الاختبارات في التشغيل**: -- تحقق من إصدار Node.js (يفضل v14+) -- احذف `node_modules` و`package-lock.json`، ثم شغل `npm install` من جديد -- تحقق من تعارض المنفذ (الافتراضي: Vite يستخدم المنفذ 5173) +**فشل تطبيق الاختبار في البدء**: +- تحقق من إصدار Node.js (ينصح v14+) +- احذف `node_modules` و `package-lock.json`، ثم أعد تشغيل `npm install` +- تحقق من تعارض المنافذ (افتراضي: Vite يستخدم المنفذ 5173) -**عدم بدء تشغيل خادم API**: -- تحقق من أن إصدار Node.js يلبي الحد الأدنى (node >=10) -- تحقق إذا كان المنفذ قيد الاستخدام بالفعل -- تأكد من تثبيت جميع التبعيات عبر `npm install` +**عدم بدء خادم API**: +- تحقق من أن نسخة Node.js تفي بالحد الأدنى (node >=10) +- تحقق إذا كان المنفذ مستخدمًا بالفعل +- تأكد من تثبيت جميع التبعيات باستخدام `npm install` -**امتداد المتصفح لا يتم تحميله**: -- تحقق من تنسيق ملف manifest.json بشكل صحيح -- راجع وحدة تحكم المتصفح لأي أخطاء +**امتداد المتصفح لا يعمل**: +- تحقق من صحة صياغة manifest.json +- تحقق من وحدة تحكم المتصفح للأخطاء - اتبع تعليمات تثبيت الامتداد الخاصة بالمتصفح **مشاكل مشروع الدردشة بايثون**: - تأكد من تثبيت حزمة OpenAI: `pip install openai` - تحقق من تعيين متغير البيئة GITHUB_TOKEN -- تحقق من أذونات الوصول إلى GitHub Models +- تحقق من أذونات الوصول لنماذج GitHub **عدم تقديم Docsify للتوثيق**: - ثبت docsify-cli عالميًا: `npm install -g docsify-cli` -- شغّل من دليل الجذر للمستودع -- تحقق من وجود `docs/_sidebar.md` +- شغّل الأمر من الدليل الجذري للمستودع +- تأكد من وجود `docs/_sidebar.md` ### نصائح بيئة التطوير -- استخدم VS Code مع امتداد Live Server لمشاريع HTML -- ثبت امتدادات ESLint وPrettier لتنسيق متناسق -- استخدم أدوات مطور المتصفح لتصحيح JavaScript -- لمشاريع Vue، ثبت امتداد Vue DevTools للمتصفح +- استخدم VS Code مع إضافة Live Server لمشاريع HTML +- ثبت إضافات ESLint و Prettier لتنسيق موحد +- استخدم أدوات المتصفح لتصحيح جافا سكريبت +- لمشاريع Vue، ثبت إضافة Vue DevTools للمتصفح ### اعتبارات الأداء -- العدد الكبير لملفات الترجمة (50+ لغة) يجعل الاستنساخ الكامل ضخمًا -- استخدم استنساخ سطحي إذا كنت تعمل على المحتوى فقط: `git clone --depth 1` +- عدد كبير من الملفات المترجمة (أكثر من 50 لغة) يجعل النسخ الكاملة كبيرًا +- استخدم استنساخ عميق ضحل عند العمل على المحتوى فقط: `git clone --depth 1` - استبعد الترجمات من عمليات البحث عند العمل على المحتوى الإنجليزي -- قد تكون عمليات البناء بطيئة في التشغيل الأول (npm install، بناء Vite) +- عمليات البناء قد تكون بطيئة في أول تشغيل (npm install، بناء Vite) ## اعتبارات الأمان -### المتغيرات البيئية +### متغيرات البيئة -- لا يجب أبدًا حفظ مفاتيح API في المستودع +- يجب ألا يتم الالتزام بمفاتيح API في المستودع - استخدم ملفات `.env` (مضمّنة في `.gitignore`) -- وضح المتغيرات البيئية المطلوبة في ملفات README الخاصة بالمشاريع +- وثّق متغيرات البيئة المطلوبة في ملفات README الخاصة بالمشاريع ### مشاريع بايثون - استخدم بيئات افتراضية: `python -m venv venv` - حافظ على تحديث التبعيات -- يجب أن يكون لرموز GitHub الأذونات الدنيا المطلوبة +- يجب أن تمتلك رموز GitHub صلاحيات قليلة قدر الإمكان -### الوصول إلى GitHub Models +### وصول نماذج GitHub -- تُطلب رموز وصول شخصية (PAT) لـ GitHub Models -- يجب تخزين الرموز كمتغيرات بيئية -- لا تقم بحفظ الرموز أو بيانات الاعتماد في المستودع +- يتطلب الوصول رموز وصول شخصية (PAT) +- يجب تخزين الرموز كمتغيرات بيئة +- لا تلتزم الرموز أو بيانات الاعتماد في المستودع ## ملاحظات إضافية ### الجمهور المستهدف -- مبتدئون كاملون في تطوير الويب -- طلاب ومتعلّمون ذاتيون -- مدرسون يستخدمون المنهج في الفصول الدراسية -- المحتوى مصمم لسهولة الوصول وبناء المهارات تدريجيًا +- مبتدئون تامون في تطوير الويب +- الطلاب والتعلم الذاتي +- المعلمون الذين يستخدمون المنهج داخل الصفوف +- المحتوى مصمم للوصول السهل وبناء المهارات تدريجيًا -### فلسفة التعليم +### الفلسفة التعليمية -- نهج التعلم المعتمد على المشاريع -- فحوصات معرفية متكررة (اختبارات) -- تمارين برمجية عملية -- أمثلة تطبيقية من الواقع -- التركيز على الأساسيات قبل الأُطُر +- نهج التعلم القائم على المشاريع +- اختبارات معرفة متكررة (اختبارات قصيرة) +- تمارين عملية في البرمجة +- أمثلة تطبيقية من العالم الحقيقي +- التركيز على الأساسيات قبل الأُطُر (frameworks) ### صيانة المستودع - مجتمع نشط من المتعلمين والمساهمين - تحديثات منتظمة للتبعيات والمحتوى -- مراقبة القضايا والمناقشات بواسطة القائمين على الصيانة +- مراقبة القضايا والمناقشات من قِبل القائمين على الصيانة - تحديثات الترجمة مؤتمتة عبر GitHub Actions -### الموارد ذات الصلة +### الموارد المرتبطة - [وحدات Microsoft Learn](https://docs.microsoft.com/learn/) - [موارد Student Hub](https://docs.microsoft.com/learn/student-hub/) - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) موصى به للمتعلمين -- دورات إضافية: الذكاء الاصطناعي التوليدي، علوم البيانات، التعلم الآلي، منهجيات إنترنت الأشياء متاحة +- دورات إضافية: الذكاء الاصطناعي التوليدي، علم البيانات، التعلم الآلي، مناهج إنترنت الأشياء متاحة ### العمل مع مشاريع محددة -للحصول على تعليمات مفصلة حول المشاريع الفردية، راجع ملفات README في: -- `quiz-app/README.md` - تطبيق الاختبارات بـ Vue 3 -- `7-bank-project/README.md` - تطبيق البنك مع المصادقة -- `5-browser-extension/README.md` - تطوير امتداد المتصفح +للتعليمات التفصيلية عن المشاريع الفردية، راجع ملفات README في: +- `quiz-app/README.md` - تطبيق اختبار Vue 3 +- `7-bank-project/README.md` - تطبيق مصرفي مع المصادقة +- `5-browser-extension/README.md` - تطوير امتدادات المتصفح - `6-space-game/README.md` - تطوير لعبة باستخدام Canvas -- `9-chat-project/README.md` - مشروع مساعد الدردشة بالذكاء الاصطناعي +- `9-chat-project/README.md` - مشروع مساعد دردشة ذكي -### هيكل المونوريبو +### هيكل المونوريبوزيتوري -على الرغم من عدم كونه مونوريبو تقليدي، يحتوي هذا المستودع على مشاريع مستقلة متعددة: -- كل درس مستقل بذاته +بينما ليس مونوريبوزيتوري تقليدي، يحتوي هذا المستودع على مشاريع مستقلة متعددة: +- كل درس مستقل ذاتيًا - المشاريع لا تشترك في التبعيات -- العمل على مشاريع فردية دون التأثير على الأخرى -- استنساخ المستودع الكامل لتجربة المنهج بالكامل +- العمل على المشاريع الفردية بدون التأثير على الأخرى +- استنسخ المستودع كاملًا للحصول على تجربة المنهج الكامل --- -**إخلاء مسؤولية**: -تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). وعلى الرغم من سعينا لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. بالنسبة للمعلومات الهامة، يُنصح بالاعتماد على الترجمة البشرية المهنية. نحن غير مسؤولين عن أي سوء فهم أو تأويل ناتج عن استخدام هذه الترجمة. +**إخلاء المسؤولية**: +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى للحفاظ على الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر المعتمد. للوثائق والمعلومات الحيوية، يُنصح بالاستعانة بترجمة بشرية محترفة. نحن غير مسؤولين عن أي سوء فهم أو تفسير خاطئ ينشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/README.md b/translations/ar/README.md index 8b207284e..5d122bf29 100644 --- a/translations/ar/README.md +++ b/translations/ar/README.md @@ -12,257 +12,268 @@ # تطوير الويب للمبتدئين - منهج دراسي -تعلم أساسيات تطوير الويب من خلال دورتنا الشاملة التي تستمر 12 أسبوعًا من قبل دعاة مايكروسوفت السحابيين. كل واحدة من الدروس الـ 24 تغوص في JavaScript و CSS و HTML عبر مشاريع عملية مثل التيراريوم، إضافات المتصفح، وألعاب الفضاء. شارك في الاختبارات والنقاشات والتكليفات العملية. حسّن مهاراتك وفعّل استيعابك للمعرفة باستخدام طريقتنا التعليمية القائمة على المشاريع. ابدأ رحلة الترميز الخاصة بك اليوم! +تعلم أساسيات تطوير الويب مع دورتنا الشاملة التي تستمر 12 أسبوعًا من قِبل دعاة السحابة في مايكروسوفت. كل درس من الدروس الـ 24 يغوص في JavaScript و CSS و HTML من خلال مشاريع تطبيقية مثل التيراريومات، امتدادات المتصفح، وألعاب الفضاء. شارك في اختبارات، مناقشات، وواجبات عملية. حسن مهاراتك وعزز احتفاظك بالمعرفة من خلال منهجنا الفعال المبني على المشاريع. ابدأ رحلتك في الترميز اليوم! -انضم إلى مجتمع Azure AI Foundry على Discord +انضم إلى مجتمع Azure AI Foundry على ديسكورد [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) اتبع هذه الخطوات للبدء باستخدام هذه الموارد: -1. **افعل فورك للمستودع**: اضغط [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) -2. **انسخ المستودع**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -3. [**انضم إلى Azure AI Foundry على Discord والتقِ بالخبراء والمطورين الآخرين**](https://discord.com/invite/ByRwuEEgH4) +1. **فرع المستودع**: انقر على [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) +2. **انسخ المستودع محليًا**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` +3. [**انضم إلى Azure AI Foundry على ديسكورد والتقِ بالخبراء والمطورين الآخرين**](https://discord.com/invite/ByRwuEEgH4) ### 🌐 دعم متعدد اللغات -#### مدعوم عبر GitHub Action (مؤتمت ومُحدث دائمًا) +#### مدعوم عبر إجراء GitHub (آلي ومحدث دائمًا) -[Arabic](./README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md) +[العربية](./README.md) | [البنغالية](../bn/README.md) | [البلغارية](../bg/README.md) | [البورمية (ميانمار)](../my/README.md) | [الصينية (المبسطة)](../zh-CN/README.md) | [الصينية (التقليدية، هونغ كونغ)](../zh-HK/README.md) | [الصينية (التقليدية، ماكاو)](../zh-MO/README.md) | [الصينية (التقليدية، تايوان)](../zh-TW/README.md) | [الكرواتية](../hr/README.md) | [التشيكية](../cs/README.md) | [الدانماركية](../da/README.md) | [الهولندية](../nl/README.md) | [الإستونية](../et/README.md) | [الفنلندية](../fi/README.md) | [الفرنسية](../fr/README.md) | [الألمانية](../de/README.md) | [اليونانية](../el/README.md) | [العبرية](../he/README.md) | [الهندية](../hi/README.md) | [الهنغارية](../hu/README.md) | [الإندونيسية](../id/README.md) | [الإيطالية](../it/README.md) | [اليابانية](../ja/README.md) | [الكانتادية](../kn/README.md) | [الكورية](../ko/README.md) | [الليتوانية](../lt/README.md) | [الماليزية](../ms/README.md) | [المالايالامية](../ml/README.md) | [الماراثية](../mr/README.md) | [النيبالية](../ne/README.md) | [النيجيرية بيدجن](../pcm/README.md) | [النرويجية](../no/README.md) | [الفارسية (اللغة الفارسية)](../fa/README.md) | [البولندية](../pl/README.md) | [البرتغالية (البرازيل)](../pt-BR/README.md) | [البرتغالية (البرتغال)](../pt-PT/README.md) | [البنجابية (غورموخي)](../pa/README.md) | [الرومانية](../ro/README.md) | [الروسية](../ru/README.md) | [الصربية (السيريلية)](../sr/README.md) | [السلوفاكية](../sk/README.md) | [السلوفينية](../sl/README.md) | [الإسبانية](../es/README.md) | [السواحيلية](../sw/README.md) | [السويدية](../sv/README.md) | [التاغالوغ (الفلبينية)](../tl/README.md) | [التاميلية](../ta/README.md) | [التيلجو](../te/README.md) | [التايلاندية](../th/README.md) | [التركية](../tr/README.md) | [الأوكرانية](../uk/README.md) | [الأردية](../ur/README.md) | [الفيتنامية](../vi/README.md) -> **تفضل الاستنساخ محليًا؟** - -> يحتوي هذا المستودع على أكثر من 50 ترجمة للغات مما يزيد بشكل كبير من حجم التنزيل. لاستنساخ بدون الترجمات، استخدم sparse checkout: +> **تفضل النسخ محليًا؟** +> +> يحتوي هذا المستودع على أكثر من 50 ترجمة للغات مما يزيادة حجم التنزيل بشكل كبير. للنسخ بدون الترجمات، استخدم السحب المتفرق: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` -> هذا يمنحك كل ما تحتاجه لإكمال الدورة مع تنزيل أسرع بكثير. +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> +> هذا يمنحك كل ما تحتاجه لإتمام الدورة بسرعة تنزيل أعلى. -**إذا كنت ترغب في دعم لغات ترجمة إضافية فهي مدرجة [هنا](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** +**إذا رغبت بدعم لغات ترجمة إضافية فهي مدرجة [هنا](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** -[![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) +[![افتح في Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) #### 🧑‍🎓 _هل أنت طالب؟_ -زر [**صفحة مركز الطلاب**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) حيث ستجد الموارد للمبتدئين، حزم الطلاب وحتى طرق للحصول على قسيمة شهادة مجانية. هذه هي الصفحة التي تود حفظها ضمن المفضلة والعودة إليها من حين لآخر مع تغير المحتوى شهريًا. +قم بزيارة [**صفحة مركز الطلاب**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) حيث ستجد موارد للمبتدئين، حقائب طلابية وحتى طرق الحصول على قسيمة شهادة مجانية. هذه الصفحة هي التي ترغب في إضافتها للمفضلة والتحقق منها بين الحين والآخر مع تحديث المحتوى شهريًا. -### 📣 إعلان - تحديات وضع GitHub Copilot Agent الجديدة لإكمالها! +### 📣 إعلان - تحديات وضع GitHub Copilot Agent جديدة لإكمالها! -تم إضافة تحدي جديد، ابحث عن "GitHub Copilot Agent Challenge 🚀" في معظم الفصول. هذا تحدي جديد لك لإكماله باستخدام GitHub Copilot ووضع Agent. إذا لم تستخدم وضع Agent من قبل فهو قادر ليس فقط على توليد النص بل يمكنه أيضًا إنشاء وتحرير الملفات، تشغيل الأوامر والمزيد. +تمت إضافة تحدي جديد، ابحث عن "تحدي GitHub Copilot Agent 🚀" في معظم الفصول. إنه تحدٍ جديد لك لتنجزه باستخدام GitHub Copilot ووضع Agent. إذا لم تستخدم وضع Agent من قبل، هو قادر ليس فقط على إنشاء النصوص بل يمكنه أيضًا إنشاء وتحرير الملفات، تشغيل الأوامر والمزيد. -### 📣 إعلان - _مشروع جديد للبناء باستخدام الذكاء الاصطناعي التوليدي_ +### 📣 إعلان - _مشروع جديد للبناء باستخدام الذكاء الاصطناعي التوليدي_ -تم إضافة مشروع مساعد الذكاء الاصطناعي الجديد، تفقده [المشروع](./9-chat-project/README.md) +تمت إضافة مشروع مساعد الذكاء الاصطناعي الجديد، تحقق منه [المشروع](./9-chat-project/README.md) -### 📣 إعلان - _منهج جديد_ حول الذكاء الاصطناعي التوليدي لـ JavaScript تم إصداره للتو +### 📣 إعلان - _منهج جديد_ عن الذكاء الاصطناعي التوليدي لجافا سكريبت تم إصداره للتو -لا تفوت منهج الذكاء الاصطناعي التوليدي الجديد! +لا تفوت منهجنا الجديد عن الذكاء الاصطناعي التوليدي! -زر [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) لتبدأ! +زر [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) للبدء! ![Background](../../translated_images/ar/background.148a8d43afde5730.webp) - دروس تغطي كل شيء من الأساسيات إلى RAG. -- تفاعل مع شخصيات تاريخية باستخدام GenAI وتطبيقنا المصاحب. +- تفاعل مع شخصيات تاريخية باستخدام GenAI وتطبيقنا المرافق. - سرد ممتع وجذاب، ستسافر عبر الزمن! ![character](../../translated_images/ar/character.5c0dd8e067ffd693.webp) -كل درس يتضمن مهمة لإكمالها، اختبار معرفة وتحدي لتوجيهك في تعلم موضوعات مثل: -- التهيئة والهندسة للتهيئة -- توليد تطبيقات نصوص وصور +كل درس يتضمن واجبًا لإكماله، اختبار معرفة وتحديًا لترشدك على تعلم مواضيع مثل: +- الإرشاد والهندسة الموجهة للنصوص +- إنشاء تطبيقات نصية وصورية - تطبيقات البحث -زر [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) لتبدأ! +زر [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) للبدء! -## 🌱 البدء +## 🌱 بداية العمل -> **يا مدرسين**، لقد [أضفنا بعض الاقتراحات](for-teachers.md) حول كيفية استخدام هذا المنهج. نود ملاحظاتكم [في منتدى النقاش الخاص بنا](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! +> **أيها المعلمون**، لقد قمنا [بإدراج بعض الاقتراحات](for-teachers.md) حول كيفية استخدام هذا المنهج. نحب سماع ملاحظاتكم [في منتدى النقاش الخاص بنا](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! -**[الطلاب](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**، لكل درس ابدأ باختبار تمهيدي ثم تابع بقراءة مواد المحاضرة، إكمال الأنشطة المختلفة وفحص فهمك مع اختبار ما بعد المحاضرة. +**[المتعلمون](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**، لكل درس، ابدأ باختبار قبلي ثم تابع بقراءة مادة المحاضرة، إكمال الأنشطة المختلفة، وفحص فهمك باختبار بعد المحاضرة. -لتعزيز تجربتك التعليمية، تواصل مع زملائك للعمل على المشاريع معًا! التشجيع على النقاشات موجود في [منتدى النقاش](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) حيث سيكون فريق المشرفين متاحًا للرد على أسئلتك. +لتعزيز تجربتك التعليمية، تواصل مع زملائك للعمل معًا على المشاريع! ينصح بالمناقشات في [منتدى النقاش](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) حيث سيكون فريق المشرفين لدينا متاحًا للرد على أسئلتك. -لتعميق تعليمك، نوصي بشدة باستكشاف [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) لمواد دراسية إضافية. +لتطوير تعليمك أكثر، نوصي بشدة باستكشاف [مايكروسوفت ليرن](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) للمزيد من مواد الدراسة. -### 📋 إعداد بيئتك التطويرية +### 📋 إعداد بيئتك -هذا المنهج يحتوي على بيئة تطوير جاهزة! أثناء بدءك يمكنك اختيار تشغيل المنهج في [Codespace](https://github.com/features/codespaces/) (_بيئة مستعرضية لا تحتاج تثبيت برمجيات_)، أو محليًا على جهازك باستخدام محرر نصوص مثل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +هذا المنهج يحتوي على بيئة تطوير جاهزة للعمل! أثناء البدء يمكنك اختيار تشغيل المنهج في [Codespace](https://github.com/features/codespaces/) (_بيئة متصفح لا تحتاج تثبيتات_)، أو محليًا على جهاز الكمبيوتر الخاص بك باستخدام محرر نصوص مثل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). -#### إنشاء المستودع الخاص بك -للسهولة في حفظ عملك، يُنصح بإنشاء نسخة خاصة بك من هذا المستودع. يمكنك فعل ذلك بالنقر على زر **Use this template** في أعلى الصفحة. سيؤدي ذلك إلى إنشاء مستودع جديد في حساب GitHub الخاص بك مع نسخة من المنهج. +#### أنشئ مستودعك الخاص +لتمكينك من حفظ عملك بسهولة، يُنصح بأن تنشئ نسختك الخاصة من هذا المستودع. يمكنك فعل ذلك بالنقر على زر **Use this template** في أعلى الصفحة. هذا سينشئ مستودعًا جديدًا في حساب GitHub الخاص بك مع نسخة من المنهج. اتبع هذه الخطوات: -1. **افعل فورك للمستودع**: انقر على زر "Fork" في الزاوية العلوية اليمنى من هذه الصفحة. -2. **انسخ المستودع**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` +1. **فرع المستودع**: انقر على زر "Fork" في أعلى يمين هذه الصفحة. +2. **انسخ المستودع محليًا**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` #### تشغيل المنهج في Codespace -ضمن نسختك من هذا المستودع التي أنشأتها، انقر على زر **Code** واختر **Open with Codespaces**. سينشئ هذا Codespace جديد لتعمل فيه. +في نسختك من هذا المستودع التي أنشأتها، انقر زر **Code** واختر **Open with Codespaces**. سيُنشئ هذا مساحة عمل جديدة للعمل فيها. ![Codespace](../../translated_images/ar/createcodespace.0238bbf4d7a8d955.webp) -#### تشغيل المنهج محليًا على جهازك +#### تشغيل المنهج محليًا على جهاز الكمبيوتر الخاص بك -لتشغيل هذا المنهج محليًا على جهازك، ستحتاج إلى محرر نصوص، متصفح وأداة سطر أوامر. دروسنا الأولى، [مقدمة للغات البرمجة وأدوات المجال](../../1-getting-started-lessons/1-intro-to-programming-languages)، ستأخذك عبر خيارات مختلفة لكل من هذه الأدوات لتختار الأفضل لك. +لتشغيل هذا المنهج محليًا على جهاز الكمبيوتر الخاص بك ستحتاج إلى محرر نصوص، متصفح أويب وأداة سطر الأوامر. درسنا الأول، [مقدمة إلى لغات البرمجة وأدوات التجارة](../../1-getting-started-lessons/1-intro-to-programming-languages)، سيرشدك عبر خيارات مختلفة لكل من هذه الأدوات لتختار الأنسب لك. -توصيتنا هو استخدام [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) كمحرر نصوص، والذي يحتوي أيضًا على [طرفية (Terminal)](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) مدمجة. يمكنك تنزيل Visual Studio Code [من هنا](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). - - -1. انسخ المستودع إلى جهازك. يمكنك فعل ذلك بالنقر على زر **Code** ونسخ الرابط: +توصيتنا هي استخدام [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) كمحرر، والذي يحتوي أيضًا على [طرفية مدمجة](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). يمكنك تنزيل Visual Studio Code من [هنا](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +1. قم باستنساخ مستودعك على جهاز الكمبيوتر الخاص بك. يمكنك القيام بذلك بالنقر على زر **Code** ونسخ عنوان URL: [CodeSpace](./images/createcodespace.png) -ثم، افتح [الطرفية](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) داخل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) وقم بتشغيل الأمر التالي، مع استبدال `` بالرابط الذي نسخته للتو: + + ثم، افتح [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) داخل [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) وشغّل الأمر التالي، مستبدلاً `` بعنوان URL الذي قمت بنسخه للتو: ```bash git clone ``` -2. افتح المجلد في Visual Studio Code. يمكنك القيام بذلك بالنقر على **ملف** > **فتح مجلد** واختيار المجلد الذي قمت باستنساخه. +2. افتح المجلد في Visual Studio Code. يمكنك القيام بذلك بالنقر على **File** > **Open Folder** واختيار المجلد الذي قمت باستنساخه للتو. + -> الإضافات الموصى بها لـ Visual Studio Code: +> التوصيات الخاصة بالامتدادات في Visual Studio Code: > > * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - لمعاينة صفحات HTML داخل Visual Studio Code -> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - لمساعدتك في كتابة الكود بسرعة أكبر +> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - لمساعدتك في كتابة الشيفرة بسرعة أكبر -## 📂 تشمل كل درس: +## 📂 كل درس يشمل: -- ملاحظة رسمية اختيارية +- ملاحظات تخطيطية اختيارية - فيديو تكميلي اختياري -- اختبار دافئ قبل الدرس +- اختبار تمهيدي قبل الدرس - درس مكتوب -- للدروس القائمة على المشاريع، أدلة خطوة بخطوة حول كيفية بناء المشروع -- فحوصات معرفية +- للدروس المبنية على المشاريع، إرشادات خطوة بخطوة لبناء المشروع +- اختبار معرفة - تحدي -- قراءة تكميلية +- قراءة تكملية - واجب -- [اختبار ما بعد الدرس](https://ff-quizzes.netlify.app/web/) +- [اختبار بعد الدرس](https://ff-quizzes.netlify.app/web/) -> **ملاحظة حول الاختبارات:** جميع الاختبارات موجودة في مجلد Quiz-app، 48 اختبارًا إجماليًا يحتوي كل منها على ثلاثة أسئلة. وهي متاحة [هنا](https://ff-quizzes.netlify.app/web/) يمكن تشغيل تطبيق الاختبار محليًا أو نشره على Azure؛ اتبع التعليمات في مجلد `quiz-app`. +> **ملاحظة حول الاختبارات**: جميع الاختبارات موجودة في مجلد Quiz-app، هناك 48 اختبارًا بإجمالي ثلاث أسئلة لكل اختبار. متاحة [هنا](https://ff-quizzes.netlify.app/web/) كما يمكن تشغيل تطبيق الاختبار محلياً أو نشره على Azure؛ اتبع التعليمات في مجلد `quiz-app`. ## 🗃️ الدروس -| | اسم المشروع | المفاهيم المطروحة | أهداف التعلم | الدرس المرتبط | المؤلف | +| | اسم المشروع | المفاهيم التي يتم تدريسها | الأهداف التعليمية | الدرس المرتبط | المؤلف | | :-: | :------------------------------------------------------: | :--------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | -| 01 | البداية | مقدمة في البرمجة وأدوات العمل | تعلم الأساسيات التي تقوم عليها معظم لغات البرمجة وعن البرامج التي تساعد المطورين المحترفين على أداء مهامهم | [مقدمة في لغات البرمجة وأدوات العمل](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | -| 02 | البداية | أساسيات GitHub، بما في ذلك العمل مع فريق | كيفية استخدام GitHub في مشروعك، وكيفية التعاون مع الآخرين على قاعدة الشيفرة | [مقدمة إلى GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | -| 03 | البداية | إمكانية الوصول | تعلم أساسيات إمكانية الوصول على الويب | [أساسيات إمكانية الوصول](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | -| 04 | أساسيات JavaScript | أنواع بيانات JavaScript | أساسيات أنواع بيانات JavaScript | [أنواع البيانات](./2-js-basics/1-data-types/README.md) | Jasmine | -| 05 | أساسيات JavaScript | الدوال والطرق | تعلم عن الدوال والطرق لإدارة منطق التطبيق | [الدوال والطرق](./2-js-basics/2-functions-methods/README.md) | Jasmine و Christopher | -| 06 | أساسيات JavaScript | اتخاذ القرارات باستخدام JS | تعلم كيفية إنشاء شروط في الكود باستخدام طرق اتخاذ القرارات | [اتخاذ القرارات](./2-js-basics/3-making-decisions/README.md) | Jasmine | -| 07 | أساسيات JavaScript | المصفوفات والحلقات | العمل مع البيانات باستخدام المصفوفات والحلقات في JavaScript | [المصفوفات والحلقات](./2-js-basics/4-arrays-loops/README.md) | Jasmine | -| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML في التطبيق | بناء الـ HTML لإنشاء تيراريوم عبر الإنترنت، مع التركيز على بناء التخطيط | [مقدمة إلى HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | -| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS في التطبيق | بناء CSS لتصميم التيراريوم عبر الإنترنت، مع التركيز على أساسيات CSS بما في ذلك جعل الصفحة متجاوبة | [مقدمة إلى CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | -| 10 | [Terrarium](./3-terrarium/solution/README.md) | إغلاق JavaScript، التلاعب بـ DOM | بناء JavaScript لجعل التيراريوم يعمل كواجهة سحب وإفلات، مع التركيز على الإغلاق والتلاعب بـ DOM | [إغلاق JavaScript، التلاعب بـ DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | +| 01 | البداية | مقدمة في البرمجة وأدوات المهنة | تعلم الأساسيات التي تقوم عليها معظم لغات البرمجة وبرامج تساعد المطورين المحترفين في عملهم | [مقدمة إلى لغات البرمجة وأدوات المهنة](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | +| 02 | البداية | أساسيات GitHub، تتضمن العمل مع فريق | كيفية استخدام GitHub في مشروعك وكيفية التعاون مع الآخرين في قاعدة الشيفرة | [مقدمة إلى GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | +| 03 | البداية | إمكانية الوصول | تعلم أساسيات إمكانية الوصول على الويب | [أساسيات إمكانية الوصول](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | +| 04 | أساسيات JS | أنواع بيانات JavaScript | أساسيات أنواع بيانات JavaScript | [أنواع البيانات](./2-js-basics/1-data-types/README.md) | Jasmine | +| 05 | أساسيات JS | الدوال والأساليب | تعلم عن الدوال والأساليب لإدارة تدفق منطق التطبيق | [الدوال والأساليب](./2-js-basics/2-functions-methods/README.md) | Jasmine and Christopher | +| 06 | أساسيات JS | اتخاذ القرارات بـ JS | تعلم كيفية إنشاء الشروط في الشيفرة باستخدام أساليب اتخاذ القرار | [اتخاذ القرارات](./2-js-basics/3-making-decisions/README.md) | Jasmine | +| 07 | أساسيات JS | المصفوفات والحلقات | العمل مع البيانات باستخدام المصفوفات والحلقات في JavaScript | [المصفوفات والحلقات](./2-js-basics/4-arrays-loops/README.md) | Jasmine | +| 08 | [التيراريوم](./3-terrarium/solution/README.md) | HTML في التطبيق | بناء HTML لإنشاء تيراريوم إلكتروني، مع التركيز على بناء التخطيط | [مقدمة إلى HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | +| 09 | [التيراريوم](./3-terrarium/solution/README.md) | CSS في التطبيق | بناء CSS لتنسيق التيراريوم الإلكتروني، مع التركيز على أساسيات CSS بما في ذلك جعل الصفحة متجاوبة | [مقدمة إلى CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | +| 10 | [التيراريوم](./3-terrarium/solution/README.md) | إغلاق جافا سكريبت، التلاعب بـ DOM | بناء شيفرة JavaScript لجعل التيراريوم يعمل كواجهة سحب وإفلات، مع التركيز على الإغلاق والتلاعب بـ DOM | [إغلاق JavaScript، التلاعب بـ DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | | 11 | [لعبة الطباعة](./4-typing-game/solution/README.md) | بناء لعبة الطباعة | تعلم كيفية استخدام أحداث لوحة المفاتيح لتحريك منطق تطبيق JavaScript | [البرمجة المعتمدة على الأحداث](./4-typing-game/typing-game/README.md) | Christopher | -| 12 | [امتداد المتصفح الأخضر](./5-browser-extension/solution/README.md) | العمل مع المتصفحات | تعلم كيفية عمل المتصفحات، تاريخها، وكيفية إنشاء أول عناصر لامتداد المتصفح | [حول المتصفحات](./5-browser-extension/1-about-browsers/README.md) | Jen | -| 13 | [امتداد المتصفح الأخضر](./5-browser-extension/solution/README.md) | بناء نموذج، استدعاء API وتخزين المتغيرات في التخزين المحلي | بناء عناصر JavaScript لامتداد المتصفح لاستدعاء API باستخدام متغيرات مخزنة في التخزين المحلي | [واجهات برمجة التطبيقات، النماذج، والتخزين المحلي](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | -| 14 | [امتداد المتصفح الأخضر](./5-browser-extension/solution/README.md) | عمليات الخلفية في المتصفح، أداء الويب | استخدام عمليات الخلفية في المتصفح لإدارة أيقونة الامتداد؛ تعلم عن أداء الويب وبعض التحسينات لتحقيق الأداء الأفضل | [مهام الخلفية والأداء](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | -| 15 | [لعبة الفضاء](./6-space-game/solution/README.md) | تطوير ألعاب متقدم باستخدام JavaScript | تعلم عن الوراثة باستخدام كل من الفئات والتكوين ونمط النشر/الاشتراك، تحضيرًا لبناء لعبة | [مقدمة لتطوير الألعاب المتقدمة](./6-space-game/1-introduction/README.md) | Chris | -| 16 | [لعبة الفضاء](./6-space-game/solution/README.md) | الرسم على اللوحة | تعلم عن واجهة برمجة تطبيقات Canvas، المستخدمة لرسم العناصر على الشاشة | [الرسم على اللوحة](./6-space-game/2-drawing-to-canvas/README.md) | Chris | -| 17 | [لعبة الفضاء](./6-space-game/solution/README.md) | تحريك العناصر على الشاشة | اكتشف كيف يمكن للعناصر أن تتحرك باستخدام الإحداثيات الكارتيزية وواجهة برمجة تطبيقات Canvas | [تحريك العناصر](./6-space-game/3-moving-elements-around/README.md) | Chris | -| 18 | [لعبة الفضاء](./6-space-game/solution/README.md) | كشف التصادم | جعل العناصر تصطدم وتتفاعل مع بعضها باستخدام ضغطات المفاتيح وتوفير دالة تبريد لضمان أداء اللعبة | [كشف التصادم](./6-space-game/4-collision-detection/README.md) | Chris | -| 19 | [لعبة الفضاء](./6-space-game/solution/README.md) | تتبع النقاط | إجراء حسابات رياضية بناءً على حالة وأداء اللعبة | [تتبع النقاط](./6-space-game/5-keeping-score/README.md) | Chris | -| 20 | [لعبة الفضاء](./6-space-game/solution/README.md) | إنهاء وإعادة تشغيل اللعبة | تعلم عن إنهاء وإعادة تشغيل اللعبة، بما في ذلك تنظيف الموارد وإعادة تعيين قيم المتغيرات | [شروط الانتهاء](./6-space-game/6-end-condition/README.md) | Chris | -| 21 | [تطبيق المصرف](./7-bank-project/solution/README.md) | قوالب HTML والمسارات في تطبيق ويب | تعلم كيفية إنشاء هيكل موقع متعدد الصفحات باستخدام التوجيه وقوالب HTML | [قوالب HTML والمسارات](./7-bank-project/1-template-route/README.md) | Yohan | -| 22 | [تطبيق المصرف](./7-bank-project/solution/README.md) | بناء نموذج للدخول والتسجيل | تعلم كيفية بناء النماذج والتعامل مع روتين التحقق | [النماذج](./7-bank-project/2-forms/README.md) | Yohan | -| 23 | [تطبيق المصرف](./7-bank-project/solution/README.md) | طرق جلب واستخدام البيانات | كيف تتدفق البيانات في تطبيقك وخارجه، كيفية جلبها وتخزينها والتخلص منها | [البيانات](./7-bank-project/3-data/README.md) | Yohan | -| 24 | [تطبيق المصرف](./7-bank-project/solution/README.md) | مفاهيم إدارة الحالة | تعلم كيفية احتفاظ تطبيقك بالحالة وكيفية إدارتها برمجيًا | [إدارة الحالة](./7-bank-project/4-state-management/README.md) | Yohan | -| 25 | [كود المتصفح/VSCode](../../8-code-editor) | العمل مع VScode | تعلم كيفية استخدام محرر الكود | [استخدام محرر VSCode](./8-code-editor/1-using-a-code-editor/README.md) | Chris | -| 26 | [المساعدون الذكيون](./9-chat-project/README.md) | العمل مع الذكاء الاصطناعي | تعلم كيفية بناء مساعدك الذكي الخاص | [مشروع المساعد الذكي](./9-chat-project/README.md) | Chris | - -## 🏫 المنهجية التعليمية - -تم تصميم منهجنا مع مبادئ تعليمية رئيسية: -* التعلم القائم على المشاريع +| 12 | [امتداد المتصفح الأخضر](./5-browser-extension/solution/README.md) | العمل مع المتصفحات | تعلم كيف تعمل المتصفحات، تاريخها، وكيفية إنشاء العناصر الأولى لامتداد متصفح | [حول المتصفحات](./5-browser-extension/1-about-browsers/README.md) | Jen | +| 13 | [امتداد المتصفح الأخضر](./5-browser-extension/solution/README.md) | بناء نموذج، استدعاء API وتخزين المتغيرات في التخزين المحلي | بناء عناصر JavaScript لامتداد المتصفح لاستدعاء API باستخدام المتغيرات المخزنة في التخزين المحلي | [APIs، النماذج، والتخزين المحلي](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | +| 14 | [امتداد المتصفح الأخضر](./5-browser-extension/solution/README.md) | العمليات الخلفية في المتصفح، أداء الويب | استخدام عمليات المتصفح الخلفية لإدارة أيقونة الامتداد؛ تعلّم عن أداء الويب وبعض التحسينات لتحقيق أداء أفضل | [المهام الخلفية والأداء](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | +| 15 | [لعبة الفضاء](./6-space-game/solution/README.md) | تطوير ألعاب متقدم أكثر باستخدام JavaScript | تعلّم عن الوراثة باستخدام الفئات والتكوين ونمط النشر/الاشتراك، استعدادًا لبناء لعبة | [مقدمة لتطوير الألعاب المتقدم](./6-space-game/1-introduction/README.md) | Chris | +| 16 | [لعبة الفضاء](./6-space-game/solution/README.md) | الرسم على اللوحة | تعلّم عن واجهة برمجة تطبيق Canvas، المستخدمة للرسم على الشاشة | [الرسم على اللوحة](./6-space-game/2-drawing-to-canvas/README.md) | Chris | +| 17 | [لعبة الفضاء](./6-space-game/solution/README.md) | تحريك العناصر حول الشاشة | اكتشف كيف يمكن للعناصر أن تكتسب الحركة باستخدام الإحداثيات الديكارتية وواجهة برمجة Canvas | [تحريك العناصر](./6-space-game/3-moving-elements-around/README.md) | Chris | +| 18 | [لعبة الفضاء](./6-space-game/solution/README.md) | كشف التصادم | جعل العناصر تتصادم وتتفاعل مع بعضها باستخدام ضغطات المفاتيح وتوفير وظيفة تبريد لضمان أداء اللعبة | [كشف التصادم](./6-space-game/4-collision-detection/README.md) | Chris | +| 19 | [لعبة الفضاء](./6-space-game/solution/README.md) | حساب النقاط | إجراء حسابات رياضية بناءً على حالة اللعبة وأدائها | [حساب النقاط](./6-space-game/5-keeping-score/README.md) | Chris | +| 20 | [لعبة الفضاء](./6-space-game/solution/README.md) | إنهاء وإعادة تشغيل اللعبة | تعلم عن إنهاء اللعبة وإعادة تشغيلها، بما في ذلك تنظيف الموارد وإعادة تعيين قيم المتغيرات | [شرط النهاية](./6-space-game/6-end-condition/README.md) | Chris | +| 21 | [تطبيق البنك](./7-bank-project/solution/README.md) | قوالب HTML والمسارات في تطبيق ويب | تعلم كيفية إنشاء هيكل موقع متعدد الصفحات باستخدام التوجيه وقوالب HTML | [قوالب HTML والمسارات](./7-bank-project/1-template-route/README.md) | Yohan | +| 22 | [تطبيق البنك](./7-bank-project/solution/README.md) | بناء نموذج تسجيل دخول وتسجيل مستخدم | تعلم بناء النماذج وتعامل مع عمليات التحقق من الصحة | [النماذج](./7-bank-project/2-forms/README.md) | Yohan | +| 23 | [تطبيق البنك](./7-bank-project/solution/README.md) | طرق جلب واستخدام البيانات | كيف تتدفق البيانات داخل وخارج تطبيقك، وكيفية جلبها وتخزينها والتخلص منها | [البيانات](./7-bank-project/3-data/README.md) | Yohan | +| 24 | [تطبيق البنك](./7-bank-project/solution/README.md) | مفاهيم إدارة الحالة | تعلم كيف يحتفظ تطبيقك بالحالة وكيفية إدارتها برمجياً | [إدارة الحالة](./7-bank-project/4-state-management/README.md) | Yohan | +| 25 | [متصفح/محرر VScode](../../8-code-editor) | العمل مع VScode | تعلم كيفية استخدام محرر الشيفرة| [استخدام محرر VScode](./8-code-editor/1-using-a-code-editor/README.md) | Chris | +| 26 | [مساعدي الذكاء الاصطناعي](./9-chat-project/README.md) | العمل مع الذكاء الاصطناعي | تعلم كيفية بناء مساعد الذكاء الاصطناعي الخاص بك | [مشروع مساعد الذكاء الاصطناعي](./9-chat-project/README.md) | Chris | + +## 🏫 المنهجية التربوية + +تم تصميم منهجنا الدراسي باستخدام مبدأين تربويين رئيسيين في الاعتبار: +* التعلم المبني على المشاريع * الاختبارات المتكررة -البرنامج يعلم أساسيات JavaScript و HTML و CSS، بالإضافة إلى أحدث الأدوات والتقنيات التي يستخدمها مطورو الويب اليوم. سيتمكن الطلاب من اكتساب خبرة عملية من خلال بناء لعبة طباعة، تيراريوم افتراضي، امتداد متصفح صديق للبيئة، لعبة بأسلوب غزاة الفضاء، وتطبيق مصرفي للأعمال. بحلول نهاية السلسلة، سيكون لدى الطلاب فهم قوي لتطوير الويب. +يقوم البرنامج بتدريس أساسيات JavaScript و HTML و CSS، بالإضافة إلى أحدث الأدوات والتقنيات التي يستخدمها مطورو الويب اليوم. سوف تتاح للطلاب الفرصة لاكتساب خبرة عملية من خلال بناء لعبة طباعة، تيراريوم افتراضي، امتداد متصفح صديق للبيئة، لعبة بأسلوب غزاة الفضاء، وتطبيق بنكي للأعمال. مع نهاية السلسلة، سيكون لدى الطلاب فهم قوي لتطوير الويب. -> 🎓 يمكنك أخذ الدروس الأولى في هذا المنهج كـ [مسار تعلّم](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) على Microsoft Learn! +> 🎓 يمكنك أخذ الدروس القليلة الأولى في هذا المنهج كـ [مسار تعلّم](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) على منصة Microsoft Learn! -من خلال ضمان تطابق المحتوى مع المشاريع، يصبح التعلم أكثر متعة للطلاب ويزداد تثبيت المفاهيم. كما كتبنا عدة دروس تمهيدية في أساسيات JavaScript لتقديم المفاهيم، مع فيديو من مجموعة "[سلسلة المبتدئين إلى: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" لتعليم الفيديو، بعض مؤلفيها ساهموا في هذا المنهج. +من خلال ضمان أن المحتوى يتماشى مع المشاريع، يصبح التعلم أكثر جاذبية للطلاب ويزيد من ترسيخ المفاهيم. لقد كتبنا أيضًا عدة دروس تمهيدية في أساسيات JavaScript لتقديم المفاهيم، مرفقة بفيديو من سلسلة "[سلسلة للمبتدئين إلى: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" لتعليم الفيديو، ساهم بعض مؤلفيها في هذا المنهج. -بالإضافة إلى ذلك، اختبار منخفض المخاطر قبل الدرس يهيئ نية الطالب لتعلم موضوع معين، في حين يضمن اختبار ثاني بعد الدرس مزيدًا من التثبيت. تم تصميم هذا المنهج ليكون مرنًا وممتعًا ويمكن أخذه كاملاً أو جزئيًا. تبدأ المشاريع صغيرة وتزداد تعقيدًا بنهاية دورة الـ 12 أسبوعًا. +بالإضافة إلى ذلك، يحدد اختبار منخفض المخاطر قبل الدرس نية الطالب نحو تعلم موضوع ما، بينما يضمن اختبار ثاني بعد الدرس المزيد من الاحتفاظ بالمعلومات. تم تصميم هذا المنهج ليكون مرنًا وممتعًا ويمكن أخذه بالكامل أو جزئيًا. تبدأ المشاريع صغيرة وتزداد تعقيدًا تدريجياً بنهاية دورة الـ 12 أسبوعًا. -على الرغم من أننا تجنبنا عمدًا تقديم أُطُر JavaScript للتركيز على المهارات الأساسية اللازمة كمطور ويب قبل تبني أُطر، فإن الخطوة التالية الجيدة لإكمال هذا المنهج هي تعلم Node.js عبر مجموعة أخرى من الفيديوهات: "[سلسلة المبتدئين إلى: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". +بينما تجنبنا عمدًا إدخال أُطُر JavaScript للتركيز على المهارات الأساسية المطلوبة كمطور ويب قبل اعتماد إطار عمل، فإن الخطوة التالية الجيدة لإكمال هذا المنهج هي تعلم عن Node.js عبر مجموعة أخرى من مقاطع الفيديو: "[سلسلة للمبتدئين إلى: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". -> قم بزيارة [مدونة السلوك](CODE_OF_CONDUCT.md) و[إرشادات المساهمة](CONTRIBUTING.md). نرحب بملاحظاتك البناءة! +> قم بزيارة [مدونة السلوك](CODE_OF_CONDUCT.md) وإرشادات [المساهمة](CONTRIBUTING.md) الخاصة بنا. نحن نرحب بتعليقاتك البناءة! -## 🧭 الوصول بدون اتصال -يمكنك تشغيل هذه الوثائق بدون اتصال باستخدام [Docsify](https://docsify.js.org/#/). قم بتفريع هذا المستودع، [تثبيت Docsify](https://docsify.js.org/#/quickstart) على جهازك المحلي، ثم في المجلد الجذر لهذا المستودع، اكتب `docsify serve`. سيتم تقديم الموقع على المنفذ 3000 على الوجهة المحلية الخاصة بك: `localhost:3000`. +## 🧭 الوصول دون اتصال -## 📘 PDF +يمكنك تشغيل هذه الوثائق دون اتصال بالإنترنت باستخدام [Docsify](https://docsify.js.org/#/). قم بتفريع هذا المستودع، [تثبيت Docsify](https://docsify.js.org/#/quickstart) على جهازك المحلي، ثم في المجلد الجذري لهذا المستودع، اكتب `docsify serve`. سيتم تقديم الموقع على المنفذ 3000 على جهازك المحلي: `localhost:3000`. +## 📘 PDF يمكن العثور على ملف PDF لجميع الدروس [هنا](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). ## 🎒 دورات أخرى -فريقنا ينتج دورات أخرى! تحقق من: + +يقوم فريقنا بإنتاج دورات أخرى! تحقق من: ### LangChain -[![LangChain4j للمبتدئين](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners) -[![LangChain.js للمبتدئين](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin) -[![LangChain للمبتدئين](https://img.shields.io/badge/LangChain%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin) +[![LangChain4j for Beginners](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners) +[![LangChain.js for Beginners](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin) +[![LangChain for Beginners](https://img.shields.io/badge/LangChain%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin) --- ### Azure / Edge / MCP / Agents -[![AZD للمبتدئين](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) -[![Edge AI للمبتدئين](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) -[![MCP للمبتدئين](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) -[![وكلاء الذكاء الاصطناعي للمبتدئين](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) +[![AZD for Beginners](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Edge AI for Beginners](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![MCP for Beginners](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) +[![AI Agents for Beginners](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) --- ### سلسلة الذكاء الاصطناعي التوليدي -[![الذكاء الاصطناعي التوليدي للمبتدئين](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) -[![الذكاء الاصطناعي التوليدي (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) -[![الذكاء الاصطناعي التوليدي (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) -[![الذكاء الاصطناعي التوليدي (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) +[![Generative AI for Beginners](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Generative AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) +[![Generative AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) +[![Generative AI (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) --- -### التعلم الأساسي -[![تعلم الآلة للمبتدئين](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) -[![علم البيانات للمبتدئين](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) -[![الذكاء الاصطناعي للمبتدئين](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) -[![الأمن السيبراني للمبتدئين](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) -[![تطوير الويب للمبتدئين](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) -[![إنترنت الأشياء للمبتدئين](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) -[![تطوير XR للمبتدئين](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +### التعليم الأساسي +[![ML for Beginners](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) +[![Data Science for Beginners](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +[![AI for Beginners](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +[![Cybersecurity for Beginners](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) +[![Web Dev for Beginners](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) +[![IoT for Beginners](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) +[![XR Development for Beginners](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) --- -### سلسلة كوبايلوت -[![كوبايلوت للبرمجة الزوجية بالذكاء الاصطناعي](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) -[![كوبايلوت لـ C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) -[![مغامرة كوبايلوت](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) +### سلسلة الكوبيلوت +[![Copilot for AI Paired Programming](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) +[![Copilot for C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) +[![Copilot Adventure](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) ## الحصول على المساعدة -إذا واجهت صعوبة أو كان لديك أي أسئلة حول بناء تطبيقات الذكاء الاصطناعي. انضم إلى المتعلمين الآخرين والمطورين ذوي الخبرة في مناقشات حول MCP. إنها مجتمع داعم حيث تُرحب بالأسئلة ويُشارك المعرفة بحرية. +إذا واجهت صعوبة أو كان لديك أي أسئلة حول بناء تطبيقات الذكاء الاصطناعي. انضم إلى المتعلمين والمطورين ذوي الخبرة في مناقشات حول MCP. إنها مجتمع داعم حيث الأسئلة مرحب بها والمعرفة تُشارك بحرية. [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -إذا كان لديك ملاحظات على المنتج أو أخطاء أثناء البناء قم بزيارة: +إذا كان لديك ملاحظات على المنتج أو أخطاء أثناء البناء، قم بزيارة: [![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum) ## الترخيص -هذا المستودع مرخص برخصة MIT. راجع ملف [LICENSE](../../LICENSE) لمزيد من المعلومات. +يتم ترخيص هذا المستودع بموجب ترخيص MIT. راجع ملف [LICENSE](../../LICENSE) لمزيد من المعلومات. --- -**تنويه**: -تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لضمان الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار النسخة الأصلية من المستند بلغتها الأصلية المصدر الرسمي والموثوق. بالنسبة للمعلومات الهامة، يُنصح بالاعتماد على الترجمة البشرية المهنية. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة. +**إخلاء المسؤولية**: +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي والمعتمد. للمعلومات الحرجة، يُنصح بالترجمة المهنية البشرية. نحن غير مسؤولين عن أي سوء فهم أو تفسير ناتج عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/bg/.co-op-translator.json b/translations/bg/.co-op-translator.json index 1b98fe002..3a89d3b89 100644 --- a/translations/bg/.co-op-translator.json +++ b/translations/bg/.co-op-translator.json @@ -1,7 +1,7 @@ { "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { - "original_hash": "d45ddcc54eb9232a76d08328b09d792e", - "translation_date": "2026-01-07T07:25:11+00:00", + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T13:30:36+00:00", "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", "language_code": "bg" }, @@ -493,7 +493,7 @@ }, "AGENTS.md": { "original_hash": "a362efd06d64d4134a0cfe8515a86d34", - "translation_date": "2026-02-06T18:32:22+00:00", + "translation_date": "2026-03-06T13:34:01+00:00", "source_file": "AGENTS.md", "language_code": "bg" }, @@ -516,8 +516,8 @@ "language_code": "bg" }, "README.md": { - "original_hash": "6d6385fd098088cb2d690fb0a6cdaedc", - "translation_date": "2026-02-06T18:25:04+00:00", + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T13:26:07+00:00", "source_file": "README.md", "language_code": "bg" }, diff --git a/translations/bg/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/bg/1-getting-started-lessons/1-intro-to-programming-languages/README.md index 78518476f..12c217299 100644 --- a/translations/bg/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/bg/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,97 +1,97 @@ -# Въведение в програмен език и съвременни инструменти за разработчици +# Въведение в програмирането и съвременните инструменти за разработчици -Здрасти, бъдещ разработчик! 👋 Мога ли да ти разкажа нещо, което всеки ден ми надава тръпки? Ти си на прага да откриеш, че програмирането не е просто за компютри – то е за това да имаш истински суперсили, с които да оживяваш най-дивите си идеи! +Здравей, бъдещ разработчик! 👋 Мога ли да ти кажа нещо, което всеки ден ме кара да се възхищавам? Ти си на път да откриеш, че програмирането не е просто за компютри – то е истинска суперсила, с която можеш да оживиш най-смелите си идеи! -Знаеш ли онзи момент, когато използваш любимото си приложение и всичко просто пасва перфектно? Когато натиснеш бутон и се случва нещо абсолютно магическо, което те кара да се чудиш: "Уау, как ТЕ го направиха?" Е, някой точно като теб – вероятно седнал в любимото си кафе в 2 през нощта с третото си еспресо – е написал кода, който създаде тази магия. И ето какво ще те изуми: в края на този урок не само ще разбереш как са го направили, но и ще гориш от желание да пробваш сам! +Знаеш ли онзи момент, когато използваш любимото си приложение и всичко просто се нарежда перфектно? Когато натиснеш бутон и се случва нещо напълно магично, което те кара да кажеш "уау, как го направиха?" Е, някой точно като теб – вероятно седнал в любимо кафене в 2 сутринта с третото си еспресо – е написал кода, който е създал тази магия. И ето кое ще те удиви: в края на този урок не само ще разбереш как го направиха, а и ще умираш от желание да опиташ сам! -Виж, разбирам напълно, ако програмирането ти изглежда страшно сега. Когато започвах, честно казано си мислех, че трябва да си някакъв математически гений или да си кодил от петгодишен. Но ето какво напълно промени гледната ми точка: програмирането е точно като да се научиш да водиш разговор на нов език. Започваш с "здравей" и "благодаря", после стигаш до поръчване на кафе, а преди да се усетиш вече водиш дълбоки философски дискусии! Освен че в този случай разговаряш с компютри, и честно? Те са най-търпеливите събеседници, които някога ще срещнеш – никога не съдят грешките ти и винаги с ентусиазъм приемат да опитат отново! +Разбирам те напълно, ако програмирането ти се струва страшно сега. Когато започвах, честно си мислех, че трябва да си някакъв математически гений или да кодиш от 5-годишен. Но ето кое изцяло промени гледната ми точка: програмирането е точно като учене да водиш разговор на нов език. Започваш с "здравей" и "благодаря", после поръчваш кафе, и преди да осъзнаеш, водиш дълбоки философски дискусии! Само че в този случай разговаряш с компютри, и честно? Те са най-търпеливите събеседници, които някога ще срещнеш – никога не те осъждат за грешките и винаги са готови да опитат отново! -Днес ще разгледаме невероятните инструменти, които правят съвременното уеб разработване не само възможно, но и наистина пристрастяващо. Говоря за същите редактори, браузъри и работни процеси, които разработчиците в Netflix, Spotify и любимото ти инди студио използват всеки ден. И ето и частта, която ще те накара да се зарадваш: повечето от тези професионални, индустриални инструменти са напълно безплатни! +Днес ще разгледаме невероятните инструменти, които правят съвременното уеб разработване не просто възможно, а направо пристрастяващо. Говоря за точно същите редактори, браузъри и работни процеси, които използват разработчиците в Netflix, Spotify и любимите ти независими студиа всеки ден. И ето какво ще те зарадва: повечето от тези професионални, индустриални инструменти са напълно безплатни! ![Intro Programming](../../../../translated_images/bg/webdev101-programming.d6e3f98e61ac4bff.webp) > Скетчноут от [Tomomi Imura](https://twitter.com/girlie_mac) ```mermaid journey - title Вашето Програмиране Днес + title Вашето програмиране днес section Открийте - Какво е Програмиране: 5: You - Езиците за Програмиране: 4: You - Преглед на Инструментите: 5: You + Какво е програмиране: 5: You + Езици за програмиране: 4: You + Преглед на инструментите: 5: You section Изследвайте - Редактори на Код: 4: You - Браузъри и Инструменти за Разработчици: 5: You - Команден Ред: 3: You + Редактори на код: 4: You + Браузъри и инструменти за разработчици: 5: You + Команден ред: 3: You section Практика - Детектив на Езици: 4: You - Изследване на Инструменти: 5: You - Свързване с Общността: 5: You + Езиков детектив: 4: You + Изследване на инструменти: 5: You + Общностна връзка: 5: You ``` -## Да видим какво вече знаеш! +## Нека видим какво вече знаеш! -Преди да се хвърлим в забавните неща, любопитно ми е – какво вече знаеш за този програмен свят? И слушай, ако гледаш тези въпроси и мислиш "Аз нямам абсолютно никаква представа за нищо от това," това не е просто окей, а направо перфектно! Значи си на правилното място. Помисли за този тест като за разтягане преди тренировка – едва загряваме мозъчните мускули! +Преди да се потопим в забавните неща, любопитен съм – какво вече знаеш за този свят на програмирането? И слушай, ако гледаш тези въпроси и си мислиш "Честно нямам никаква идея за това," това не само че е окей, това е перфектно! Това означава, че си на точното място. Помисли за този тест като за разтягане преди тренировка – просто затопляме мозъчните си мускули! -[Вземи теста преди урока](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) +[Направи предварителния тест](https://ff-quizzes.netlify.app/web/) -## Приключението, на което ще тръгнем заедно +## Приключението, на което сме се отправили заедно -Окей, сериозно съм супер развълнуван от това, което ще изследваме днес! Наистина, искам да видя лицето ти, когато някои от тези концепции изведнъж "кликнат". Ето какво невероятно пътешествие ни очаква заедно: +Добре, истински се вълнувам от това, което ще изследваме днес! Сериозно, искам да видя лицето ти, когато някои от тези концепции ти „светнат“. Ето невероятното пътуване, на което сме заедно: -- **Какво всъщност е програмирането (и защо е най-готиното нещо някога!)** – Ще разберем как кодът буквално е невидимата магия, която движи всичко около теб – от алармата, която някак разбира, че е понеделник сутрин, до алгоритъма, който перфектно селектира препоръките ти в Netflix -- **Програмен език и техните удивителни личности** – Представи си, че влизаш на парти, където всеки човек има съвсем различни суперсили и начини да решава проблеми. Това е светът на програмните езици, и ти ще обикнеш да ги срещаш! -- **Основните градивни блокчета, които правят дигиталната магия възможна** – Мисли ги като най-ултимативния креативен комплект LEGO. След като разбереш как се съчетават тези части, осъзнаваш, че можеш буквално да построиш всичко, за което мечтае въображението ти -- **Професионални инструменти, които ще те накарат да се чувстваш сякаш току-що са ти дали вълшебна пръчка** – Не преувеличавам – тези инструменти наистина ще те накарат да се почувстваш като че имаш суперсили, а най-хубавото? Това са същите, които професионалистите използват! +- **Какво всъщност е програмирането (и защо е най-якото нещо на света!)** – Ще открием как кодът е невидимата магия, която управлява всичко около теб, от алармата, която някак си знае, че е понеделник сутрин, до алгоритъма, който перфектно съставя препоръките ти в Netflix +- **Програмените езици и техните страхотни индивидуалности** – Представи си парти, където всеки човек има различни суперсили и начини за решаване на проблеми. Това е светът на програмените езици и ти ще се влюбиш в тях! +- **Основните градивни блокове, които създават цифровата магия** – Помисли за тях като за върховния творчески комплект LEGO. След като разбереш как тези части се съчетават, ще осъзнаеш, че можеш да построиш буквално всичко, което въображението ти пожелае +- **Професионални инструменти, които ще те накарат да се почувстваш като магьосник с пръчка** – Не преувеличавам – тези инструменти наистина ще ти дадат усещането за суперсили, а най-хубавото? Те са същите, които професионалистите използват! -> 💡 **Ето нещо:** Не мисли въобще да се опитваш да запомниш всичко днес! Сега искам просто да усетиш искрата на вълнението за това, което е възможно. Детайлите ще се залепят естествено, докато практикуваме заедно – така се случва истинското учене! +> 💡 **Ето нещо важно**: Не мисли днес да запаметяваш всичко! Сега искам просто да усетиш искрата на възможностите. Подробностите ще дойдат естествено с практиката – така става истинското учене! -> Можеш да направиш този урок и на [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! +> Можеш да преминеш този урок и в [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! -## Какво всъщност *е* програмирането? +## Така, какво точно е *програмирането*? -Добре, нека се заемем с въпроса за милиони долари: какво всъщност е програмирането? +Добре, нека се заемем с милионния въпрос: какво всъщност е програмирането? -Ще ти разкажа история, която напълно промени гледната ми точка. Миналата седмица се опитвах да обясня на майка си как да използва дистанционното на нашия нов умен телевизор. Хванах се как казвам неща като "Натисни червения бутон, но не големия червен бутон, а малкия червен бутон отляво... не, другата ти лява... окей, сега го задръж за две секунди, не за една, не за три..." Звучи ли ти познато? 😅 +Ще ти разкажа история, която напълно промени начина, по който мисля за това. Миналата седмица се опитвах да обясня на мама как да използва новото дистанционно на умния ни телевизор. Хванах се да казвам неща като „Натисни червения бутон, но не големия червен бутон, а малкия червен отляво... не, другото ти ляво... добре, сега задръж го за две секунди, не за една, не за три..." Звучи ли ти познато? 😅 -Това е програмиране! То е изкуството да даваш изключително подробни, стъпка по стъпка инструкции на нещо много мощно, но което трябва всичко да му се изясни много точно. Освен че вместо да обясняваш на майка си (която може да попита "кой червен бутон?!"), ти обясняваш на компютър (който просто прави точно това, което му кажеш, дори и да не е съвсем това, което си имал предвид). +Ето това е програмиране! Изкуството да даваш изключително подробни, стъпка по стъпка инструкции на нещо много мощно, но което трябва всичко да му се обясни перфектно. Само че вместо да обясняваш на мама (която може да попита "кой червен бутон?!"), ти обясняваш на компютър (който просто прави точно това, което му кажеш, дори и да не е точно това, което си имал предвид). -Ето какво ме изуми, когато за първи път научих това: компютрите са всъщност доста прости по своята същност. Те разбират буквално само две неща – 1 и 0, което е просто "да" и "не" или "вкл." и "изкл." Това е! Но тук идва магията – не трябва да говорим само на 1 и 0, като в Матрицата. Тук на помощ идват **програмените езици**. Те са като най-добрия преводач в света, който взема твоите напълно нормални човешки мисли и ги превръща в компютърен език. +Това, което ме порази, когато научих това за първи път: компютрите всъщност са сравнително прости по своята същност. Те разбират буквално две неща – 1 и 0, което е просто „да“ и „не“ или „включено“ и „изключено“. Това е всичко! Но тук идва магията – не е нужно да говорим на 1 и 0 като в Матрицата. Тогава на помощ идват **програмените езици**. Те са като най-добрия преводач в света, който взима твоите нормални човешки мисли и ги превръща в компютърен език. -И ето какво все още ми дава истински тръпки всяка сутрин, когато се събудя: буквално *всичко* цифрово в живота ти е започнало с някой като теб, вероятно в пижама с чаша кафе, клавиатурно кодиращ на лаптопа си. Този Instagram филтър, който те кара да изглеждаш безупречен? Някой го е програмирал. Препоръката, която те доведе до новата ти любима песен? Алгоритъм, създаден от разработчик. Приложението, което ти помага да делите сметките с приятели? Да, някой е казал "Това е дразнещо, сигурен съм, че мога да го оправя" и го е направил! +И ето кое все още ме кара да се възхищавам всяка сутрин, когато се събудя: буквално *всичко* цифрово в живота ти е започнало от някой като теб, вероятно седнал в пижамата си с чаша кафе и пишещ код на лаптопа си. Онзи филтър в Instagram, който те прави безупречен? Някой го е кодирал. Препоръката, която те доведе до новата ти любима песен? Разработчик е създал този алгоритъм. Приложението, което ти помага да разделиш сметката за вечерята с приятели? Да, някой е мислел „колко дразнещо е това, мога ли да го оправя?“ и го е направил! -Когато научиш програмиране, не просто придобиваш ново умение – ти ставаш част от тази невероятна общност от решавачи на проблеми, които прекарват дните си, питащи се: "Какво ще стане, ако мога да създам нещо, което прави нечий ден малко по-добър?" Честно казано, има ли нещо по-готино от това? +Когато научиш как да програмираш, ти не просто придобиваш ново умение – ставаш част от невероятна общност от решаващи проблеми, които посвещават дните си на мисълта „Ами ако мога да създам нещо, което прави деня на някого малко по-добър?“ Честно, има ли нещо по-яко от това? -✅ **Забавно търсене на факт:** Ето нещо супер интересно, което да провериш, когато имаш време – кой мислиш, че е първият програмист в света? Ще ти дам подсказка: може да не е този, когото очакваш! Историята за този човек е абсолютно завладяваща и показва, че програмирането винаги е било за креативно решаване на проблеми и мислене извън рамките. +✅ **Забавен факт:** Ето нещо супер интересно, което можеш да потърсиш, когато имаш свободно време – кой мислиш, че е бил първият компютърен програмист в света? Ще ти дам намек: може би не е този, когото очакваш! Историята зад този човек е абсолютно завладяваща и показва, че програмирането винаги е било за творческо решаване на проблеми и мислене извън рамките. ### 🧠 **Време за проверка: Как се чувстваш?** -**Отдели момент за размисъл:** -- Стана ли ти ясно какво значи "даваш инструкции на компютрите"? +**Отдели малко време за размисъл:** +- Сега разбра ли идеята за „даване на инструкции на компютри“? - Можеш ли да се сетиш за ежедневна задача, която би искал да автоматизираш с програмиране? -- Какви въпроси ти идват на ум за цялата тази работа с програмирането? +- Какви въпроси ти се въртят в главата за цялото това програмиране? -> **Помни:** Напълно нормално е някои концепции да ти изглеждат размити в момента. Учението на програмиране е като учене на нов език – отнема време на мозъка да изгради тези невронни пътеки. Ти се справяш страхотно! +> **Запомни**: Напълно нормално е някои концепции да ти се струват размити сега. Учението на програмиране е като учене на нов език – отнема време мозъкът ти да изгражда тези невронни връзки. Правиш го страхотно! -## Програмен език е като различни вкусове магия +## Програмените езици са като различни вкусове магия -Окей, това ще ти прозвучи странно, но остани с мен – програмените езици са много като различни музикални стилове. Помисли: имаш джаз, който е плавен и импровизационен, рок, който е мощен и директен, класическа музика, която е елегантна и структурирана, и хип-хоп, който е креативен и експресивен. Всеки стил има своя вибрация, своя общност от страстни фенове, и всеки е идеален за различни настроения и случаи. +Добре, това може да звучи странно, но остани с мен – програмените езици са като различните видове музика. Помисли: има джаз, който е плавен и импровизационен, рок – мощен и директен, класическа музика – елегантна и структурирана, и хип-хоп – креативен и изразителен. Всяко течение има своя атмосфера, своя общност от страстни фенове и всяко е идеално за различни настроения и поводи. -Програмените езици работят по същия начин! Не би използвал един и същ език да създадеш забавна мобилна игра, който би използвал за обработка на огромни количества климатични данни, точно както не би пускал дет метъл на йога клас (поне повечето йога класове! 😄). +Програмените езици работят по същия начин! Не би използвал същия език, за да направиш забавна мобилна игра, която би използвал, за да обработваш огромни масиви климатични данни – точно както не би пускал дет метъл в занятие по йога (поне повечето йога занятия! 😄). -Но ето какво винаги ме изумява: тези езици са като да имаш най-търпеливия, гениален преводач в света, който седи точно до теб. Можеш да изразяваш идеите си по начин, който е естествен за мозъка ти, а те се грижат за целия сложен превод в 1 и 0, на които компютрите всъщност говорят. Просто имаш приятел, който е напълно владеещ и на "човешкото творчество", и на "компютърната логика" – и никога не се уморява, не му трябват почивки за кафе и никога не те съди, ако попиташ два пъти едно и също! +Но ето кое ме учудва всеки път, когато го мисля: тези езици са като най-търпеливия, блестящ преводач в света, който седи до теб. Можеш да изразиш идеите си по начин, който е естествен за човешкия ти мозък, а те се грижат за цялата сложна работа по превръщането им в 1 и 0, на които компютрите говорят. Като приятел, който е безупречно владеещ и „човешко творчество“, и „компютърна логика“ – и никога не се уморява, не пие кафе и не се дразни, ако попиташ същото нещо два пъти! -### Популярни програмни езици и употреби +### Популярни програмни езици и тяхното приложение ```mermaid mindmap - root((Езици за програмиране)) + root((Езикове за програмиране)) Уеб разработка JavaScript - Магия във фронтенд + Фронтенд магия Интерактивни уебсайтове TypeScript - JavaScript + Типове - Предприятия приложения - Данни и ИИ + JavaScript + типове + Корпоративни приложения + Данни и изкуствен интелект Python Наука за данни Машинно обучение @@ -102,59 +102,59 @@ mindmap Мобилни приложения Java Android - Предприятие + Корпоративни Swift iOS - Екосистема на Apple + Еко система на Apple Kotlin Модерен Android - Кръст-платформен + Кросплатформен Системи и производителност C++ Игри - Критично за производителността + Критична производителност Rust Паметна безопасност Системно програмиране Go Облачни услуги - Масшабируем бекенд + Разширяем бекенд ``` | Език | Най-добър за | Защо е популярен | |----------|----------|------------------| -| **JavaScript** | Уеб разработка, потребителски интерфейси | Работи в браузъри и захранва интерактивни уебсайтове | -| **Python** | Наука за данни, автоматизация, ИИ | Лесен за четене и учене, мощни библиотеки | -| **Java** | Предприятия, Android приложения | Независим от платформа, стабилен за големи системи | -| **C#** | Windows приложения, разработка на игри | Силна поддръжка на Microsoft екосистема | -| **Go** | Облачни услуги, бекенд системи | Бърз, прост, създаден за модерни изчисления | +| **JavaScript** | Уеб разработка, потребителски интерфейси | Работи в браузърите и задвижва интерактивни сайтове | +| **Python** | Данни, автоматизация, изкуствен интелект | Лесен за четене и учене, мощни библиотеки | +| **Java** | Корпоративни приложения, Android приложения | Платформено независим, стабилен за големи системи | +| **C#** | Windows приложения, разработка на игри | Силна подкрепа от Microsoft екосистема | +| **Go** | Облачни услуги, бекенд системи | Бърз, прост, създаден за съвременните изчисления | -### Езици от високо ниво срещу ниско ниво +### Езици от високо ниво срещу езици от ниско ниво -Окей, това честно беше концепцията, която ми "счупи" мозъка, когато започнах да уча, затова ще ти споделя аналогията, която най-накрая ми помогна да я разбера – и се надявам да помогне и на теб! +Добре, това беше честно казано концепцията, която ми разбиваше мозъка, когато започвах, затова ще ти разкажа аналогията, която най-накрая го направи ясно – и истински се надявам да ти помогне и на теб! -Представи си, че посещаваш страна, в която не говориш езика и отчаяно трябва да намериш най-близката тоалетна (сигурно сме били там, нали? 😅): +Представи си, че си в държава, в която не говориш езика, и отчаяно трябва да намериш най-близката тоалетна (сигурно сме били в тази ситуация, нали? 😅): -- **Програмиране на ниско ниво** е като да научиш местния диалект толкова добре, че можеш да говориш с бабата, която продава плодове на ъгъла, използвайки културни препратки, местен жаргон и вътрешни шеги, които само някой, израснал там, би разбрал. Супер впечатляващо и невероятно ефективно... ако случайно си владеещ езика! Но доста объркващо, когато просто търсиш тоалетна. +- **Програмирането на ниско ниво** е като да научиш местния диалект толкова добре, че да разговаряш с бабата, която продава плодове на ъгъла, използвайки културни препратки, жаргон и вътрешни вицове, които само местните разбират. Супер впечатляващо и много ефикасно... ако тъкмо говориш езика! Но доста объркващо, когато просто търсиш тоалетна. -- **Програмиране на високо ниво** е като да имаш този невероятен местен приятел, който просто те разбира. Можеш да кажеш "Наистина трябва да намеря тоалетна" на чист английски, а той се занимава с цялата културна интерпретация и ти дава упътвания по начин, който напълно има смисъл за твоя чуждоземен мозък. +- **Програмирането на високо ниво** е като да имаш този невероятен местен приятел, който те разбира. Можеш да кажеш "наистина ми трябва баня" на прост английски, а той превежда всичко и ти дава насока, която ти е ясна, макар и да не говориш местния език. -В програмирането: -- **Езици от ниско ниво** (като Assembly или C) ти позволяват да провеждаш много детайлни разговори с хардуера на компютъра, но трябва да мислиш като машина, което е... добре, голям умствен преход! -- **Езици от високо ниво** (като JavaScript, Python, или C#) ти позволяват да мислиш като човек, докато те вършат цялата машинна работа зад кулисите. Освен това имат толкова приветливи общности, пълни с хора, които помнят какво е да си нов и искрено искат да помогнат! +В термини на програмиране: +- **Езиците от ниско ниво** (като Assembly или C) ти позволяват да имаш невероятно подробни разговори със самия хардуер на компютъра, но трябва да мислиш като машина, което... скажем просто, голяма е умствената промяна! +- **Езиците от високо ниво** (като JavaScript, Python или C#) ти позволяват да мислиш като човек, а те се грижат за всички машинни инструкции зад кулисите. Освен това имат невероятно приветливи общности, пълни с хора, които помнят какво е да си начинаещи и искрено искат да помогнат! -Познай с кои ще ти предложа да започнеш? 😉 Езици от високо ниво са като помощните колелца на колело, които никога всъщност не искаш да свалиш, защото правят цялото изживяване толкова по-приятно! +Угаси се кой ти предлагам да започнеш с? 😉 Езиците от високо ниво са като помощни колелца, които никога наистина не искаш да махнеш, защото целият процес е много по-приятен! ```mermaid flowchart TB - A["👤 Човешка мисъл:
'Искам да изчислявам числа от Фибоначи'"] --> B{Избери ниво на езика} + A["👤 Човешка мисъл:
'Искам да изчисля числата на Фибоначи'"] --> B{Избор на езиково ниво} B -->|Високо ниво| C["🌟 JavaScript/Python
Лесен за четене и писане"] - B -->|Ниско ниво| D["⚙️ Асемблер/C
Директен контрол на хардуера"] + B -->|Ниско ниво| D["⚙️ Асемблер/C
Директен хардуерен контрол"] - C --> E["📝 Напиши: fibonacci(10)"] - D --> F["📝 Напиши: mov r0,#00
sub r0,r0,#01"] + C --> E["📝 Пиши: fibonacci(10)"] + D --> F["📝 Пиши: mov r0,#00
sub r0,r0,#01"] - E --> G["🤖 Компютърно разбиране:
Преводачът се справя със сложността"] + E --> G["🤖 Разбиране от компютър:
Преводачът се грижи за сложността"] F --> G G --> H["💻 Същият резултат:
0, 1, 1, 2, 3, 5, 8, 13..."] @@ -163,15 +163,15 @@ flowchart TB style D fill:#fff3e0 style H fill:#e8f5e8 ``` -### Позволи ми да ти покажа защо езици от високо ниво са толкова по-приятелски настроени +### Нека ти покажа защо езиците от високо ниво са толкова по-приятелски -Добре, ще ти покажа нещо, което перфектно демонстрира защо се влюбих в езиците от високо ниво, но първо – трябва да ми обещаеш нещо. Когато видиш първия пример за код, не се паникьосвай! Той трябва да изглежда страшен. Това е точното послание, което искам да ти предам! +Добре, ще ти покажа нещо, което перфектно демонстрира защо се влюбих в езиците от високо ниво, но първо – обещай ми нещо. Когато видиш първия пример с код, не изпадай в паника! Той е предназначен да изглежда страшен. Точно това е точката ми! -Ще видим един и същи проблем решен по два коренно различни начина. И двата създават така наречената Фибоначи последователност – красива математическа поредица, при която всяко число е сумата от двете предишни: 0, 1, 1, 2, 3, 5, 8, 13... (Забавно: този модел го срещаш буквално навсякъде в природата – спирали на семена от слънчоглед, модели на шишарки, дори начина, по който се образуват галактики!) +Ще разгледаме една и съща задача, написана в два напълно различни стила. И двете създават това, което се нарича Фибоначи последователност – това е този красив математически модел, където всяко число е сумата на предходните две: 0, 1, 1, 2, 3, 5, 8, 13... (Забавен факт: този модел е буквално навсякъде в природата – спирали на слънчогледови семена, модели на шишарки, дори как се формират галактики!) -Готов ли си да видиш разликата? Хайде! +Готов ли си да видиш разликата? Да тръгваме! -**Език от високо ниво (JavaScript) – Човешки приятелски:** +**Език от високо ниво (JavaScript) – Човеколюбив:** ```javascript // Стъпка 1: Основна настройка на Фибоначи @@ -183,10 +183,10 @@ console.log('Fibonacci sequence:'); ``` **Ето какво прави този код:** -- **Декларира** константа, която задава колко Фибоначи числа искаме да генерираме +- **Декларира** константа, която определя колко числа от Фибоначи искаме да генерираме - **Инициализира** две променливи, които следят текущото и следващото число в последователността -- **Задава** началните стойности (0 и 1), които дефинират модела Фибоначи -- **Показва** заглавно съобщение, което идентифицира резултата ни +- **Задава** началните стойности (0 и 1), които определят Фибоначи модела +- **Показва** заглавно съобщение, за да идентифицира изхода ```javascript // Стъпка 2: Генерирайте последователността с цикъл @@ -200,11 +200,11 @@ for (let i = 0; i < fibonacciCount; i++) { } ``` -**Разбивка на това, което се случва тук:** -- **Обхожда** всяка позиция в последователността с помощта на `for` цикъл -- **Показва** всяко число заедно с позицията му, използвайки шаблонно форматиране -- **Изчислява** следващото число във Фибоначи като събира текущото и следващото -- **Обновява** променливите, за да премине към следващата итерация +**Разбивка на случващото се тук:** +- **Обхожда** всяка позиция в последователността чрез цикъл `for` +- **Показва** всяко число с неговата позиция, използвайки шаблонно форматиране +- **Изчислява** следващото число от Фибоначи чрез събирането на текущото и следващото +- **Актуализира** проследяващите променливи, за да премине към следващата итерация ```javascript // Стъпка 3: Модерен функционален подход @@ -218,18 +218,18 @@ const generateFibonacci = (count) => { return sequence; }; -// Пример за употреба +// Пример за използване const fibSequence = generateFibonacci(10); console.log(fibSequence); ``` -**В горния пример ние:** -- **Създадохме** многократно използваща се функция с модерен синтаксис за стрелкови функции -- **Построихме** масив, за да съхраним цялата последователност вместо да показваме числата поединично -- **Използвахме** индексиране на масиви, за да изчислим всяко ново число от предишните стойности -- **Върнахме** цялата последователност за гъвкава употреба в други части на програмата +**В горния код:** +- **Създадохме** многократно използваща се функция с помощта на модерния синтаксис на стрелкова функция +- **Построихме** масив, който съхранява цялата последователност, вместо да показваме числата поотделно +- **Използвахме** индексиране в масива, за да изчислим всяко ново число от предходните стойности +- **Върнахме** цялата последователност за по-гъвкаво използване в други части на програмата -**Език от ниско ниво (ARM Assembly) – Компютърно приятелски:** +**Език от ниско ниво (ARM Assembly) – Подходящ за компютъра:** ```assembly area ascen,code,readonly @@ -256,57 +256,58 @@ back add r0,r1 end ``` -Обърни внимание как версията на JavaScript изглежда почти като инструкции на английски, докато версията на Assembly използва загадъчни команди, които директно контролират процесора на компютъра. И двата изпълняват точно същата задача, но езикът от високо ниво е много по-лесен за разбиране, писане и поддръжка от хората. +Забележи как версията на JavaScript се чете почти като инструкции на английски, докато Assembly версията използва криптични команди, които директно контролират процесора на компютъра. И двете изпълняват същата задача, но езикът от високо ниво е много по-лесен за разбиране, писане и поддръжка от човека. -**Основните разлики, които ще забележиш:** -- **Четливост**: JavaScript използва описателни имена като `fibonacciCount`, докато Assembly използва тайни означения като `r0`, `r1` -- **Коментари**: Високо нивото на езиците насърчава обяснителни коментари, които правят кода самодокументиращ се -- **Структура**: Логическата последователност на JavaScript съвпада с начина, по който хората мислят стъпка по стъпка за проблемите -- **Поддръжка**: Актуализирането на версията на JavaScript за различни изисквания е лесно и ясно +**Ключови разлики, които ще забележиш:** +- **Четимост**: JavaScript използва описателни имена като `fibonacciCount`, докато Assembly използва криптични етикети като `r0`, `r1` +- **Коментари**: Високо ниво езици насърчават обяснителни коментари, които правят кода самодокументиращ се +- **Структура**: Логическият поток на JavaScript съответства на начина, по който хората мислят за проблемите стъпка по стъпка +- **Поддръжка**: Актуализирането на версията на JavaScript за различни изисквания е лесно и ясно -✅ **За последователността на Фибоначи**: Този абсолютно прекрасен числов модел (където всяко число е равно на сумата на двете предишни: 0, 1, 1, 2, 3, 5, 8...) се среща буквално *навсякъде* в природата! Ще го откриете в спиралите на слънчогледите, в моделите на шишарки, начина, по който се извиват мидите на наутилуса и дори в начина, по който растат клоните на дърветата. Наистина е удивително как математиката и кодът ни помагат да разберем и възпроизведем моделите, които природата използва, за да създаде красота! +✅ **За числовата редица на Фибоначи**: Този абсолютно прекрасен числов модел (където всяко число е равна на сумата на двете предишни: 0, 1, 1, 2, 3, 5, 8...) се появява буквално *навсякъде* в природата! Ще го откриете в спиралите на слънчогледите, моделите на шишарки, начина по който се навиват черупките на наутилуса и дори в начина, по който растат клоните на дърветата. Доста е удивително как математиката и кода ни помагат да разберем и пресъздадем моделите, които природата използва, за да създаде красота! -## Строителните елементи, които правят магията възможна -Добре, сега след като видяхте как изглеждат програмните езици в действие, нека разгледаме основните части, които съставляват буквално всяка написана програма. Можете да ги мислите като незаменимите съставки в любимата ви рецепта – след като разберете какво прави всяка една, ще можете да четете и пишете код на почти всеки език! +## Строителните блокове, които правят магията възможна -Това е нещо като изучаването на граматиката на програмирането. Спомняте ли си уроците в училище за съществителните, глаголите и как се съставят изречения? Програмирането има своя собствена граматика и честно казано, тя е много по-логична и по-прощаваща от английската граматика някога! 😄 +Добре, сега когато видяхте как изглеждат програмните езици в действие, нека разгледаме основните части, които изграждат буквално всяка програма някога написана. Представете си ги като съществените съставки във вашата любима рецепта – след като разберете какво прави всяка от тях, ще можете да четете и пишете код почти на всеки език! -### Изрази: Стъпка по стъпка инструкции +Това е като да научите граматиката на програмирането. Помните ли, когато в училище учехте за съществителните, глаголите и как се строят изречения? Програмирането има своя версия на граматиката и, честно казано, тя е много по-логична и прощаваща отколкото английската граматика някога е била! 😄 -Нека започнем с **изразите** – те са като отделни изречения в разговор с вашия компютър. Всеки израз казва на компютъра да направи нещо конкретно, почти като даване на указания: „Завий наляво тук“, „Спри на червената светлина“, „Паркирай на това място“. +### Изрази: Инструкции стъпка по стъпка -Обичам изразите, защото обикновено са много четими. Вижте това: +Нека започнем с **изрази** – те са като отделни изречения в разговор с вашия компютър. Всеки израз казва на компютъра да направи конкретно нещо, нещо като указания: "Завий наляво тук," "Спри на червената светлина," "Паркирай на това място." + +Това, което обичам в изразите, е колко четими обикновено са. Вижте това: ```javascript -// Основни изявления, които изпълняват единични действия +// Основни оператори, които изпълняват единични действия const userName = "Alex"; console.log("Hello, world!"); const sum = 5 + 3; ``` - -**Ето какво прави този код:** -- **Декларира** константна променлива за съхранение на име на потребител -- **Показва** поздравително съобщение в конзолата -- **Изчислява** и съхранява резултат от математическа операция + +**Ето какво прави този код:** +- **Декларира** константна променлива, за да съхрани името на потребителя +- **Показва** приветствено съобщение в конзолния изход +- **Изчислява** и съхранява резултата от математическа операция ```javascript // Изявления, които взаимодействат с уеб страници document.title = "My Awesome Website"; document.body.style.backgroundColor = "lightblue"; ``` - -**Стъпка по стъпка, ето какво се случва:** -- **Променя** заглавието на уеб страницата, което се показва в таба на браузъра -- **Променя** цвета на фона на цялото тяло на страницата -### Променливи: Паметната система на вашата програма +**Стъпка по стъпка, ето какво се случва:** +- **Променя** заглавието на уебстраницата, което се показва в раздела на браузъра +- **Променя** цвета на фона на цялото тяло на страницата -Добре, **променливите** са честно казано една от любимите ми концепции за преподаване, защото са толкова подобни на неща, които вече използвате всеки ден! +### Променливи: Системата за памет на вашата програма -Помислете за контактите на телефона си за момент. Не запаметявате телефонните номера на всички – вместо това записвате „Мама“, „Най-добър приятел“ или „Пицарията, която доставя до 2 сутринта“ и оставяте телефона да запомни числата. Променливите работят по абсолютно същия начин! Те са като надписани контейнери, в които вашата програма може да съхранява информация и да я извлича по-късно, използвайки име, което има смисъл. +Добре, **променливите** са честно казано една от любимите ми концепции за обучение, защото са толкова подобни на неща, които вече използвате всеки ден! -Ето кое е истински готино: променливите могат да се променят докато вашата програма работи (оттук и името „променлива“ – вижте какво са направили?). Точно както бихте обновили контакта на пицарията, когато намерите още по-добро място, променливите могат да се обновяват, докато програмата научава нова информация или когато се променят обстоятелствата! +Помислете за списъка с контакти на телефона си за секунда. Не запомняте телефонните номера на всички – вместо това запазвате "Мама," "Най-добър приятел" или "Пицария, която доставя до 2 сутринта" и оставяте телефона да запомни реалните номера. Променливите работят по същия начин! Те са като етикетирани контейнери, където вашата програма може да съхранява информация и да я извлича по-късно с име, което всъщност има смисъл. + +Ето какво е наистина страхотно: променливите могат да се променят, докато вашата програма работи (оттук идва името "променлива" – вижте как са се сетили!). Точно както бихте обновили контакта на пицарията, когато откриете нещо по-добро, променливите могат да се актуализират, докато програмата научава нова информация или когато обстоятелствата се променят! Нека ви покажа колко красиво просто може да бъде това: @@ -317,12 +318,12 @@ let currentWeather = "sunny"; let temperature = 75; let isRaining = false; ``` - -**Разбиране на тези концепции:** -- **Съхраняване** на неизменяеми стойности в `const` променливи (като името на сайта) -- **Използване** на `let` за стойности, които могат да се променят през програмата -- **Присвояване** на различни типове данни: низове (текст), числа и булеви стойности (true/false) -- **Избор** на описателни имена, обясняващи какво съдържа всяка променлива + +**Разбиране на тези концепции:** +- **Съхранявайте** непроменящи се стойности в `const` променливи (като името на сайта) +- **Използвайте** `let` за стойности, които могат да се променят през изпълнението на програмата +- **Присвоявайте** различни типове данни: низове (текст), числа и булеви стойности (true/false) +- **Избирайте** описателни имена, които обясняват какво съдържа всяка променлива ```javascript // Стъпка 2: Работа с обекти за групиране на свързани данни @@ -332,11 +333,11 @@ const weatherData = { windSpeed: 12 }; ``` - -**В горното сме:** -- **Създали** обект за групиране на свързана информация за времето -- **Организирали** множество данни под едно име на променлива -- **Използвали** ключ-стойност двойки, за да надпишем всяка информация ясно + +**В горния пример:** +- **Създадохме** обект за групиране на свързана метеорологична информация +- **Организирахме** множество данни под едно име на променлива +- **Използвахме** двойки ключ-стойност за ясно обозначаване на всяка част от информацията ```javascript // Стъпка 3: Използване и актуализиране на променливи @@ -347,31 +348,31 @@ console.log(`Wind speed: ${weatherData.windSpeed} mph`); currentWeather = "cloudy"; temperature = 68; ``` - -**Нека разберем всяка част:** -- **Показване** на информация с помощта на шаблонни литерали с `${}` синтаксис -- **Достъп** до свойства на обекти с точкова нотация (`weatherData.windSpeed`) -- **Обновяване** на променливи, декларирани с `let`, за да се отразят променящите се условия -- **Комбиниране** на няколко променливи за създаване на смислени съобщения + +**Нека разберем всяка част:** +- **Показвайте** информация с използване на шаблонни низове със синтаксис `${}` +- **Достъпвайте** свойства на обекта с точкова нотация (`weatherData.windSpeed`) +- **Актуализирайте** променливи, декларирани с `let`, за да отразят променящи се условия +- **Комбинирайте** множество променливи, за да създадете смислени съобщения ```javascript // Стъпка 4: Модерен деструктуриране за по-чист код const { location, humidity } = weatherData; console.log(`${location} humidity: ${humidity}%`); ``` - -**Какво трябва да знаете:** -- **Извличане** на специфични свойства от обекти чрез деструктуриращо присвояване -- **Създаване** на нови променливи автоматично с имената на ключовете на обекта -- **Опрощаване** на кода чрез избягване на повтарящата се точкова нотация -### Контролен поток: Учите вашата програма да мисли +**Какво трябва да знаете:** +- **Извличайте** конкретни свойства от обекти с помощта на деструктуриращо присвояване +- **Създавайте** нови променливи автоматично със същите имена като ключовете в обекта +- **Оптимизирайте** кода, като избягвате повтаряща се точкова нотация + +### Контролен поток: Обучаване на вашата програма да мисли -Добре, тук програмирането става абсолютно удивително! **Контролният поток** е на практика начин да научите програмата си да взема умни решения, точно както вие го правите всеки ден без да се замисляте. +Добре, тук програмирането става абсолютно удивително! **Контролният поток** е всъщност обучението на вашата програма да взема умни решения, точно както вие правите всеки ден без изобщо да се замисляте. -Представете си: тази сутрин вероятно сте минали през нещо като „Ако вали, ще взема чадър. Ако е студено, ще нося якето. Ако закъснявам, ще пропусна закуската и ще взема кафе по пътя.“ Вашият мозък естествено следва тази логика „ако-тогава“ десетки пъти на ден! +Представете си това: тази сутрин вероятно сте преминали през нещо като "Ако вали, ще взема чадър. Ако е студено, ще облека яке. Ако закъснявам, ще прескоча закуската и ще взема кафе по пътя." Вашият мозък естествено следва тази if-then логика десетки пъти всеки ден! -Това прави програмите да изглеждат интелигентни и живи, а не просто да следват някакъв скучен, предсказуем скрипт. Те всъщност могат да анализират ситуацията, да оценят какво се случва и да отговорят адекватно. Това е като да дадете на програмата си мозък, който се адаптира и прави избори! +Това е, което прави програмите да изглеждат интелигентни и живи, вместо просто да следват скучен, предсказуем скрипт. Те всъщност могат да анализират ситуацията, да оценят какво се случва и да реагират адекватно. Това е като да дадете на програмата си мозък, който може да се адаптира и да прави избори! Искате ли да видите колко красиво работи това? Нека ви покажа: @@ -386,12 +387,12 @@ if (userAge >= 18) { console.log(`You'll be able to vote in ${yearsToWait} year(s).`); } ``` - -**Ето какво прави този код:** -- **Проверява** дали възрастта на потребителя отговаря на изискванията за гласуване -- **Изпълнява** различни блокове код в зависимост от резултата на условието -- **Изчислява** и показва колко остава до достигане на право на глас, ако е под 18 -- **Дава** конкретна, полезна обратна връзка за всяка ситуация + +**Ето какво прави този код:** +- **Проверява** дали възрастта на потребителя отговаря на изискването за гласуване +- **Изпълнява** различни блокове код въз основа на резултата от условието +- **Изчислява** и показва колко време остава до пълнолетие за гласуване, ако е под 18 +- **Предоставя** конкретна, полезна обратна връзка за всеки случай ```javascript // Стъпка 2: Множество условия с логически оператори @@ -406,26 +407,26 @@ if (userAge >= 18 && hasPermission) { console.log("Sorry, you must be at least 16 years old."); } ``` - -**Разбивка на случващото се тук:** -- **Комбинира** няколко условия с оператора `&&` (и) -- **Създава** йерархия от условия с `else if` за множество сценарии -- **Обработва** всички възможни случаи с крайно `else` изявление -- **Дава** ясна, приложима обратна връзка за всяка различна ситуация + +**Анализ на случващото се тук:** +- **Комбинира** няколко условия с оператора `&&` (и) +- **Създава** йерархия от условия с помощта на `else if` за множество ситуации +- **Обхваща** всички възможни случаи с краен `else` израз +- **Осигурява** ясна, директна обратна връзка за всяка различна ситуация ```javascript // Стъпка 3: Кратко условие с тернарен оператор const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; console.log(`Status: ${votingStatus}`); ``` - -**Какво трябва да запомните:** -- **Използвайте** тернарния оператор (`? :`) за прости двоични условия -- **Пишете** условието първо, следвано от `?`, после истинския резултат, после `:`, после фалшивия резултат -- **Прилагайте** този модел когато трябва да присвоите стойности според условия + +**Това, което трябва да запомните:** +- **Използвайте** тернарния оператор (`? :`) за прости условия с две опции +- **Пишете** условието първо, последвано от `?`, след това резултат при вярно условие, `:`, и резултат при невярно условие +- **Прилагайте** този модел, когато трябва да зададете стойности според условия ```javascript -// Стъпка 4: Обработка на множество конкретни случаи +// Стъпка 4: Обработка на множество специфични случаи const dayOfWeek = "Tuesday"; switch (dayOfWeek) { @@ -444,56 +445,56 @@ switch (dayOfWeek) { console.log("Invalid day of the week"); } ``` - -**Този код постига следното:** -- **Сравнява** стойността на променливата с няколко конкретни случая -- **Групира** подобни случаи (делници срещу уикенди) -- **Изпълнява** подходящия блок код при намерено съвпадение -- **Включва** `default` случай за обработка на неочаквани стойности -- **Използва** `break` изрази, за да предотврати изпълнение на следващите случаи -> 💡 **Аналогия от реалния свят**: Мислете за контролния поток като най-търпеливата GPS навигация на света, която ви дава указания. Може да каже „Ако има трафик по Главната улица, вземи магистралата. Ако строителство блокира магистралата, опитай живописния маршрут.“ Програмите използват същия вид условна логика, за да реагират интелигентно на различни ситуации и винаги да предоставят най-доброто възможно изживяване на потребителите. +**Този код изпълнява следното:** +- **Сравнява** стойността на променливата с няколко конкретни случая +- **Групира** подобни случаи заедно (работни дни срещу почивни) +- **Изпълнява** подходящия кодов блок при намерена съвпадение +- **Включва** `default` случай за обработка на неочаквани стойности +- **Използва** `break` изрази, за да предотврати продължаване към следващия случай -### 🎯 **Проверка на концепциите: Владение на строителните елементи** +> 💡 **Реален пример**: Представете си контрола на потока като най-търпеливата GPS навигация в света. Тя може да каже: „Ако има задръстване по Главната улица, използвай магистралата. Ако строеж блокира магистралата, пробвай по живописния път.“ Програмите използват същия тип условна логика, за да реагират интелигентно в различни ситуации и винаги да предоставят на потребителите най-доброто преживяване. -**Нека видим как се справяте с основите:** -- Можете ли да обясните с ваши думи разликата между променлива и израз? -- Помислете за реален пример, в който бихте използвали if-then решение (като нашия пример с гласуването) -- Кое е нещо в логиката на програмирането, което ви изненада? +### 🎯 **Проверка на концепциите: Майсторство в строителните блокове** -**Бързо уверяване:** +**Нека проверим как се справяте с основите:** +- Можете ли да обясните разликата между променлива и израз със собствени думи? +- Помислете за реален случай, в който бихте използвали if-then решение (като нашия пример с гласуването) +- Какво ви изненада най-много в логиката при програмирането? + +**Бърз стимул за увереност:** ```mermaid flowchart LR - A["📝 Изрази
(Инструкции)"] --> B["📦 Променливи
(Съхранение)"] --> C["🔀 Управляващ поток
(Решения)"] --> D["🎉 Работеща програма!"] + A["📝 Изявления
(Команди)"] --> B["📦 Променливи
(Памет)"] --> C["🔀 Контрол на потока
(Решения)"] --> D["🎉 Работеща програма!"] style A fill:#ffeb3b style B fill:#4caf50 style C fill:#2196f3 style D fill:#ff4081 -``` -✅ **Какво предстои:** Ще се забавляваме да навлезем по-дълбоко в тези концепции, докато продължаваме това невероятно пътешествие заедно! Засега се съсредоточете просто върху това да почувствате вълнението за всичките удивителни възможности пред вас. Конкретните умения и техники ще се запечатат естествено, докато практикуваме заедно – обещавам, че ще бъде много по-забавно, отколкото предполагате! +``` +✅ **Какво следва:** Предстои ни невероятно забавление, докато навлизаме по-дълбоко в тези концепции заедно! Засега се съсредоточете само върху това да почувствате вълнението от всички удивителни възможности пред вас. Конкретните умения и техники ще се усвояват естествено с практиката – уверявам ви, че това ще е много по-забавно от колкото очаквате! ## Инструментите на занаята -Добре, честно казано сега се вълнувам толкова, че едва се сдържам! 🚀 Ще говорим за невероятните инструменти, които ще ви накарат да се почувствате така, сякаш току-що са ви дали ключовете на цифров космически кораб. +Добре, честно казано това е моментът, в който се вълнувам толкова, че едва се сдържам! 🚀 Ще говорим за невероятните инструменти, които ще ви накарат да се почувствате сякаш току-що са ви дали ключовете за цифров космически кораб. -Знаете как готвачът има перфектно балансирани ножове, които се чувстват като продължения на ръцете му? Или как музикантът има онзи китара, която сякаш пее в момента, в който я докосне? Е, разработчиците имаме нашата версия на тези магически инструменти и ето какво ще ви пометне главата – повечето от тях са напълно безплатни! +Знаете ли как готвачът има тези перфектно балансирани ножове, които се усещат като продължение на ръцете му? Или как музикантът има онзи китар, който сякаш пее точно в момента, в който я докосне? Е, разработчиците имаме своя версия на тези магически инструменти и тук идва онова, което ще ви изуми – повечето от тях са безплатни! -Почти скачам на стола, докато мисля да ви ги покажа, защото напълно революционизираха начина, по който изграждаме софтуер. Говорим за AI-подсилени асистенти, които могат да помагат да пишете код (и не се шегувам!), облачни среди, в които можете да изграждате цели приложения от буквално всяко място с Wi-Fi, и инструменти за отстраняване на грешки толкова сложни, че са като да имате рентгеново зрение за вашите програми. +Почти скачам на стола си, докато мисля да ги споделя с вас, защото те напълно промениха начина, по който създаваме софтуер. Говорим за асистенти за кодиране с изкуствен интелект, които могат да помогнат да пишете кода си (и не се шегувам!), облачни среди, в които можете да изграждате цели приложения буквално от всяко място с Wi-Fi, и инструменти за отстраняване на грешки толкова сложни, че са като рентгеново зрение за вашите програми. -И ето частта, която все още ме кара да настръхвам: това не са „начинаещи инструменти“, които ще ви омръзнат бързо. Това са точно същите професионални инструменти, които разработчиците в Google, Netflix и онова инди студио за приложения, което обичате, използват точно в този момент. Ще се почувствате като истински професионалист, ползвайки ги! +И сега частта, която все още ми дава тръпки: това не са „начинаещи инструменти“, които ще надраснете. Това са същите професионални инструменти, които разработчиците в Google, Netflix и онази малка интерактивна студия, която обичате, използват в момента. Ще се чувствате като истински професионалист, докато ги ползвате! ```mermaid graph TD - A["💡 Вашата Идея"] --> B["⌨️ Редактор на код
(VS Code)"] - B --> C["🌐 Инструменти за разработка в браузър
(Тестване и отстраняване на грешки)"] + A["💡 Вашата идея"] --> B["⌨️ Редактор на код
(VS Code)"] + B --> C["🌐 Инструменти за разработчици в браузъра
(Тестване и отстраняване на грешки)"] C --> D["⚡ Команден ред
(Автоматизация и инструменти)"] - D --> E["📚 Документация
(Обучение и справка)"] + D --> E["📚 Документация
(Обучение и справки)"] E --> F["🚀 Удивително уеб приложение!"] B -.-> G["🤖 AI Асистент
(GitHub Copilot)"] C -.-> H["📱 Тестване на устройства
(Отзивчив дизайн)"] - D -.-> I["📦 Пакетни мениджъри
(npm, yarn)"] + D -.-> I["📦 Мениджъри на пакети
(npm, yarn)"] E -.-> J["👥 Общност
(Stack Overflow)"] style A fill:#fff59d @@ -502,230 +503,229 @@ graph TD style H fill:#f3e5f5 style I fill:#ffccbc style J fill:#e8eaf6 -``` +``` ### Редактори на код и IDE: Вашите нови цифрови най-добри приятели -Нека поговорим за редакторите на код – тези наистина ще станат вашето ново любимо място за престой! Мислете за тях като за вашето лично убежище за кодиране, където ще прекарвате по-голямата част от времето си, създавайки и усъвършенствайки цифровите си творения. +Нека поговорим за редакторите на код – те сериозно ще станат вашите любими места за творчество! Мислете за тях като за вашето лично святилище за кодиране, където ще прекарвате по-голямата част от времето си, изграждайки и усъвършенствайки дигиталните си творения. -Но ето кое е абсолютно магическо в съвременните редактори: те не са просто обикновени текстови редактори. Те са като най-блестящият, подкрепящ ментор по кодиране, седнал точно до вас 24/7. Хващат правописните ви грешки преди да ги забележите, предлагат подобрения, които ви карат да изглеждате като гений, помагат ви да разберете какво прави всеки ред код, а някои дори могат да предвидят какво ще напишете и да предложат да довършат мислите ви! +Но ето кое е абсолютно магичното при съвременните редактори: те не са просто изящни текстови редактори. Те са като най-блестящият, подкрепящ ментор, който винаги седи до вас 24/7. Хващат печатни грешки, преди да ги забележите, предлагат подобрения, които ви правят да изглеждате като гений, помагат ви да разберете какво прави всяка част от кода, а някои дори могат да предвидят какво ще напишете и да завършат мислите ви! -Спомням си първия път, когато открих автоматичното допълване – буквално се почувствах като в бъдещето. Започвате да пишете нещо, а редакторът казва: „Хей, мислехте ли за тази функция, която прави точно това, което ви трябва?“ Като да имате читател на мисли за кодиране! +Спомням си първия път, когато открих автоматично допълване – сякаш живеех в бъдещето. Започвате да пишете нещо и редакторът казва: „Хей, не искаш ли да използваш тази функция, която прави точно това, което ти трябва?“ Това е като да имаш читател на мисли за кодиране! **Какво прави тези редактори толкова невероятни?** -Модерните редактори предлагат впечатляващо множество функции, проектирани да увеличат продуктивността ви: +Съвременните редактори на код предлагат впечатляващ набор от функции за повишаване на продуктивността: | Функция | Какво прави | Защо помага | |---------|--------------|--------------| -| **Оцветяване на синтаксис** | Оцветява различни части от кода | Прави кода по-лесен за четене и откриване на грешки | -| **Автоматично допълване** | Предлага код докато пишете | Ускорява писането на код и намалява правописните грешки | -| **Инструменти за отстраняване на грешки** | Помагат да намерите и поправите грешки | Спестяват часове за отстраняване на проблеми | -| **Разширения** | Добавят специализирани функции | Персонализират редактора за всяка технология | -| **AI асистенти** | Предлагат код и обяснения | Ускоряват ученето и продуктивността | - -> 🎥 **Видео ресурс**: Искате да видите тези инструменти в действие? Вижте това [Видео за Инструментите на занаята](https://youtube.com/watch?v=69WJeXGBdxg) за изчерпателен преглед. - -#### Препоръчани редактори за уеб разработка - -**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (Безплатен) -- Най-популярен сред уеб разработчиците -- Отлична екосистема от разширения -- Вграден терминал и интеграция с Git -- **Задължителни разширения**: - - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI-подсилени подсказки за код - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Съвместна работа в реално време - - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - Автоматично форматиране на код - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Хваща правописни грешки в кода - -**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (Платен, безплатен за студенти) -- Напреднали инструменти за отстраняване на грешки и тестване -- Интелигентно допълване на кода -- Вграден контрол на версиите - -**Облачни IDE-та** (Различна ценова политика) -- [GitHub Codespaces](https://github.com/features/codespaces) - Пълен VS Code в браузъра ви -- [Replit](https://replit.com/) - Отличен за учене и споделяне на код -- [StackBlitz](https://stackblitz.com/) - Мигновено, пълноценна уеб разработка - -> 💡 **Съвет за начало**: Започнете с Visual Studio Code – безплатен е, широко използван в индустрията и има огромна общност, създаваща полезни уроци и разширения. +| **Оцветяване на синтаксиса** | Оцветява различни части на кода | Прави кода по-лесен за четене и намиране на грешки | +| **Автоматично допълване** | Предлага код, докато пишете | Ускорява писането на код и намалява грешки | +| **Инструменти за отстраняване на грешки** | Помага да намерите и коригирате грешки | Спестява часове в търсене на проблеми | +| **Разширения** | Добавят специализирани функции | Персонализира редактора за всяка технология | +| **Асистенти с ИИ** | Предлагат код и обяснения | Ускорява ученето и производителността | + +> 🎥 **Видео ресурс**: Искате ли да видите тези инструменти в действие? Вижте това [Видео „Инструментите на занаята“](https://youtube.com/watch?v=69WJeXGBdxg) за цялостен преглед. + +#### Препоръчителни редактори за уеб разработка + +**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (Безплатен) +- Най-популярен сред уеб разработчиците +- Отлична екосистема от разширения +- Вграден терминал и интеграция с Git +- **Задължителни разширения**: + - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI базирани предложения за код + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Сътрудничество в реално време + - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - Автоматично форматиране на кода + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Засича правописни грешки в кода + +**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (Платен, безплатен за студенти) +- Разширени инструменти за отстраняване на грешки и тестване +- Интелигентно допълване на кода +- Вградена система за контрол на версиите + +**Облачни IDE** (Различни цени) +- [GitHub Codespaces](https://github.com/features/codespaces) - Пълен VS Code във вашия браузър +- [Replit](https://replit.com/) - Отличен за учене и споделяне на код +- [StackBlitz](https://stackblitz.com/) - Моментално, пълностекова уеб разработка + +> 💡 **Съвет за започване**: Започнете с Visual Studio Code – безплатен е, широко използван в индустрията и има огромна общност, която създава полезни уроци и разширения. + ### Уеб браузъри: Вашата тайна лаборатория за разработка -Добре, пригответе се умът ви да бъде напълно изумен! Знаете как сте използвали браузърите, за да превъртате социалните медии и да гледате видеа? Оказва се, че те са крили тази невероятна тайна лаборатория за разработчици през цялото време, само чакайки да я откриете! +Добре, пригответе се за пълно умуващо изживяване! Знаете как използвате браузърите, за да разглеждате социални мрежи и гледате видеа? Оказва се, че те са крили цяло невероятно тайно лабораторно пространство за разработчици през цялото това време, просто чакайки да го откриете! -Всеки път, когато щракнете с десен бутон върху уеб страница и изберете „Inspect Element“ (Инспектиране на елемент), отваряте скрит свят на инструменти за разработчици, които са истински по-мощни от някои скъпи софтуери, за които някога съм плащал стотици долари. Това е като да откриете, че обикновената ви кухня крие професионална готварска лаборатория зад тайна врата! -Първия път, когато някой ми показа DevTools на браузъра, прекарах около три часа просто кликайки наоколо и казвайки си "ЧАКАЙ, ТО МОЖЕ И ТОВА ТАКА?!". Можеш буквално да редактираш всеки уебсайт в реално време, да видиш колко бързо всичко се зарежда, да тестваш как изглежда сайта ти на различни устройства и дори да дебъгваш JavaScript като пълен професионалист. Абсолютно удивително е! +Всеки път, когато кликнете с десния бутон върху уебстраница и изберете „Inspect Element“ (Инспектиране на елемент), отваряте скрит свят на инструменти за разработчици, които всъщност са по-мощни от някои скъпи софтуери, за които преди съм плащал стотици долари. Това е като да откриете, че вашата обикновена кухня крие професионална готварска лаборатория зад секретен панел! +Първия път, когато някой ми показа браузър DevTools, прекарах около три часа просто кликайки насам-натам и казвах „ЧАКАЙ, ТОЙ МОЖЕ И ТОВА?!“ Можеш буквално да редактираш всеки уебсайт в реално време, да видиш точно колко бързо се зарежда всичко, да тестваш как изглежда твоя сайт на различни устройства и дори да дебъгваш JavaScript като истински професионалист. Абсолютно поразително е! **Ето защо браузърите са твоето тайно оръжие:** -Когато създаваш уебсайт или уеб приложение, трябва да видиш как изглежда и се държи в реалния свят. Браузърите не само показват твоята работа, но и предоставят детайлна обратна връзка за производителността, достъпността и потенциални проблеми. +Когато създаваш уебсайт или уеб приложение, трябва да видиш как изглежда и как се държи в реалния свят. Браузърите не само показват твоята работа, но и предоставят подробна обратна връзка за производителността, достъпността и потенциалните проблеми. -#### Инструменти за разработчици в браузъра (DevTools) +#### Инструменти за разработчици в браузъри (DevTools) -Модерните браузъри включват пълни комплекти за разработка: +Съвременните браузъри включват всеобхватни комплекти за разработка: -| Категория на инструмента | Какво прави | Примерна употреба | -|--------------------------|-------------|-------------------| -| **Инспектор на елементи** | Преглед и редакция на HTML/CSS в реално време | Регулиране на стила за мигновени резултати | -| **Конзола** | Преглед на съобщения за грешки и тест на JavaScript | Дебъгване на проблеми и експериментиране с код | -| **Монитор на мрежата** | Следене на зареждането на ресурси | Оптимизиране на производителността и времето за зареждане | -| **Проверка на достъпността** | Тестване за приобщаващ дизайн | Осигуряване, че сайтът работи за всички потребители | -| **Симулатор на устройства** | Преглед на различни размери на екрана | Тест на адаптивен дизайн без нужда от няколко устройства | +| Категория инструмент | Какво прави | Примерна употреба | +|---------------------|-------------|-------------------| +| **Преглед на елементи** | Преглежда и редактира HTML/CSS в реално време | Настройване на стила с моментален резултат | +| **Конзола** | Показва съобщения за грешки и тестове на JavaScript | Дебъгване на проблеми и експериментиране с код | +| **Мрежови инструменти** | Следи как се зареждат ресурсите | Оптимизиране на производителност и време за зареждане | +| **Проверка за достъпност** | Тества за приобщаващ дизайн | Осигурява, че сайтът работи за всички потребители | +| **Емулятор на устройства** | Преглед на различни размери на екрана | Тества отзивчив дизайн без множество устройства | #### Препоръчани браузъри за разработка -- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - Стандарт в индустрията с изчерпателна документация -- **[Firefox](https://developer.mozilla.org/docs/Tools)** - Отлични инструменти за CSS Grid и достъпност -- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Изграден върху Chromium с ресурси от Microsoft за разработчици - -> ⚠️ **Важно съвет за тестване**: Винаги тествай уебсайтовете си в няколко браузъра! Това, което работи перфектно в Chrome, може да изглежда различно в Safari или Firefox. Професионалните разработчици тестват в основните браузъри, за да осигурят постоянен потребителски опит. +- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - Индустриален стандарт за DevTools с обширна документация +- **[Firefox](https://developer.mozilla.org/docs/Tools)** - Отлични инструменти за CSS Grid и достъпност +- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Изграден на Chromium с ресурси на Microsoft за разработчици +> ⚠️ **Важно за тестване**: Винаги тествай уебсайтовете си в няколко браузъра! Това, което работи перфектно в Chrome, може да изглежда различно в Safari или Firefox. Професионалните разработчици тестват в големите браузъри, за да осигурят последователно преживяване на потребителите. -### Инструменти на командния ред: Твоят портал към суперсили за разработчици +### Инструменти от командния ред: Вход към суперсилите на разработчика -Добре, нека бъдем напълно честни за командния ред, защото искам да чуеш това от човек, който наистина го разбира. Когато го видях за първи път – просто този страшен черен екран с мигащ текст – буквално си помислих: "Не, абсолютно не! Това изглежда като нещо от хакерски филм от 80-те и аз определено не съм достатъчно умен за това!" 😅 +Добре, нека бъдем напълно честни тук за командния ред, защото искам да чуеш това от някой, който наистина го разбира. Когато го видях за първи път – този страшен черен екран с мигащ текст – буквално си помислих: „Не, в никакъв случай! Това изглежда като сцена от хакерски филм от 80-те, и със сигурност не съм достатъчно умен за това!“ 😅 -Но ето какво бих искал някой да ми е казал тогава, и което ти казвам сега: командният ред не е страшен – той е като директен разговор с компютъра ти. Представи си го като разликата между поръчване на храна чрез лъскаво приложение със снимки и менюта (което е лесно и удобно) и влизане в любимия ти местен ресторант, където готвачът знае точно какво обичаш и може да ти приготви нещо перфектно само като кажеш "изненадай ме с нещо невероятно." +Но ето какво искам някой да ми беше казал тогава, и което ти казвам сега: командният ред не е страшен – той всъщност е като директен разговор с компютъра ти. Мисли за него като за разликата между поръчването на храна през стилно приложение с картинки и меню (което е лесно и приятно) и влизането в любимия ти местен ресторант, където готвачът знае точно какво обичаш и може да ти сътвори нещо перфектно само с думите „изненадай ме с нещо невероятно“. -Командният ред е мястото, където разработчиците се чувстват като истински магьосници. Въвеждаш няколко на пръв поглед магически думи (добре, просто команди, но звучат магически!), натискаш enter и БАМ – създал си цели проектни структури, инсталирал си мощни инструменти от цял свят или публикувал приложението си в интернет, за да го видят милиони хора. След първия вкус на тази сила, честно казано, става доста пристрастяващо! +Командният ред е мястото, където разработчиците се чувстват като абсолютни магьосници. Въвеждаш няколко на пръв поглед магически думи (окей, команди са, но наистина звучат магически!), натискаш enter и БАМ – създаваш цели проекти, инсталираш мощни инструменти от цял свят или пускаш приложението си в интернет, за да го видят милиони. След като усетиш тази сила за първи път, наистина е доста пристрастяващо! **Защо командният ред ще стане любимият ти инструмент:** -Докато графичните интерфейси са страхотни за много задачи, командният ред превъзхожда в автоматизацията, прецизността и бързината. Много инструменти за разработка работят основно чрез команден ред и да се научиш да ги използваш ефективно може драстично да подобри продуктивността ти. +Докато графичните интерфейси са чудесни за много задачи, командният ред изпреварва при автоматизация, прецизност и скорост. Много инструменти за разработка са основно на базата на команден интерфейс, а усвояването им ще повиши значително продуктивността ти. ```bash -# Стъпка 1: Създайте и отидете в директорията на проекта +# Стъпка 1: Създайте и навигирайте до директорията на проекта mkdir my-awesome-website cd my-awesome-website ``` - -**Ето какво прави този код:** -- **Създава** нова директория с името "my-awesome-website" за проекта ти -- **Влиза** в новосъздадената директория, за да започне работа + +**Ето какво прави този код:** +- **Създава** нова папка с името "my-awesome-website" за твоя проект +- **Влиза** в новосъздадената папка, за да започне работа ```bash # Стъпка 2: Инициализирайте проекта с package.json npm init -y -# Инсталирайте съвременни инструменти за разработка +# Инсталирайте модерни инструменти за разработка npm install --save-dev vite prettier eslint npm install --save-dev @eslint/js ``` - -**Стъпка по стъпка, ето какво се случва:** -- **Инициализира** нов Node.js проект с настройки по подразбиране чрез `npm init -y` -- **Инсталира** Vite като модерен инструмент за бърза разработка и продукционни сборки -- **Добавя** Prettier за автоматично форматиране на кода и ESLint за проверки на качеството на кода -- **Използва** флага `--save-dev`, за да маркира тези зависимости като само за разработка + +**Стъпка по стъпка, ето какво става:** +- **Инициализира** нов проект Node.js с настройки по подразбиране чрез `npm init -y` +- **Инсталира** Vite като модерен билд инструмент за бърза разработка и продукционни сборки +- **Добавя** Prettier за автоматично форматиране на кода и ESLint за проверка на качеството му +- **Използва** флага `--save-dev`, за да маркира тези зависимости като само за разработка ```bash -# Стъпка 3: Създаване на структура на проекта и файлове +# Стъпка 3: Създаване на структурата на проекта и файловете mkdir src assets echo 'My Site

Hello World

' > index.html -# Стартиране на сървър за разработка +# Стартиране на сървъра за разработка npx vite ``` + +**По-горе ние:** +- **Организирахме** проекта като създадохме отделни папки за изходния код и ресурсите +- **Генерирахме** базов HTML файл с правилната документна структура +- **Стартирахме** dev сървъра на Vite за живо презареждане и подмяна на модули "на горещо" -**В горното ние:** -- **Организирахме** проекта чрез създаване на отделни папки за сорс кода и активите -- **Генерирахме** основен HTML файл с правилна структура на документа -- **Стартирахме** Vite сървър за разработка с опция за live reloading и hot module replacement - -#### Основни инструменти на командния ред за уеб разработка +#### Основни инструменти от командния ред за уеб разработка | Инструмент | Цел | Защо ти трябва | |------------|-----|----------------| -| **[Git](https://git-scm.com/)** | Контрол на версиите | Следи промените, сътрудничество с други, резервно копие на работата | -| **[Node.js & npm](https://nodejs.org/)** | JavaScript изпълнителна среда и управление на пакети | Стартирай JavaScript извън браузъра, инсталирай модерни инструменти за разработка | -| **[Vite](https://vitejs.dev/)** | Инструмент за сборка и dev сървър | Светкавично бърза разработка с hot module replacement | -| **[ESLint](https://eslint.org/)** | Качество на кода | Автоматично намиране и поправяне на проблеми в JavaScript кода | -| **[Prettier](https://prettier.io/)** | Форматиране на кода | Поддържай кода си последователно форматиран и четим | +| **[Git](https://git-scm.com/)** | Контрол на версиите | Следене на промени, сътрудничество, архивиране на работата | +| **[Node.js & npm](https://nodejs.org/)** | JavaScript среда & пакетен мениджър | Стартиране на JS извън браузъра, инсталация на модерни инструменти | +| **[Vite](https://vitejs.dev/)** | Билд инструмент & dev сървър | Молниеносна разработка с гореща подмяна на модули | +| **[ESLint](https://eslint.org/)** | Качество на кода | Автоматично откриване и коригиране на проблеми с JS кода | +| **[Prettier](https://prettier.io/)** | Форматиране на код | Поддържане на консистентен и четим код | -#### Платформено-зависими опции +#### Платформено специфични опции -**Windows:** -- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Модерен терминал с богати функции -- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Мощна среда за скриптове -- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Традиционен Windows команден ред +**Windows:** +- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Модерен, с много функции терминал +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Мощна среда за скриптове +- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Традиционен Windows команден ред -**macOS:** -- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - Вградено терминално приложение -- **[iTerm2](https://iterm2.com/)** - Подобрен терминал с допълнителни функции +**macOS:** +- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - Вградена терминална програма +- **[iTerm2](https://iterm2.com/)** - Разширен терминал с допълнителни функции -**Linux:** -- **[Bash](https://www.gnu.org/software/bash/)** 💻 - Стандартна Linux обвивка -- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - Модерен емулатор на терминал +**Linux:** +- **[Bash](https://www.gnu.org/software/bash/)** 💻 - Стандартна Linux обвивка +- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - Разширен емулатор на терминал -> 💻 = Предварително инсталиран в операционната система +> 💻 = Предварително инсталирани на операционната система -> 🎯 **Път за учене**: Започни с основни команди като `cd` (смяна на директория), `ls` или `dir` (преглед на файлове) и `mkdir` (създаване на папка). Практикувай с модерни команди от работния процес като `npm install`, `git status` и `code .` (отваря текущата папка във VS Code). С времето естествено ще усвоиш по-сложни команди и техники за автоматизация. +> 🎯 **Път на обучение**: Започни с основни команди като `cd` (смяна на директория), `ls` или `dir` (списък с файлове) и `mkdir` (създаване на папка). Практикувай с командите за съвременен работен процес като `npm install`, `git status` и `code .` (отваря текущата директория във VS Code). С времето ще усвояваш по-сложни команди и автоматизации. +### Документация: Твоят винаги достъпен ментор за учене -### Документация: Твоят винаги на разположение ментор за учене +Добре, нека ти споделя една малка тайна, която ще те накара да се чувстваш много по-комфортно, че си начинаещ: дори най-опитните разработчици прекарват огромна част от времето си в четене на документация. И причината не е, че не знаят какво правят – всъщност това е признак за мъдрост! -Добре, нека ти споделя една малка тайна, която ще те накара да се чувстваш много по-добре като начинаещ: дори най-опитните разработчици прекарват голяма част от времето си в четене на документация. И не е защото не знаят какво правят – всъщност това е признак на мъдрост! +Мисли за документацията като за най-търпеливите и знаещи учители на света, които са на разположение 24/7. Заплеснал си се в проблем в 2 сутринта? Документацията е там с топла виртуална прегръдка и точно отговора, който ти трябва. Искаш да научиш за някоя нова интересна функция, за която всички говорят? Документацията ще ти я покаже с примери стъпка по стъпка. Опитваш се да разбереш защо нещо работи така, както работи? Позна – документацията е там, за да ти обясни, докато най-накрая не проумееш! -Помисли за документацията като достъп до най-търпеливите и най-знаещи учители по света, на които можеш да разчиташ по всяко време, ден и нощ. Заклещен си в проблем в 2 през нощта? Документацията е там с топла виртуална прегръдка и точно отговора, от който имаш нужда. Искаш да научиш за някоя нова функция, за която всички говорят? Документацията те подкрепя с подробни примери стъпка по стъпка. Опитваш се да разбереш защо нещо работи по определен начин? Позна – документацията е готова да го обясни така, че най-накрая да ти щракне! +Ето нещо, което напълно промени гледната ми точка: светът на уеб разработката се движи невероятно бързо и никой (мисля че наистина никой!) не помни всичко наизуст. Виждал съм старши разработчици с над 15 години опит да търсят основен синтаксис, и знаеш ли какво? Това не е срамно – това е умно! Не е въпрос на съвършена памет, а на това да знаеш къде бързо да намериш надеждни отговори и как да ги приложиш. -Ето нещо, което напълно промени гледната ми точка: светът на уеб разработката се развива изключително бързо и никой (абсолютно никой!) не помни всичко. Гледал съм старши разработчици с над 15 години опит да търсят основен синтаксис и знаеш ли какво? Това не е срамно – това е умно! Не става дума за перфектна памет, а за това да знаеш къде да намериш надеждни отговори бързо и как да ги прилагаш. +**Ето къде се случва истинската магия:** -**Ето къде става истинската магия:** +Професионалните разработчици прекарват значителна част от времето си в четене на документация – не защото не знаят какво правят, а защото уеб разработката се променя толкова бързо, че постоянното учене е необходимо. Добрата документация ти помага да разбереш не само *как* да използваш нещо, но и *защо* и *кога* да го използваш. -Професионалните разработчици прекарват значителна част от времето си в четене на документация – не защото не знаят какво правят, а защото уеб разработката се развива толкова бързо, че да си в крак изисква постоянно учене. Добрата документация ти помага да разбереш не само *как* да използваш нещо, но и *защо* и *кога* да го използваш. +#### Основни ресурси за документация -#### Основни източници на документация +**[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** +- Златният стандарт за документация на уеб технологии +- Изчерпателни ръководства за HTML, CSS и JavaScript +- Включва информация за съвместимост с браузъри +- Предлага практични примери и интерактивни демонстрации -**[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** -- Златният стандарт за документиране на уеб технологии -- Изчерпателни ръководства за HTML, CSS и JavaScript -- Съдържа информация за съвместимост с браузъри -- Включва практични примери и интерактивни демонстрации +**[Web.dev](https://web.dev)** (на Google) +- Модерни практики за уеб разработка +- Ръководства за оптимизация на производителността +- Принципи на достъпност и приобщаващ дизайн +- Казуси от реални проекти -**[Web.dev](https://web.dev)** (от Google) -- Най-добри практики за съвременна уеб разработка -- Ръководства за оптимизация на производителността -- Принципи за достъпност и приобщаващ дизайн -- Казуси от реални проекти +**[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** +- Ресурси за разработка на браузър Edge +- Ръководства за прогресивни уеб приложения +- Информация за кросплатформена разработка -**[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** -- Ресурси за разработка на Edge браузър -- Ръководства за Progressive Web Apps -- Инсайти за кросплатформена разработка +**[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** +- Структурирани учебни курсове +- Видеокурсове от експерти в индустрията +- Практически упражнения с код -**[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** -- Структурирани учебни курикулуми -- Видеокурсове от експерти в индустрията -- Практически упражнения по програмиране +> 📚 **Учебна стратегия**: Не се опитвай да запаметяваш документацията – вместо това научи се как да я навигираш ефективно. Запазвай често използвани ресурси в отметки и упражнявай търсене, за да намираш конкретна информация бързо. -> 📚 **Стратегия за учене**: Не се опитвай да запаметяваш документацията – вместо това се научи да я навигираш ефективно. Добавяй в отметки често използвани справки и практикувай използването на търсачката, за да намираш специфична информация бързо. +### 🔧 **Проверка на овладяване на инструментите: Какво ти харесва най-много?** -### 🔧 **Проверка на умения: Кое ти допада най-много?** - -**Отдели момент да помислиш:** -- Кой инструмент се вълнуваш най-много да изпробваш първо? (Няма грешен отговор!) -- Все още ли ти се струва страшен командният ред, или вече си любопитен? -- Можеш ли да си представиш да използваш браузърните DevTools, за да надникнеш зад кулисите на любимите сайтове? +**Отдели момент да помислиш:** +- Кой инструмент най-много искаш да пробваш първи? (Няма грешен отговор!) +- Още ли командният ред те плаши, или си любопитен към него? +- Можеш ли да си представиш да използваш browser DevTools, за да надникнеш зад завесата на любимите си сайтове? ```mermaid -pie title "Време прекарано от разработчика с инструменти" +pie title "Време на програмиста, прекарано с инструменти" "Редактор на код" : 40 "Тестване в браузър" : 25 "Команден ред" : 15 "Четене на документация" : 15 "Отстраняване на грешки" : 5 -``` -> **Забавен факт**: Повечето разработчици прекарват около 40% от времето в редактора на кода, но забележи колко време отделят за тестване, учене и решаване на проблеми. Програмирането не е само писане на код – то е създаване на преживявания! +``` +> **Забавен факт**: Повечето разработчици прекарват около 40% от времето си в кода си, но забележи колко време отива за тестване, учене и решаване на проблеми. Програмирането не е само писане на код – това е създаване на преживявания! -✅ **Храна за размисъл**: Ето нещо интересно за обмисляне – мислиш ли, че инструментите за създаване на уебсайтове (разработка) могат да се различават от инструментите за дизайна им (визуален дизайн)? Това е като разликата между архитект, който проектира красива къща, и изпълнител, който я строи. И двете са важни, но имат различни инструменти! Такъв тип мислене ще ти помогне да видиш по-голямата картина за това как уебсайтовете оживяват. +✅ **Храна за размисъл**: Ето нещо интересно за размисъл – как мислиш, че инструментите за създаване на уебсайтове (разработка) се различават от тези за проектиране на тяхната визия (дизайн)? Това е като разликата между архитект, който проектира красива къща, и предприемач, който я построява. И двамата са важни, но имат различни инструменти! Този подход ще ти помогне да видиш по-широката картина как уебсайтовете оживяват. -## GitHub Copilot Agent Challenge 🚀 +## Предизвикателство на GitHub Copilot Agent 🚀 -Използвай Agent режима за да изпълниш следната задача: +Използвай Agent режима, за да изпълниш следното предизвикателство: -**Описание:** Изследвай функциите на модерен редактор на код или IDE и демонстрирай как той може да подобри работния ти процес като уеб разработчик. +**Описание:** Изследвай функциите на модерен кодов редактор или IDE и демонстрирай как може да подобри работния ти процес като уеб разработчик. -**Подсказка:** Избери редактор на код или IDE (като Visual Studio Code, WebStorm или облачен IDE). Изброи три функции или разширения, които ти помагат да пишеш, дебъгваш или поддържаш кода по-ефективно. За всяка дай кратко обяснение как подобрява работния ти поток. +**Подканяне:** Избери кодов редактор или IDE (като Visual Studio Code, WebStorm или облачно IDE). Изброи три функции или разширения, които ти помагат да пишеш, дебъгваш или поддържаш кода по-ефективно. За всяка дай кратко обяснение как тя подобрява работния ти процес. --- @@ -733,50 +733,50 @@ pie title "Време прекарано от разработчика с инс **Добре, детективе, готов ли си за първото си дело?** -Сега, когато имаш тази страхотна основа, имам приключение, което ще ти помогне да видиш колко невероятно разнообразен и завладяващ е светът на програмирането. И слушай – това не е за писане на код още, така че няма напрежение! Помисли си за себе си като детектив на програмни езици в първото си вълнуващо разследване! +Сега, когато си изградил страхотна основа, имам за теб приключение, което ще ти помогне да видиш колко изключително разнообразен и вълнуващ е светът на програмирането. И слушай – това не е все още писане на код, така че без напрежение! Представи се като детектив на програмни езици на първото си вълнуващо разследване! -**Твоята мисия, ако решиш да я приемеш:** -1. **Стани изследовател на езици**: Избери три програмни езика от напълно различни светове – може би един, който създава уебсайтове, един за мобилни приложения и един за обработка на данни за учени. Намери примери за една и съща проста задача, написана на всеки език. Обещавам ти, че ще се удивиш колко различно могат да изглеждат те, правейки точно същото нещо! +**Твоята мисия, ако решиш да я приемеш:** +1. **Станете изследовател на езици**: Избери три програмни езика от съвсем различни светове – например един за уебсайтове, един за мобилни приложения и един за обработка на данни за учени. Намери примери за една и съща проста задача, написани на всеки език. Обещавам, че ще се удивиш колко различни могат да изглеждат, докато вършат същото нещо! -2. **Разкрий техните истории на произход**: Какво прави всеки език специален? Ето един интересен факт – всеки един програмен език е създаден, защото някой си е казал „Знаеш ли какво? Трябва да има по-добър начин да се реши точно този проблем.“ Можеш ли да разбираш кои са били тези проблеми? Някои от тези истории са наистина възхитителни! +2. **Открийте техните истории на произход**: Какво прави всеки език специален? Тук има един готин факт – всеки един програмен език е създаден, защото някой си е помислил: „Знаеш ли, трябва да има по-добър начин да се реши този конкретен проблем.“ Можеш ли да разбереш кои са били тези проблеми? Някои от историите са наистина интересни! -3. **Срещни общностите**: Разгледай колко гостоприемни и страстни са общностите около всеки език. Някои имат милиони разработчици, които споделят знания и си помагат, други са по-малки, но невероятно сплотени и подкрепящи. Ще ти хареса да видиш различните личности, които имат тези общности! +3. **Запознай се с общностите**: Провери колко гостоприемни и страстни са общностите около всеки език. Някои имат милиони разработчици, които споделят знания и си помагат, други са по-малки, но изключително сплотени и подкрепящи. Ще ти хареса да видиш различните характери на тези общности! -4. **Следвай инстинкта си**: Кой език ти се струва най-достъпен сега? Не се притеснявай за „перфектния“ избор – просто слушай интуицията си! Наистина няма грешен отговор и винаги можеш да изследваш други по-късно. +4. **Следвай инстинкта си**: Кой език ти се струва най-достъпен в момента? Не се притеснявай да направиш "перфектния" избор – просто слушай интуицията си! Наистина няма грешен отговор и винаги можеш да разгледаш и други по-късно. -**Бонус детективска работа**: Опитай се да откриеш кои големи уебсайтове или приложения са изградени с всеки от езиците. Гарантирам, че ще си шокиран да научиш какво захранва Instagram, Netflix или онази мобилна игра, която не можеш да спреш да играеш! +**Бонус детективска задача**: Опитай се да откриеш какви големи уебсайтове или приложения са изградени с всеки език. Гарантирам, че ще се учудиш да научиш с какво е направен Instagram, Netflix или онзи мобилен играч, от която не можеш да се откъснеш! -> 💡 **Помни**: Не опитваш да станеш експерт в тези езици днес. Просто опознаваш квартала, преди да решиш къде искаш да се заселиш. Отдели си време, забавлявай се и нека любопитството ти бъде водач! +> 💡 **Помни**: Не се опитваш да станеш експерт в нито един от тези езици днес. Просто се запознаваш с квартала, преди да решиш къде искаш да се установиш. Не бързай, забавлявай се и остави любопитството си да те води! -## Нека отпразнуваме какво откри! +## Нека отпразнуваме това, което откри! -Боже, погълнал си толкова много невероятна информация днес! Истински се вълнувам да видя колко от това страхотно пътешествие ти е останало в главата. И помни – това не е тест, в който трябва да си перфектен. Това е по-скоро празнуване на всичко интересно, което си научил за този завладяващ свят, в който си на път да се потопиш! +О, Боже, толкова много невероятна информация усвои днес! Наистина съм развълнуван да видя колко от това страхотно пътешествие е останало в теб. И помни – това не е тест, където трябва всичко да е перфектно. Това е по-скоро празник на всичко готино, което научи за този вълнуващ свят, в който се готвиш да влезеш! -[Вземи теста след урока](https://ff-quizzes.netlify.app/web/) -## Преглед и Самообучение +[Направи тест след урока](https://ff-quizzes.netlify.app/web/) -**Отделете си време да изследвате и да се забавлявате с това!** +## Преглед и самостоятелно учене -Днес преминахте през много нови неща и това е нещо, с което да се гордеете! Сега идва забавната част – да изследвате темите, които разпалиха вашето любопитство. Запомнете, това не е домашно – това е приключение! +**Отдели време да разгледаш и се забавлявай!** +Вече обхванахте много неща днес и това е нещо, с което можете да се гордеете! Сега идва забавната част – да изследвате темите, които събудиха любопитството ви. Помнете, че това не е домашна работа – това е приключение! -**Задълбайте се в нещата, които ви вълнуват:** +**Потопете се по-дълбоко в това, което ви вълнува:** -**Практикувайте с програмни езици:** -- Посетете официалните сайтове на 2-3 езика, които са привлечели вниманието ви. Всеки има своя личност и история! -- Опитайте някои онлайн програмиращи площадки като [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), или [Replit](https://replit.com/). Не се страхувайте да експериментирате – няма да счупите нищо! -- Прочетете за това как е възникнал любимият ви език. Сериозно, някои от тези истории за произхода са завладяващи и ще ви помогнат да разберете защо езиците работят така, както работят. +**Запознайте се на практика с програмните езици:** +- Посетете официалните уебсайтове на 2-3 езика, които са привлекли вниманието ви. Всеки от тях има своя собствена личност и история! +- Изпробвайте онлайн “детски площадки” за кодиране като [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), или [Replit](https://replit.com/). Не се страхувайте да експериментирате – няма как да счупите нищо! +- Прочетете за това как любимият ви език е възникнал. Сериозно, някои от тези истории за произхода са завладяващи и ще ви помогнат да разберете защо езиците работят така, както работят. **Запознайте се с новите си инструменти:** -- Свалете Visual Studio Code, ако още не сте го направили – безплатен е и ще ви хареса! -- Отделете няколко минути, за да разгледате Marketplace за разширения. Това е като магазин за приложения за вашия кодов редактор! -- Отворете Developer Tools на браузъра си и просто кликнете из тях. Не се притеснявайте да разберете всичко веднага – просто свиквайте с наличното. +- Изтеглете Visual Studio Code, ако още не сте го направили – той е безплатен и ще ви хареса! +- Прекарайте няколко минути, разглеждайки Extensions marketplace. Това е като магазин за приложения за вашия редактор на код! +- Отворете Developer Tools на браузъра си и просто кликнете наоколо. Не се притеснявайте, ако не разбирате всичко – просто се запознайте с това, което има там. **Присъединете се към общността:** -- Последвайте някои технически общности в [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), или [GitHub](https://github.com/). Програмистката общност е изключително приветлива към новодошлите! -- Гледайте видео уроци за начинаещи в YouTube. Има толкова много страхотни създатели на съдържание, които помнят какво е да започнеш. -- Помислете за участие в местни срещи или онлайн групи. Повярвайте ми, програмистите обичат да помагат на новаците! +- Последвайте някои developer общности в [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), или [GitHub](https://github.com/). Програмистката общност е изключително гостоприемна към новодошлите! +- Гледайте някои видеа за начинаещи по програмиране в YouTube. Има толкова много страхотни създатели, които помнят какво е да започваш. +- Помислете да се присъедините към местни срещи или онлайн общности. Повярвайте ми, разработчиците обичат да помагат на новите! -> 🎯 **Слушайте, ето какво искам да запомните**: Не се очаква да станете програмен магьосник за една нощ! В момента просто се запознавате с тази удивителна нова вселена, към която ще принадлежите. Отделете си време, насладете се на пътешествието и запомнете – всеки един програмист, когото уважавате, някога е седял точно там, където сте вие сега, чувствайки се развълнуван и може би малко претоварен. Това е съвсем нормално и означава, че вървите в правилната посока! +> 🎯 **Слушайте, ето какво искам да запомните**: Не се очаква да станете програмен магьосник за една нощ! В момента вие просто опознавате този удивителен нов свят, част от който предстои да станете. Отделете си време, наслаждавайте се на пътешествието и помнете – всеки един разработчик, когото уважавате, е бил някога на точно това място, където сте вие сега, усещайки вълнение и може би малко объркване. Това е напълно нормално и означава, че вървите по правилния път! @@ -784,70 +784,70 @@ pie title "Време прекарано от разработчика с инс [Reading the Docs](assignment.md) -> 💡 **Малък тласък за задачата:** Много бих искал да видя как изследвате някои инструменти, които още не сме разглеждали! Прескочете редакторите, браузърите и командните инструменти, за които вече говорихме – има цяла невероятна вселена от страхотни инструменти за разработка, която само чака да бъде открита. Потърсете такива, които са активно поддържани и имат оживени, подкрепящи общности (те обикновено имат най-добрите уроци и най-подкрепящите хора, когато някога се затрудните и имате нужда от приятелска помощ). +> 💡 **Малко подбутване за вашата задача**: Наистина бих искал да ви видя да изследвате някои инструменти, които още не сме покривали! Прескочете редакторите, браузърите и командните инструменти, за които вече говорихме – има цяла невероятна вселена от удивителни инструменти за разработка, които чакат да бъдат открити. Търсете такива, които се поддържат активно и имат живи, полезни общности (те обикновено имат най-добрите уроци и най-подкрепящите хора, когато в крайна сметка се закъсате и имате нужда от приятелска помощ). --- -## 🚀 Вашата Програмираща Пътеводителна Линия +## 🚀 Вашата времева линия за програмиране -### ⚡ **Какво можете да направите следващите 5 минути** -- [ ] Запазете като отметки 2-3 уебсайта на програмни езици, които са ви направили впечатление -- [ ] Изтеглете Visual Studio Code, ако все още не сте го направили -- [ ] Отворете Developer Tools на браузъра си (F12) и кликнете из който и да е сайт -- [ ] Присъединете се към някоя програмираща общност (Dev.to, Reddit r/webdev, или Stack Overflow) +### ⚡ **Какво можете да направите в следващите 5 минути** +- [ ] Запазете в отметки 2-3 уебсайта на програмни езици, които са привлекли вниманието ви +- [ ] Изтеглете Visual Studio Code, ако още не сте го направили +- [ ] Отворете DevTools на браузъра си (F12) и кликнете наоколо в някой уебсайт +- [ ] Присъединете се към една програмна общност (Dev.to, Reddit r/webdev или Stack Overflow) -### ⏰ **Какво можете да постигнете през този час** -- [ ] Попълнете теста след урока и обмислете отговорите си +### ⏰ **Какво можете да постигнете този час** +- [ ] Попълнете викторината след урока и помислете върху отговорите си - [ ] Настройте VS Code с разширението GitHub Copilot -- [ ] Опитайте упражнение „Hello World“ на 2 различни програмни езика онлайн -- [ ] Гледайте видео „Един ден в живота на програмиста“ в YouTube +- [ ] Изпробвайте „Hello World“ пример в 2 различни програмни езика онлайн +- [ ] Гледайте видео „Денят на един разработчик“ в YouTube - [ ] Започнете детективската си работа с програмните езици (от предизвикателството) -### 📅 **Вашето приключение за една седмица** +### 📅 **Вашето приключение за седмицата** - [ ] Завършете задачата и изследвайте 3 нови инструмента за разработка -- [ ] Последвайте 5 програмисти или програмни акаунти в социалните мрежи -- [ ] Опитайте да създадете нещо малко в CodePen или Replit (дори само „Hello, [Вашето име]!”) -- [ ] Прочетете един блог пост на програмист за неговото програмиращо пътешествие -- [ ] Присъединете се към виртуална среща или гледайте презентация по програмиране +- [ ] Последвайте 5 разработчици или програмни акаунти в социалните мрежи +- [ ] Опитайте да създадете нещо малко в CodePen или Replit (дори само „Hello, [Вашето име]!“) +- [ ] Прочетете един блог пост на разработчик за неговото пътешествие в кодирането +- [ ] Присъединете се към виртуална среща или гледайте програмен разговор - [ ] Започнете да учите избрания език с онлайн уроци ### 🗓️ **Вашата месечна трансформация** -- [ ] Създайте първия си малък проект (дори и проста уеб страница се брои!) -- [ ] Допринасяйте за проект с отворен код (започнете с поправки на документация) -- [ ] Наставлявайте някого, който тепърва започва с програмирането -- [ ] Създайте своя уебсайт портфолио за разработчик -- [ ] Свържете се с местни общности на разработчици или учебни групи -- [ ] Започнете да планирате следващата си образователна цел +- [ ] Създайте първия си малък проект (дори проста уеб страница се счита!) +- [ ] Допринесете за проект с отворен код (започнете с поправки на документацията) +- [ ] Станете ментор на някого, който току-що е започнал своето програмистко пътешествие +- [ ] Създайте своя уебсайт-портфолио като разработчик +- [ ] Свържете се с местни общности от разработчици или учебни групи +- [ ] Започнете да планирате следващата си учебна цел -### 🎯 **Финален рефлективен чек-ин** +### 🎯 **Финално проверяване и размисъл** -**Преди да продължите, отделете момент да отпразнувате:** -- Кое е едно нещо в програмирането, което ви развълнува днес? +**Преди да продължите, отделете момент за празнуване:** +- Какво едно нещо в програмирането ви развълнува днес? - Кой инструмент или концепция искате да изследвате първо? -- Как се чувствате, започвайки това програмиращо пътешествие? -- Кой е един въпрос, който бихте искали да зададете на разработчик точно сега? +- Как се чувствате по отношение на започването на това програмистко пътешествие? +- Какъв един въпрос бихте искали да зададете на разработчик точно сега? ```mermaid journey - title Вашето пътешествие към изграждане на увереност + title Вашето Пътуване за Изграждане на Самочувствие section Днес - Любопитен: 3: You - Претоварен: 4: You - Вълнуван: 5: You - section Тази седмица - Изследващ: 4: You - Учещ: 5: You - Свързващ се: 4: You - section Следващия месец - Изграждащ: 5: You - Уверен: 5: You - Помагащ на другите: 5: You + Curious: 3: You + Overwhelmed: 4: You + Excited: 5: You + section Тази Седмица + Exploring: 4: You + Learning: 5: You + Connecting: 4: You + section Следващия Месец + Building: 5: You + Confident: 5: You + Helping Others: 5: You ``` -> 🌟 **Запомнете**: Всеки експерт някога е бил начинаещ. Всеки старши разработчик някога се е чувствал точно както вие сега – развълнуван, може би малко претоварен и определено любопитен какво е възможно. Вие сте в удивителна компания и това пътешествие ще бъде невероятно. Добре дошли в прекрасния свят на програмирането! 🎉 +> 🌟 **Помнете**: Всеки експерт някога е бил начинаещ. Всеки старши разработчик някога се е чувствал точно както вие сега – развълнуван, може би леко объркан и със сигурност любопитен какво е възможно. Вие сте в страхотно общество и това пътешествие ще бъде невероятно. Добре дошли в прекрасния свят на програмирането! 🎉 --- -**Отказ от отговорност**: -Този документ е преведен с използване на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод. +**Отказ от отговорност**: +Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни тълкувания, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/AGENTS.md b/translations/bg/AGENTS.md index 01ae6fd2a..4ad633987 100644 --- a/translations/bg/AGENTS.md +++ b/translations/bg/AGENTS.md @@ -2,29 +2,29 @@ ## Преглед на проекта -Това е образователно хранилище с учебна програма за преподаване на основите на уеб разработката за начинаещи. Учебната програма е всеобхватен 12-седмичен курс, разработен от Microsoft Cloud Advocates, включващ 24 практични урока, обхващащи JavaScript, CSS и HTML. +Това е учебен репозиторий за преподаване на основите на уеб разработката за начинаещи. Учебният план е цялостен 12-седмичен курс, разработен от Microsoft Cloud Advocates, съдържащ 24 практически урока, покриващи JavaScript, CSS и HTML. ### Основни компоненти -- **Образователно съдържание**: 24 структурирани урока, организирани в модули с проекти +- **Образователно съдържание**: 24 структурирани урока, организирани в проекти-базирани модули - **Практически проекти**: Terrarium, Typing Game, Browser Extension, Space Game, Banking App, Code Editor и AI Chat Assistant -- **Интерактивни викторини**: 48 викторини с по 3 въпроса всяка (оценки преди и след урока) -- **Поддръжка на множество езици**: Автоматични преводи на над 50 езика чрез GitHub Actions +- **Интерактивни куизове**: 48 куиза с по 3 въпроса всеки (оценка преди и след урока) +- **Поддръжка на много езици**: Автоматични преводи за 50+ езика чрез GitHub Actions - **Технологии**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (за AI проекти) ### Архитектура -- Образователно хранилище със структура, базирана на уроци -- Всяка папка с урок съдържа README, примерен код и решения -- Самостоятелни проекти в отделни директории (quiz-app, различни проекти за уроци) +- Образователен репозиторий с уроци, организирани по структура +- Във всяка папка на урок има README, примери с код и решения +- Самостоятелни проекти в отделни директории (quiz-app, различни проектни уроци) - Система за превод чрез GitHub Actions (co-op-translator) -- Документация, предоставяна чрез Docsify и достъпна като PDF +- Документацията се обслужва чрез Docsify и е налична като PDF ## Команди за настройка -Това хранилище е основно за консумация на образователно съдържание. За работа с конкретни проекти: +Този репозиторий е основно за консумация на образователно съдържание. За работа с конкретни проекти: -### Основна настройка на хранилището +### Основна настройка на репозитория ```bash git clone https://github.com/microsoft/Web-Dev-For-Beginners.git @@ -36,12 +36,12 @@ cd Web-Dev-For-Beginners ```bash cd quiz-app npm install -npm run dev # Стартиране на сървъра за разработка -npm run build # Компилиране за продукция +npm run dev # Стартиране на сървър за разработка +npm run build # Създаване на билд за продукция npm run lint # Стартиране на ESLint ``` -### Bank Project API (Node.js + Express) +### API на Bank Project (Node.js + Express) ```bash cd 7-bank-project/api @@ -51,12 +51,12 @@ npm run lint # Стартиране на ESLint npm run format # Форматиране с Prettier ``` -### Проекти за браузър разширения +### Проекти за Browser Extension ```bash cd 5-browser-extension/solution npm install -# Следвайте инструкциите за зареждане на разширения, специфични за браузъра +# Следвайте специфичните за браузъра инструкции за зареждане на разширения ``` ### Проекти за Space Game @@ -64,140 +64,140 @@ npm install ```bash cd 6-space-game/solution npm install -# Отворете index.html в браузъра или използвайте Live Server +# Отворете index.html в браузър или използвайте Live Server ``` -### Chat Project (Python Backend) +### Chat Project (Python бекенд) ```bash cd 9-chat-project/solution/backend/python pip install openai -# Задаване на променлива на околната среда GITHUB_TOKEN +# Задайте променливата на средата GITHUB_TOKEN python api.py ``` -## Работен процес за разработка +## Работа по разработване -### За сътрудници по съдържанието +### За съдържателите на материалите -1. **Форкнете хранилището** във вашия GitHub акаунт -2. **Клонирайте своя форк** локално -3. **Създайте нов клон** за промените си -4. Направете промени в съдържанието на уроците или примерния код -5. Тествайте всякакви промени в кода в съответните директории на проектите -6. Подайте pull request според указанията за принос +1. **Форкнете репозитория** към вашия GitHub акаунт +2. **Клонирайте вашия форк** локално +3. **Създайте нов клон** за вашите промени +4. Правете промени в съдържанието на уроците или кодовите примери +5. Тествайте всякакви промени в код в съответните проектни директории +6. Изпращайте pull request-и според насоките за допринасяне -### За обучаващи се +### За учащите -1. Форкнете или клонирайте хранилището -2. Навигирайте последователно към директориите на уроците +1. Форкнете или клонирайте репозитория +2. Навигирайте последователно в папките с уроци 3. Прочетете README файловете за всеки урок -4. Попълнете викторините преди урока на https://ff-quizzes.netlify.app/web/ -5. Работете с примерите в папките с уроци -6. Изпълнете задачи и предизвикателства -7. Попълнете викторините след урока +4. Попълнете куизовете преди урока на https://ff-quizzes.netlify.app/web/ +5. Работете върху кодовите примери в папките на урока +6. Изпълнявайте задачи и предизвикателства +7. Изпълнете куизовете след урока -### Жива разработка +### Живо разработване -- **Документация**: Стартирайте `docsify serve` в корена (порт 3000) -- **Quiz App**: Стартирайте `npm run dev` в директорията quiz-app +- **Документация**: Стартирайте `docsify serve` от главната директория (порт 3000) +- **Quiz App**: Стартирайте `npm run dev` в директория quiz-app - **Проекти**: Използвайте разширението VS Code Live Server за HTML проекти -- **API проекти**: Стартирайте `npm start` в съответните API директории +- **API Проекти**: Стартирайте `npm start` в съответните API директории ## Инструкции за тестване -### Тестове за Quiz App +### Тестване на Quiz App ```bash cd quiz-app -npm run lint # Проверка за проблеми със стила на кода -npm run build # Провери дали сборката е успешна +npm run lint # Проверете за проблеми със стил на кода +npm run build # Потвърдете, че изграждането е успешно ``` -### Тестове за Bank API +### Тестване на Bank API ```bash cd 7-bank-project/api -npm run lint # Проверка за проблеми със стила на кода -node server.js # Проверка дали сървърът стартира без грешки +npm run lint # Провери за проблеми със стила на кода +node server.js # Потвърди, че сървърът стартира без грешки ``` -### Обща стратегия за тестване +### Общ подход към тестването -- Това е образователно хранилище без пълни автоматизирани тестове +- Това е образователен репозиторий без комплексни автоматизирани тестове - Ръчното тестване се фокусира върху: - - Примерният код да се изпълнява без грешки - - Връзките в документацията да работят правилно - - Проектите да се компилират успешно - - Примерите да следват добри практики + - Работещи без грешки кодови примери + - Работещи връзки в документацията + - Успешно компилиране на проектите + - Примери, които следват най-добрите практики ### Проверки преди подаване - Стартирайте `npm run lint` в директории с package.json - Проверете дали markdown връзките са валидни -- Тествайте примерите в браузър или Node.js +- Тествайте кодовите примери в браузър или Node.js - Уверете се, че преводите запазват правилната структура ## Насоки за стил на кода ### JavaScript -- Използвайте модерен ES6+ синтаксис +- Използвайте съвременен синтаксис ES6+ - Спазвайте стандартните ESLint конфигурации, предоставени в проектите -- Използвайте смислени имена на променливи и функции за по-голяма образователна яснота -- Добавяйте коментари, обясняващи концепции за обучаващите се -- Форматирайте кода с Prettier, където е конфигурирано +- Използвайте смислени имена на променливи и функции за образователна яснота +- Добавяйте коментари обясняващи концепциите за учащите +- Форматирайте с Prettier където е конфигуриран ### HTML/CSS - Семантични HTML5 елементи - Принципи на адаптивен дизайн - Ясни наименования на класове -- Коментари, обясняващи CSS техники за учащи се +- Коментари, обясняващи CSS техники за учащите ### Python -- Насоки по стил PEP 8 -- Ясни, образователни примери за код -- Типови указания, където са полезни за обучение +- Насоки за стил PEP 8 +- Ясни, образователни кодови примери +- Типово обозначаване където е полезно за ученето ### Markdown документация -- Ясна йерархия на заглавията -- Блокове с код с посочен език +- Ясна йерархия от заглавия +- Кодови блокове с посочен език - Връзки към допълнителни ресурси -- Скрийнове и изображения в папки `images/` +- Скрийншотове и изображения в папки `images/` - Алтернативен текст за изображения за достъпност ### Организация на файловете -- Уроки, номерирани последователно (1-getting-started-lessons, 2-js-basics и т.н.) -- Всеки проект има папки `solution/`, а често и `start/` или `your-work/` -- Изображенията се съхраняват в папки `images/` за съответния урок -- Преводите са под структура `translations/{language-code}/` +- Уроци номерирани последователно (1-getting-started-lessons, 2-js-basics и т.н.) +- Във всеки проект има `solution/` и често `start/` или `your-work/` директории +- Изображения съхранявани в папки за всеки урок `images/` +- Преводи в структура `translations/{language-code}/` -## Сглобяване и деплоймент +## Сглобяване и разгръщане -### Деплой на Quiz App (Azure Static Web Apps) +### Разгръщане на Quiz App (Azure Static Web Apps) -quiz-app е конфигуриран за деплой на Azure Static Web Apps: +quiz-app е конфигуриран за разгръщане в Azure Static Web Apps: ```bash cd quiz-app npm run build # Създава папка dist/ -# Извършва разгръщане чрез работния процес на GitHub Actions при push към main +# Разгръща чрез GitHub Actions workflow при push към main ``` -Конфигурация на Azure Static Web Apps: +Конфигурация за Azure Static Web Apps: - **Местоположение на приложението**: `/quiz-app` -- **Местоположение на изхода**: `dist` -- **Workflow**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` +- **Изходна директория**: `dist` +- **Работен процес**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` -### Генериране на PDF за документация +### Генериране на PDF документация ```bash npm install # Инсталирайте docsify-to-pdf -npm run convert # Генерирайте PDF от документи +npm run convert # Генерирайте PDF от docs ``` ### Документация с Docsify @@ -207,76 +207,76 @@ npm install -g docsify-cli # Инсталирайте Docsify глобалн docsify serve # Стартирайте на localhost:3000 ``` -### Сглобявания на проекти +### Сглобяване по проекти -Всяка проектна директория може да има собствен процес на сглобяване: +Всяка проектна директория може да има собствен процес на изграждане: - Vue проекти: `npm run build` създава продукционни пакети -- Статични проекти: няма стъпка за build, файловете се сервира директно +- Статични проекти: без стъпка за билд, обслужват файловете директно -## Насоки за pull request +## Насоки при pull request-и ### Формат на заглавието Използвайте ясни, описателни заглавия, указващи областта на промяната: -- `[Quiz-app] Добавяне на нова викторина за урок X` +- `[Quiz-app] Добавяне на нов куиз за урок X` - `[Lesson-3] Корекция на правописна грешка в проекта terrarium` - `[Translation] Добавяне на испански превод за урок 5` -- `[Docs] Актуализация на инструкции за настройка` +- `[Docs] Актуализация на инструкциите за настройка` -### Задължителни проверки +### Изисквани проверки Преди подаване на PR: -1. **Код качество**: - - Стартирайте `npm run lint` в засегнатите директории на проектите - - Коригирайте всички грешки и предупреждения +1. **Качество на кода**: + - Стартирайте `npm run lint` в засегнатите проектни директории + - Поправете всички грешки и предупреждения 2. **Проверка на билд**: - - Стартирайте `npm run build`, ако е приложимо - - Уверете се, че няма грешки по време на build + - Стартирайте `npm run build` ако е приложимо + - Уверете се, че няма грешки при билда -3. **Проверка на връзките**: +3. **Проверка на връзки**: - Тествайте всички markdown връзки - - Проверете дали референциите към изображенията са работещи + - Проверете дали изображенията се зареждат 4. **Преглед на съдържанието**: - - Проверете правописа и граматиката - - Уверете се, че примерите са правилни и образователни - - Верифицирайте, че преводите запазват оригиналното значение + - Коректура за правопис и граматика + - Уверете се, че кодовите примери са точни и образователни + - Проверката на преводите за запазване на оригиналния смисъл -### Изисквания за принос +### Изисквания за допринасяне - Съгласие с Microsoft CLA (автоматична проверка при първи PR) -- Спазване на [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) -- Вижте [CONTRIBUTING.md](./CONTRIBUTING.md) за подробни указания -- Позоваване на номера на issues в описанието на PR, ако е приложимо +- Спазвайте [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- Вижте [CONTRIBUTING.md](./CONTRIBUTING.md) за подробни насоки +- Посочвайте номера на съществуващи проблеми в описанието на PR ако има такива ### Процес на преглед -- PR-овете се преглеждат от поддържащите и общността -- Образователната яснота е приоритет -- Примерите в кода трябва да следват актуални добри практики -- Преводите се проверяват за точност и културна адекватност +- PR-овете се преглеждат от поддръжници и общността +- Приоритет е образователната яснота +- Кодови примери трябва да следват актуалните най-добри практики +- Преводите се проверяват за точност и културна съобразност ## Система за превод -### Автоматизиран превод +### Автоматичен превод - Използва GitHub Actions с workflow co-op-translator -- Автоматично превежда на 50+ езика -- Изходните файлове са в основните директории -- Преведените файлове са в `translations/{language-code}/` директории +- Превежда автоматично на 50+ езика +- Изходни файлове в основните директории +- Преведени файлове в директории `translations/{language-code}/` -### Добавяне на ръчни подобрения на превода +### Добавяне на ръчни подобрения в преводите -1. Намерете файла в `translations/{language-code}/` -2. Направете подобрения, като запазвате структурата -3. Уверете се, че примерите за код остават функционални -4. Тествайте преведеното викторинно съдържание +1. Намирайте файл в `translations/{language-code}/` +2. Правете подобрения, като запазвате структурата +3. Уверете се, че кодовите примери остават функционални +4. Тествайте всяко локализирано куиз съдържание -### Метаданни за превода +### Метаданни за превод -Преведените файлове включват метаданни в заглавката: +Преведените файлове съдържат метаданни в заглавен блок: ```markdown **Отказ от отговорност**: -Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за никакви недоразумения или неправилни тълкувания, възникнали от използването на този превод. +Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или неправилни тълкувания, възникнали от използването на този превод. \ No newline at end of file diff --git a/translations/bg/README.md b/translations/bg/README.md index eb5ce61b0..def8d63b1 100644 --- a/translations/bg/README.md +++ b/translations/bg/README.md @@ -1,211 +1,197 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/Web-Dev-For-Beginners.svg)](https://github.com/microsoft/Web-Dev-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/Web-Dev-For-Beginners.svg)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/Web-Dev-For-Beginners.svg)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/Web-Dev-For-Beginners.svg)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) +# Уеб разработка за начинаещи - учебна програма -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/Web-Dev-For-Beginners.svg?style=social&label=Watch&maxAge=2592000)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-Beginners.svg?style=social&label=Fork&maxAge=2592000)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/Web-Dev-For-Beginners.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/stargazers/) +Научете основите на уеб разработката с нашия 12-седмичен всеобхватен курс от Microsoft Cloud Advocates. Всеки от 24-те урока разглежда JavaScript, CSS и HTML чрез практически проекти като терариуми, разширения за браузър и космически игри. Включете се с викторини, дискусии и практически задачи. Подобрете уменията си и оптимизирайте усвояването на знания с нашата ефективна педагогика, базирана на проекти. Започнете своето пътешествие в кодирането още днес! -[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) - -# Уеб разработка за начинаещи - Учебна програма - -Научете основите на уеб разработката с нашия 12-седмичен подробен курс, воден от Microsoft Cloud Advocates. Във всеки от 24-те урока се разглеждат JavaScript, CSS и HTML чрез практически проекти като терариуми, разширения за браузър и космически игри. Вземете участие в викторини, дискусии и практически задачи. Усъвършенствайте уменията си и оптимизирайте задържането на знания с нашата ефективна, проектно базирана педагогика. Започнете своето обучение по програмиране още днес! - -Присъединете се към Discord общността на Azure AI Foundry - -[![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) +Присъединете се към общността Azure AI Foundry в Discord Следвайте тези стъпки, за да започнете да използвате тези ресурси: -1. **Направете форк на репoзиторията**: Кликнете [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) -2. **Клонирайте репозиторията**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -3. [**Присъединете се към Azure AI Foundry Discord и се запознайте с експерти и други разработчици**](https://discord.com/invite/ByRwuEEgH4) +1. **Форкнете хранилището**: Кликнете [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) +2. **Клонирайте хранилището**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` +3. [**Присъединете се към Azure AI Foundry Discord и срещнете експерти и други разработчици**](https://discord.com/invite/ByRwuEEgH4) ### 🌐 Поддръжка на множество езици -#### Поддържа се чрез GitHub Action (автоматично и винаги актуално) - - -[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](./README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md) +#### Поддържа се чрез GitHub Action (автоматизирано и винаги актуално) > **Предпочитате да клонирате локално?** - -> Този репозитори включва над 50 езикови превода, което значително увеличава размера на изтеглянето. За да клонирате без преводи, използвайте sparse checkout: +> +> Това хранилище включва над 50 езикови превода, което значително увеличава размера на изтегляне. За да клонирате без преводите, използвайте sparse checkout: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` -> Това ви дава всичко необходимо за завършване на курса с много по-бързо изтегляне. - - -**Ако желаете да бъдат добавени допълнителни преводи, поддържаните езици са изброени [тук](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> +> Това ви осигурява всичко необходимо за завършване на курса с много по-бързо изтегляне. -[![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) +**Ако желаете поддръжка на допълнителни езици за превод, те са посочени [тук](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** #### 🧑‍🎓 _Студент ли сте?_ -Посетете [**Студентския център**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), където ще намерите ресурси за начинаещи, студентски пакети и дори възможности да получите безплатен ваучер за сертификат. Това е страницата, която искате да добавите в отметките си и от време на време да проверявате, тъй като месечно сменяме съдържанието. +Посетете [**страницата Студентски център**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), където ще намерите източници за начинаещи, студентски пакети и дори възможности за получаване на безплатен ваучер за сертификат. Това е страницата, която си струва да запазите и проверявате периодично, тъй като съдържанието се обновява месечно. -### 📣 Обявление - Нови предизвикателства в режим GitHub Copilot Agent за изпълнение! +### 📣 Обява - Нови предизвикателства в GitHub Copilot Agent режим! -Добавено е ново предизвикателство, потърсете "GitHub Copilot Agent Challenge 🚀" в повечето глави. Това е ново предизвикателство за вас да го изпълните с помощта на GitHub Copilot и режима Agent. Ако не сте ползвали режима Agent преди, той може не само да генерира текст, но и да създава и редактира файлове, изпълнява команди и други. +Добавено е ново предизвикателство, потърсете "GitHub Copilot Agent Challenge 🚀" в повечето глави. Това е ново предизвикателство, което да завършите, използвайки GitHub Copilot и Agent режим. Ако не сте използвали досега Agent режим, той може не само да генерира текст, но и да създава и редактира файлове, да изпълнява команди и още. -### 📣 Обявление - _Нов проект за създаване с генериращ изкуствен интелект_ +### 📣 Обява - _Нов проект за разработка с използване на генеративен AI_ -Току-що добавен нов AI Assistant проект, разгледайте го [тук](./9-chat-project/README.md) +Току-що добавен нов проект AI Асистент, разгледайте го [тук](./9-chat-project/README.md) -### 📣 Обявление - _Нова учебна програма_ за Генеративен изкуствен интелект за JavaScript току-що беше пусната +### 📣 Обява - _Нова учебна програма_ за генеративен AI за JavaScript току-що излезе -Не пропускайте нашата нова учебна програма за Генеративен ИИ! +Не пропускайте новия ни курс за генеративен AI! Посетете [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course), за да започнете! -![Background](../../translated_images/bg/background.148a8d43afde5730.webp) - -- Уроци, обхващащи всичко от основи до RAG. +- Уроци, обхващащи всичко от основите до RAG. - Взаимодействайте с исторически персонажи чрез GenAI и нашето спомагателно приложение. -- Забавно и увлекателно повествование, ще пътувате във времето! +- Забавен и ангажиращ разказ, пътуване във времето! -![character](../../translated_images/bg/character.5c0dd8e067ffd693.webp) - -Всеки урок включва задача за изпълнение, проверка на знанията и предизвикателство, които да ви насочват в изучаването на теми като: -- Задаване на заявки и инженеринг на заявки -- Генериране на приложения за текст и изображения -- Търсещи приложения +Във всеки урок има задача за изпълнение, проверка на знанията и предизвикателство, които ви насочват към изучаване на теми като: +- Създаване на команди и инженерство на подкани +- Генериране на текст и изображения за приложения +- Приложения за търсене Посетете [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course), за да започнете! -## 🌱 Започване +## 🌱 Как да започнете -> **Учители**, включили сме [някои предложения](for-teachers.md) как да използвате тази учебна програма. Ще се радваме на вашите отзиви [в нашия дискусионен форум](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! +> **Учители**, включили сме някои предложения [тук](for-teachers.md) за използване на тази учебна програма. Ще се радваме на обратна връзка [в нашия форум за обсъждания](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! -**[Ученици](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, за всеки урок започнете с предварителна викторина и продължете с четене на учебния материал, изпълнение на различните дейности и проверка на разбирането си с постлекционната викторина. +**[Обучаващи се](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, за всеки урок започнете с тест преди лекцията и продължете с четене на учебния материал, изпълнение на различни дейности и проверете разбирането си чрез тест след лекцията. -За да подобрите учебния си опит, свържете се с връстниците си, за да работите заедно по проектите! Насърчават се дискусии в нашия [дискусионен форум](https://github.com/microsoft/Web-Dev-For-Beginners/discussions), където нашият екип от модератори ще бъде на разположение да отговаря на вашите въпроси. +За по-добро изживяване в ученето, свържете се с вашите връстници за съвместна работа по проектите! Обсъжданията са насърчавани в нашия [форум за обсъждания](https://github.com/microsoft/Web-Dev-For-Beginners/discussions), където нашият екип от модератори е на разположение да отговори на вашите въпроси. -За да развиете образованието си допълнително, силно препоръчваме да разгледате [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) за допълнителни учебни материали. +За да задълбочите обучението си, силно препоръчваме да изследвате [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) за допълнителни учебни материали. ### 📋 Настройване на вашата среда -Тази учебна програма разполага с готова за употреба среда за разработка! Когато започнете, можете да изберете да стартирате учебната програма в [Codespace](https://github.com/features/codespaces/) (_среда в браузъра, без нужда от инсталация_), или локално на вашия компютър, използвайки текстов редактор като [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +Тази учебна програма включва готова развойна среда! Когато започвате можете да изберете да използвате курса в [Codespace](https://github.com/features/codespaces/) (_браузър-базирана среда без нужда от инсталации_), или локално на компютъра си с текстов редактор, като например [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). -#### Създайте своето репозитори -За да запазите лесно своята работа, препоръчваме да създадете собствено копие на това репозитори. Можете да го направите, като кликнете върху бутона **Use this template** в горната част на страницата. Това ще създаде ново репозитори във вашия GitHub акаунт с копие на учебната програма. +#### Създайте свое хранилище +За да запазвате лесно работата си, е препоръчително да създадете собствено копие на това хранилище. Можете да го направите, като кликнете на бутона **Use this template** в горната част на страницата. Това ще създаде ново хранилище в профила ви в GitHub с копие на учебната програма. Следвайте тези стъпки: -1. **Направете форк на репозиторията**: Кликнете на бутона "Fork" в горния десен ъгъл на тази страница. -2. **Клонирайте репозиторията**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` +1. **Форкнете хранилището**: Кликнете бутона "Fork" в горния десен ъгъл на тази страница. +2. **Клонирайте хранилището**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -#### Стартиране на учебната програма в Codespace +#### Използване на учебната програма в Codespace -В копието на репозитория, което създадохте, кликнете върху бутона **Code** и изберете **Open with Codespaces**. Това ще създаде нов Codespace, в който да работите. +В създаденото от вас копие на хранилището, кликнете бутона **Code** и изберете **Open with Codespaces**. Това ще създаде нов Codespace, в който можете да работите. ![Codespace](../../translated_images/bg/createcodespace.0238bbf4d7a8d955.webp) -#### Стартиране на учебната програма локално на вашия компютър - -За да стартирате учебната програма локално на компютъра си, ще ви е необходим текстов редактор, браузър и инструмент за команден ред. Първият ни урок, [Въведение в програмните езици и инструментите](../../1-getting-started-lessons/1-intro-to-programming-languages), ще ви преведе през различни опции за всеки от тези инструменти, за да изберете най-подходящите за вас. +#### Използване на учебната програма локално на вашия компютър -Препоръчваме да използвате [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) като ваш редактор, който също разполага с вграден [Терминал](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Можете да изтеглите Visual Studio Code от [тук](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +За да стартирате учебната програма локално, ще ви трябва текстов редактор, браузър и команден терминал. Нашият първи урок, [Въведение в програмните езици и инструментите](../../1-getting-started-lessons/1-intro-to-programming-languages), ще ви преведе през различни опции за всеки от тези инструменти, за да изберете най-подходящите за вас. -1. Клонирайте своето репозитори на компютъра си. Можете да го направите, като кликнете бутона **Code** и копирате URL адреса: +Нашата препоръка е да използвате [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) като редактор, който включва и интегриран [Терминал](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Можете да изтеглите Visual Studio Code [тук](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +1. Клонирайте хранилището си на компютъра. Можете да го направите като кликнете върху бутона **Code** и копирате URL адреса: [CodeSpace](./images/createcodespace.png) - След това отворете [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) в [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) и изпълнете следната команда, като замените `` с URL адреса, който току-що копирахте: + + След това отворете [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) в [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) и изпълнете следната команда, като замените `` с току-що копирания URL адрес: ```bash git clone ``` -2. Отворете папката във Visual Studio Code. Можете да направите това, като кликнете върху **File** > **Open Folder** и изберете току-що клонираната папка. +2. Отворете папката във Visual Studio Code. Можете да го направите като кликнете върху **File** > **Open Folder** и изберете папката, която току-що клонирахте. > Препоръчителни разширения за Visual Studio Code: > -> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - за визуализиране на HTML страници във Visual Studio Code -> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - за по-бързо писане на код +> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - за преглед на HTML страници в Visual Studio Code +> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - за бързо писане на код -## 📂 Всяка лекция включва: +## 📂 Всяко занятие включва: -- опционален скицник -- опционално допълнително видео -- подготовително викторина преди урока +- по избор скица +- по избор допълнително видео +- въпросник за загряване преди занятието - писмен урок -- за уроци базирани на проекти, стъпка по стъпка ръководства как да се изгради проекта -- тестове за проверка на знанията +- за занятия на база проект, стъпка по стъпка инструкции за изграждане на проекта +- проверки на знанията - предизвикателство - допълнително четиво - задача -- [викторина след урока](https://ff-quizzes.netlify.app/web/) - -> **Забележка относно викторините**: Всички викторини са в папката Quiz-app, общо 48 викторини с по три въпроса. Те са налични [тук](https://ff-quizzes.netlify.app/web/), приложението за викторини може да се стартира локално или да се разположи в Azure; следвайте инструкциите в папката `quiz-app`. - -## 🗃️ Уроци - -| | Име на проекта | Обучавани концепции | Учебни цели | Свързан урок | Автор | -| :-: | :--------------------------------------------------------: | :------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------- | :-----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | -| 01 | Започване | Въведение в програмирането и инструментите на професията | Научете основите зад повечето програмни езици и софтуерен инструментариум, който помага на професионалните разработчици | [Въведение в програмените езици и инструменти](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | -| 02 | Започване | Основи на GitHub, включително работа в екип | Как да използвате GitHub в своя проект, как да си сътрудничите с други върху кодовата база | [Въведение в GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | -| 03 | Започване | Достъпност | Научете основите на достъпността в уеб | [Основи на достъпността](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | -| 04 | JS Основи | Типове данни в JavaScript | Основите на типовете данни в JavaScript | [Типове данни](./2-js-basics/1-data-types/README.md) | Jasmine | -| 05 | JS Основи | Функции и методи | Научете за функциите и методите за управление на логиката на приложение | [Функции и методи](./2-js-basics/2-functions-methods/README.md) | Jasmine и Christopher | -| 06 | JS Основи | Взимане на решения с JS | Научете как да създавате условия във вашия код чрез методи за вземане на решения | [Вземане на решения](./2-js-basics/3-making-decisions/README.md) | Jasmine | -| 07 | JS Основи | Масиви и цикли | Работете с данни чрез масиви и цикли в JavaScript | [Масиви и цикли](./2-js-basics/4-arrays-loops/README.md) | Jasmine | -| 08 | [Терариум](./3-terrarium/solution/README.md) | HTML на практика | Създайте HTML за онлайн терариум, с фокус върху изграждането на оформление | [Въведение в HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | -| 09 | [Терариум](./3-terrarium/solution/README.md) | CSS на практика | Създайте CSS за стилизиране на онлайн терариума, включително основите на CSS и направата на страница отзивчива | [Въведение в CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | -| 10 | [Терариум](./3-terrarium/solution/README.md) | Заключвания в JavaScript, манипулиране на DOM | Създайте JavaScript за работа на терариума като интерфейс за влачене и пускане, фокусирайки се върху заключвания и DOM | [Заключвания в JS, манипулация на DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | -| 11 | [Игра за писане](./4-typing-game/solution/README.md) | Създаване на игра за писане | Научете как да използвате клавишни събития за задвижване на логиката на приложението си на JavaScript | [Програмиране базирано на събития](./4-typing-game/typing-game/README.md) | Christopher | -| 12 | [Зелен браузър екстензия](./5-browser-extension/solution/README.md) | Работа с браузъри | Научете как работят браузърите, тяхната история и как да изградите първите елементи на екстензия за браузър | [За браузърите](./5-browser-extension/1-about-browsers/README.md) | Jen | -| 13 | [Зелен браузър екстензия](./5-browser-extension/solution/README.md) | Създаване на формуляр, извикване на API и съхраняване на променливи локално | Създайте JavaScript елементите на браузър екстензията си за извикване на API чрез променливи, съхранявани локално | [API, формуляри и локално съхранение](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | -| 14 | [Зелен браузър екстензия](./5-browser-extension/solution/README.md) | Фонови процеси в браузъра, уеб производителност | Използвайте фоновите процеси на браузъра за управление на иконата на екстензията; научете за уеб производителността и оптимизации | [Фонови задачи и производителност](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | -| 15 | [Космическа игра](./6-space-game/solution/README.md) | По-напреднало разработване на игри с JavaScript | Научете за наследяването чрез класове и композиция, както и за патерна Pub/Sub, подготвяйки се за изграждане на игра | [Въведение в напреднало разработване на игри](./6-space-game/1-introduction/README.md) | Chris | -| 16 | [Космическа игра](./6-space-game/solution/README.md) | Рисуване в canvas | Научете за Canvas API, използван за рисуване на елементи на екрана | [Рисуване в Canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | -| 17 | [Космическа игра](./6-space-game/solution/README.md) | Преместване на елементи по екрана | Открийте как елементите придобиват движение чрез декартови координати и Canvas API | [Преместване на елементи](./6-space-game/3-moving-elements-around/README.md) | Chris | -| 18 | [Космическа игра](./6-space-game/solution/README.md) | Откриване на сблъсъци | Направете елементите да се сблъскват и реагират на натискане на клавиши и добавете функция за охлаждане, за да подобрите изпълнението | [Откриване на сблъсъци](./6-space-game/4-collision-detection/README.md) | Chris | -| 19 | [Космическа игра](./6-space-game/solution/README.md) | Водене на резултата | Извършете математически изчисления въз основа на състоянието и представянето на играта | [Водене на резултата](./6-space-game/5-keeping-score/README.md) | Chris | -| 20 | [Космическа игра](./6-space-game/solution/README.md) | Край и рестартиране на играта | Научете как да приключите и рестартирате играта, включително почистване на ресурси и нулиране на променливите | [Условия за край](./6-space-game/6-end-condition/README.md) | Chris | -| 21 | [Банкова Апликация](./7-bank-project/solution/README.md) | HTML шаблони и маршрути в уеб приложение | Научете как да създадете структурата на многостраничен уебсайт с използване на маршрутизация и HTML шаблони | [HTML шаблони и маршрути](./7-bank-project/1-template-route/README.md) | Yohan | -| 22 | [Банкова Апликация](./7-bank-project/solution/README.md) | Създаване на формуляр за вход и регистрация | Научете как се изграждат формуляри и как да се обработва валидирането | [Формуляри](./7-bank-project/2-forms/README.md) | Yohan | -| 23 | [Банкова Апликация](./7-bank-project/solution/README.md) | Методи за извличане и използване на данни | Как данните влизат и излизат от вашето приложение, как да ги извличате, съхранявате и изхвърляте | [Данни](./7-bank-project/3-data/README.md) | Yohan | -| 24 | [Банкова Апликация](./7-bank-project/solution/README.md) | Концепции за управление на състоянието | Научете как приложението ви запазва състояние и как да го управлявате програмно | [Управление на състоянието](./7-bank-project/4-state-management/README.md) | Yohan | -| 25 | [Browser/VScode Code](../../8-code-editor) | Работа с VScode | Научете как да използвате кодов редактор | [Използване на VScode Code Editor](./8-code-editor/1-using-a-code-editor/README.md) | Chris | -| 26 | [AI Асистенти](./9-chat-project/README.md) | Работа с AI | Научете как да изградите свой собствен AI помощник | [Проект AI Assistant](./9-chat-project/README.md) | Chris | +- [въпросник след занятието](https://ff-quizzes.netlify.app/web/) + +> **Бележка за въпросниците**: Всички въпросници са в папката Quiz-app, общо 48 с по три въпроса. Те са достъпни [тук](https://ff-quizzes.netlify.app/web/), приложението за въпросниците може да се изпълни локално или да се публикува в Azure; следвайте инструкциите в папката `quiz-app`. + +## 🗃️ Занятия + +| | Име на проекта | Преподавани концепции | Учебни цели | Свързан урок | Автор | +| :-: | :--------------------------------------------------------: | :--------------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | +| 01 | Започване | Въведение в програмирането и инструментите на професията | Научете основите на повечето програмни езици и софтуер, който помага на професионалните разработчици да вършат работата си | [Въведение в програмните езици и инструментите](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | +| 02 | Започване | Основи на GitHub, включително работа в екип | Как да използвате GitHub в своя проект, как да сътрудничите по код | [Въведение в GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | +| 03 | Започване | Достъпност | Научете основите на уеб достъпността | [Основи на достъпността](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | +| 04 | Основи на JS | Типове данни в JavaScript | Основи на типовете данни в JavaScript | [Типове данни](./2-js-basics/1-data-types/README.md) | Jasmine | +| 05 | Основи на JS | Функции и методи | Научете за функциите и методите за управление на логиката на приложението | [Функции и методи](./2-js-basics/2-functions-methods/README.md) | Jasmine и Christopher | +| 06 | Основи на JS | Вземане на решения с JS | Научете как да създавате условия във вашия код с методи за вземане на решения | [Вземане на решения](./2-js-basics/3-making-decisions/README.md) | Jasmine | +| 07 | Основи на JS | Масиви и цикли | Работа с данни чрез масиви и цикли в JavaScript | [Масиви и цикли](./2-js-basics/4-arrays-loops/README.md) | Jasmine | +| 08 | [Терариум](./3-terrarium/solution/README.md) | Практическо HTML | Създайте HTML за онлайн терариум, съсредоточавайки се върху изграждането на оформлението | [Въведение в HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | +| 09 | [Терариум](./3-terrarium/solution/README.md) | Практическо CSS | Създайте CSS за стилизиране на онлайн терариума, фокусирайки се върху основите на CSS, включително правене на страницата отзивчива | [Въведение в CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | +| 10 | [Терариум](./3-terrarium/solution/README.md) | JavaScript Closures, манипулация на DOM | Създайте JavaScript, за да направите терариума с интерфейс за влачене и пускане, съсредоточени върху closures и манипулация на DOM | [JavaScript Closures, манипулация на DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | +| 11 | [Игра за писане](./4-typing-game/solution/README.md) | Създаване на игра за писане | Научете как да използвате клавиатурни събития за управление на логиката в JavaScript приложението ви | [Програмиране, базирано на събития](./4-typing-game/typing-game/README.md) | Christopher | +| 12 | [Разширение за браузър](./5-browser-extension/solution/README.md) | Работа с браузъри | Научете как работят браузърите, тяхната история и как да създадете първите елементи на разширение за браузър | [Относно браузърите](./5-browser-extension/1-about-browsers/README.md) | Jen | +| 13 | [Разширение за браузър](./5-browser-extension/solution/README.md) | Изграждане на форма, извикване на API и съхраняване на променливи локално | Създайте JavaScript елементи на разширението си за браузър, за да извиквате API с променливи, съхранени локално | [APIs, Форми и Локално съхранение](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | +| 14 | [Разширение за браузър](./5-browser-extension/solution/README.md) | Фонови процеси в браузъра, уеб производителност | Използвайте фоновите процеси на браузъра за управление на иконата на разширението; научете за уеб производителността и оптимизации | [Фонови задачи и производителност](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | +| 15 | [Космическа игра](./6-space-game/solution/README.md) | По-напреднало игрово развитие с JavaScript | Научете за наследяване с класове и композиция и за дизайна Pub/Sub, в подготовка за изграждане на игра | [Въведение в напреднало игрово развитие](./6-space-game/1-introduction/README.md) | Chris | +| 16 | [Космическа игра](./6-space-game/solution/README.md) | Рисуване върху канвас | Научете за Canvas API, използван за рисуване на елементи на екрана | [Рисуване върху Canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | +| 17 | [Космическа игра](./6-space-game/solution/README.md) | Преместване на елементи по екрана | Открийте как елементите придобиват движение чрез декартови координати и Canvas API | [Преместване на елементи](./6-space-game/3-moving-elements-around/README.md) | Chris | +| 18 | [Космическа игра](./6-space-game/solution/README.md) | Откриване на сблъсъци | Направете елементите да се сблъскват и реагират един на друг чрез натискане на клавиши и предоставете cooldown функция | [Откриване на сблъсъци](./6-space-game/4-collision-detection/README.md) | Chris | +| 19 | [Космическа игра](./6-space-game/solution/README.md) | Отчитане на резултата | Извършвайте математически изчисления въз основа на състоянието и изпълнението на играта | [Отчитане на резултата](./6-space-game/5-keeping-score/README.md) | Chris | +| 20 | [Космическа игра](./6-space-game/solution/README.md) | Приключване и рестартиране на играта | Научете за приключването и рестартирането на играта, включително почистване на ресурси и нулиране на променливи | [Условия за приключване](./6-space-game/6-end-condition/README.md) | Chris | +| 21 | [Банково приложение](./7-bank-project/solution/README.md) | HTML шаблони и маршрути в уеб приложение | Научете как да създавате структурата на многостраничен уебсайт чрез маршрутизация и HTML шаблони | [HTML шаблони и маршрути](./7-bank-project/1-template-route/README.md) | Yohan | +| 22 | [Банково приложение](./7-bank-project/solution/README.md) | Създаване на форма за влизане и регистрация | Научете за създаване на формуляри и обработка на валидиращи процедури | [Формуляри](./7-bank-project/2-forms/README.md) | Yohan | +| 23 | [Банково приложение](./7-bank-project/solution/README.md) | Методи за извличане и използване на данни | Как данните влизат и излизат от приложението ви, как да ги извличате, съхранявате и изхвърляте | [Данни](./7-bank-project/3-data/README.md) | Yohan | +| 24 | [Банково приложение](./7-bank-project/solution/README.md) | Концепции за управление на състоянието | Научете как приложението ви задържа състояние и как да го управлявате програмно | [Управление на състоянието](./7-bank-project/4-state-management/README.md) | Yohan | +| 25 | [Код за браузър/VSCode](../../8-code-editor) | Работа с VScode | Научете как да използвате редактор на код | [Използване на редактор код в VScode](./8-code-editor/1-using-a-code-editor/README.md) | Chris | +| 26 | [AI асистенти](./9-chat-project/README.md) | Работа с AI | Научете как да изградите собствен AI асистент | [Проект AI асистент](./9-chat-project/README.md) | Chris | ## 🏫 Педагогика -Учебната ни програма е създадена въз основа на две ключови педагогически принципа: -* обучение чрез проекти -* честни викторини +Нашата учебна програма е създадена с два ключови педагогически принципа на ум: +* обучение, базирано на проекти +* чести тестове -Програмата учи основите на JavaScript, HTML и CSS, както и най-новите инструменти и техники, използвани от съвременните уеб разработчици. Студентите ще имат възможност да придобият практически опит, като изградят игра за писане, виртуален терариум, екологично чисто разширение за браузър, игра в стил космически нашественик и банково приложение за бизнес. Към края на серията студентите ще имат солидно разбиране за уеб разработка. +Програмата учи основите на JavaScript, HTML и CSS, както и най-новите инструменти и техники, използвани от съвременните уеб разработчици. Студентите ще имат възможност да развият практически умения, като изградят игра за писане, виртуален терариум, екологичен браузър разширение, космическа инвазивна игра и банково приложение за бизнеси. В края на серията студентите ще имат солидно разбиране за уеб разработка. -> 🎓 Можете да преминете първите няколко урока от тази учебна програма като [Учебен път](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) в Microsoft Learn! +> 🎓 Можете да вземете първите няколко урока от тази програма като [Учебен път](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) в Microsoft Learn! -Чрез осигуряване на съответствие между съдържанието и проектите, процесът става по-ангажиращ за студентите и задържането на знания се увеличава. Ние също така написахме няколко начални урока за основи на JavaScript, за да въведем концепциите, съчетани с видео от колекцията видео уроци "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)", чиито някои автори са допринесли за тази учебна програма. +Чрез осигуряване на съдържание, свързано с проекти, процесът става по-ангажиращ за студентите и запомнянето на концепциите се увеличава. Ние също така написахме няколко начални урока по основите на JavaScript за въведение на концепциите, с видео от колекцията "[Начинаещи по JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)", част от чийто автори допринесоха за тази учебна програма. -Освен това, викторина с нисък залог преди клас поставя намерението на студента да научи темата, докато втора викторина след урока гарантира допълнително задържане. Тази учебна програма бе създадена да бъде гъвкава и забавна и може да бъде взета изцяло или частично. Проектите започват малки и стават все по-сложни до края на 12-седмичния цикъл. +Освен това, тест с ниска трудност преди занятието насочва вниманието на студента към изучаване на темата, докато втори тест след занятието гарантира по-добро усвояване. Тази учебна програма е проектирана да бъде гъвкава и забавна и може да се следва изцяло или частично. Проектите започват малки и стават все по-сложни до края на 12-седмичния цикъл. -Докато съзнателно избягвахме въвеждането на JavaScript рамки, за да се съсредоточим върху основните умения, необходими на уеб разработчик преди да усвои рамка, добър следващ ход след завършване на тази учебна програма би бил да научите Node.js чрез друга колекция видео уроци: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". +Въпреки, че умишлено избегнахме въвеждането на JavaScript рамки, за да се концентрираме върху основните умения, нужни на един уеб разработчик преди преминаването към рамка, добър следващ ход след завършване на тази учебна програма би бил да научите за Node.js чрез друга колекция от видеа: "[Начинаещи по Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". -> Посетете нашите насоки [Правила за поведение](CODE_OF_CONDUCT.md) и [Принос](CONTRIBUTING.md). Очакваме с нетърпение вашата конструктивна обратна връзка! +> Посетете нашите указания за [Етичен кодекс](CODE_OF_CONDUCT.md) и [Принос](CONTRIBUTING.md). Очакваме вашите конструктивни отзиви! -## 🧭 Работа офлайн +## 🧭 Достъп офлайн -Можете да използвате тази документация офлайн чрез [Docsify](https://docsify.js.org/#/). Клонирайте репото, [инсталирайте Docsify](https://docsify.js.org/#/quickstart) на своя локален компютър и след това в основната папка на това репо напишете `docsify serve`. Уебсайтът ще бъде достъпен на порт 3000 на вашия localhost: `localhost:3000`. +Можете да използвате тази документация офлайн с помощта на [Docsify](https://docsify.js.org/#/). Форкнете това хранилище, [инсталирайте Docsify](https://docsify.js.org/#/quickstart) на локалната си машина и след това в главната папка на това хранилище напишете `docsify serve`. Уебсайтът ще се обслужва на порт 3000 на вашия localhost: `localhost:3000`. ## 📘 PDF - PDF с всички уроци може да се намери [тук](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). -## 🎒 Други курсове -Нашият екип създава и други курсове! Разгледайте: +## 🎒 Други Курсове + +Нашият екип произвежда и други курсове! Разгледайте: ### LangChain @@ -218,38 +204,38 @@ PDF с всички уроци може да се намери [тук](https:// [![AZD за начинаещи](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) [![Edge AI за начинаещи](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) [![MCP за начинаещи](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) -[![AI агенти за начинаещи](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) +[![AI Агенти за начинаещи](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) --- -### Серия за генеративен изкуствен интелект -[![Генеративен ИИ за начинаещи](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) -[![Генеративен ИИ (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) -[![Генеративен ИИ (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) -[![Генеративен ИИ (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) +### Серия за Генеративен AI +[![Генеративен AI за начинаещи](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Генеративен AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) +[![Генеративен AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) +[![Генеративен AI (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) --- -### Основно обучение +### Основно Обучение [![Машинно обучение за начинаещи](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) -[![Наука за данни за начинаещи](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) -[![Изкуствен интелект за начинаещи](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +[![Данни за начинаещи](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +[![AI за начинаещи](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) [![Киберсигурност за начинаещи](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) [![Уеб разработка за начинаещи](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) [![IoT за начинаещи](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) -[![XR разработка за начинаещи](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +[![XR Разработка за начинаещи](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) --- ### Серия Copilot -[![Copilot за програмиране с помощ на ИИ](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) +[![Copilot за AI Сдвоявано Програмиране](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) [![Copilot за C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) -[![Copilot Adventure](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) +[![Приключения с Copilot](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) -## Получаване на помощ +## Как да получите помощ -Ако се затрудните или имате въпроси относно създаването на AI приложения. Присъединете се към другите учащи и опитни разработчици в дискусиите за MCP. Това е подкрепяща общност, където въпросите са добре дошли и знанието се споделя свободно. +Ако се затрудните или имате въпроси относно изграждането на AI приложения, присъединете се към други учащи и опитни разработчици в дискусии за MCP. Това е подкрепяща общност, където въпросите са добре дошли и знанието се споделя свободно. [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) @@ -259,11 +245,11 @@ PDF с всички уроци може да се намери [тук](https:// ## Лиценз -Това хранилище е лицензирано под MIT лиценз. Вижте файла [LICENSE](../../LICENSE) за повече информация. +Този репозиторий е лицензиран под лиценза MIT. Вижте файла [LICENSE](../../LICENSE) за повече информация. --- -**Отказ от отговорност**: -Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия първичен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за каквито и да било недоразумения или неправилни тълкувания, произтичащи от използването на този превод. +**Отказ от отговорност**: +Този документ е преведен с помощта на AI преводаческа услуга [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи могат да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за каквито и да е недоразумения или неправилни тълкувания, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bn/.co-op-translator.json b/translations/bn/.co-op-translator.json index 063b80bae..cdc357b10 100644 --- a/translations/bn/.co-op-translator.json +++ b/translations/bn/.co-op-translator.json @@ -1,7 +1,7 @@ { "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { - "original_hash": "d45ddcc54eb9232a76d08328b09d792e", - "translation_date": "2025-11-03T22:28:30+00:00", + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T17:29:49+00:00", "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", "language_code": "bn" }, @@ -493,7 +493,7 @@ }, "AGENTS.md": { "original_hash": "a362efd06d64d4134a0cfe8515a86d34", - "translation_date": "2026-02-06T16:37:00+00:00", + "translation_date": "2026-03-06T17:43:46+00:00", "source_file": "AGENTS.md", "language_code": "bn" }, @@ -516,8 +516,8 @@ "language_code": "bn" }, "README.md": { - "original_hash": "6d6385fd098088cb2d690fb0a6cdaedc", - "translation_date": "2026-02-06T16:32:46+00:00", + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T17:24:35+00:00", "source_file": "README.md", "language_code": "bn" }, diff --git a/translations/bn/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/bn/1-getting-started-lessons/1-intro-to-programming-languages/README.md index 75101ce08..dd2f1fb49 100644 --- a/translations/bn/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/bn/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,183 +1,181 @@ -# প্রোগ্রামিং ভাষা এবং আধুনিক ডেভেলপার টুলসের পরিচিতি +# প্রোগ্রামিং ভাষাসমূহ ও আধুনিক ডেভেলপার সরঞ্জামগুলোর পরিচিতি -হ্যালো, ভবিষ্যৎ ডেভেলপার! 👋 আমি কি তোমাকে এমন কিছু বলতে পারি যা আমাকে প্রতিদিনই শিহরিত করে? তুমি শিখতে যাচ্ছ যে প্রোগ্রামিং শুধুমাত্র কম্পিউটার নিয়ে নয় – এটি এমন এক ক্ষমতা যা তোমার সবচেয়ে বন্য ধারণাগুলোকে বাস্তবে রূপ দিতে পারে! +হ্যালো, ভবিষ্যতের ডেভেলপার! 👋 আমি কি তোমাকে এমন কিছু বলতে পারি যা প্রতিদিন আমাকে রোমাঞ্চিত করে? তুমি শীঘ্রই আবিষ্কার করবে যে প্রোগ্রামিং শুধুমাত্র কম্পিউটার সংক্রান্ত নয় – এটি তোমার সবচেয়ে অবিশ্বাস্য ধারণাগুলো জীবন্ত করার জন্য সত্যিকারের অতিপ্রাকৃত ক্ষমতা পাওয়ার ব্যাপার! -তুমি কি সেই মুহূর্তটি জানো যখন তুমি তোমার প্রিয় অ্যাপ ব্যবহার করছ এবং সবকিছু একদম নিখুঁতভাবে কাজ করছে? যখন তুমি একটি বোতামে চাপ দাও এবং কিছু একেবারে জাদুকরী ঘটে যা তোমাকে "ওয়াও, তারা এটা কীভাবে করল?" বলতে বাধ্য করে। ঠিক এমন কেউ – সম্ভবত রাত ২টায় তাদের প্রিয় কফি শপে তৃতীয় এসপ্রেসো পান করতে করতে – সেই কোড লিখেছে যা সেই জাদু তৈরি করেছে। এবং যা তোমার মনকে উড়িয়ে দেবে তা হলো: এই পাঠের শেষে, তুমি শুধু বুঝতে পারবে না তারা কীভাবে এটি করেছে, বরং তুমি নিজেই এটি চেষ্টা করতে উদগ্রীব হয়ে উঠবে! +তুমি কি সেই মুহূর্তটি জানো, যখন তুমি তোমার প্রিয় অ্যাপ ব্যবহার করছ, আর সবকিছু নিখুঁতভাবে কাজ করছে? যখন তুমি একটা বাটনে ট্যাপ করো এবং কিছু অবিশ্বাস্য ঘটনা ঘটে যা তোমাকে বলায় "আরে, ওরা এটা কীভাবে করল?" ঠিক সেইটাই—তোমার মতোই কেউ, সম্ভবত রাত ২টায় তাদের প্রিয় কফি শপে বসে তৃতীয় এস্প্রেসো পান করে, সেই জাদু তৈরি কোড লিখেছিল। আর এখানে যা তোমার মস্তিষ্ক ঘুরিয়ে দেবে: এই পাঠ শেষ হওয়ার আগে তুমি শুধু বুঝতে পারবে কিভাবে তারা এটা করেছিল তাই নয়, তোমাও নিজে যেন চেষ্টা করার জন্য উদ্বুদ্ধ হয়ে উঠবে! -শোনো, যদি প্রোগ্রামিং এখন তোমার কাছে ভয়ঙ্কর মনে হয়, আমি পুরোপুরি বুঝতে পারি। যখন আমি প্রথম শুরু করেছিলাম, আমি সত্যিই ভেবেছিলাম যে তোমাকে কোনো গণিতের জিনিয়াস হতে হবে বা পাঁচ বছর বয়স থেকেই কোডিং করতে হবে। কিন্তু যা আমার দৃষ্টিভঙ্গি পুরোপুরি বদলে দিয়েছিল তা হলো: প্রোগ্রামিং নতুন ভাষায় কথোপকথন শেখার মতো। তুমি "হ্যালো" এবং "ধন্যবাদ" দিয়ে শুরু করো, তারপর কফি অর্ডার করতে শেখো, এবং কিছুদিনের মধ্যে তুমি গভীর দার্শনিক আলোচনা করতে পারো! তবে এই ক্ষেত্রে, তুমি কম্পিউটারের সাথে কথোপকথন করছ, এবং সত্যি বলতে? তারা সবচেয়ে ধৈর্যশীল কথোপকথন সঙ্গী – তারা কখনো তোমার ভুলের বিচার করে না এবং তারা সবসময় আবার চেষ্টা করতে প্রস্তুত! +দেখো, আমি পুরোপুরি বুঝতে পারি যদি এখনই প্রোগ্রামিং তোমাকে একটু কঠিন মনে হয়। যখন আমি শুরু করছিলাম, আমি সত্যি ভাবতাম তোমাকে হতে হবে কেউ গণিতের মাস্টার বা পাঁচ বছর বয়স থেকেই কোডিং করে আসা। কিন্তু যা আমার দৃষ্টিভঙ্গি পুরো বদলে দিয়েছিল তা হলো: প্রোগ্রামিং ঠিক যেমন নতুন একটি ভাষায় কথোপকথন শেখার মতো। তুমি শুরু করো "হ্যালো" এবং "ধন্যবাদ" দিয়ে, তারপর কফি অর্ডার করার মতো কথা বলতে শিখো, আর হঠাৎ করে গভীর দার্শনিক আলোচনা করো! তবে এখানে, তুমি কম্পিউটারদের সঙ্গে কথোপকথন করছ, এবং সত্যিই? তারা সবচেয়ে ধৈর্যশীল কথোপকথন সঙ্গী—তারা তোমার ভুলের বিচার করে না এবং সব সময় আবার চেষ্টা করতে উৎসাহী! -আজ, আমরা সেই অসাধারণ টুলগুলো অন্বেষণ করব যা আধুনিক ওয়েব ডেভেলপমেন্টকে শুধু সম্ভবই করে না, বরং একেবারে নেশাসক্ত করে তোলে। আমি বলছি ঠিক সেই এডিটর, ব্রাউজার এবং ওয়ার্কফ্লো যা Netflix, Spotify এবং তোমার প্রিয় ইন্ডি অ্যাপ স্টুডিওর ডেভেলপাররা প্রতিদিন ব্যবহার করে। এবং যা তোমাকে আনন্দে নাচতে বাধ্য করবে তা হলো: এই পেশাদার-গ্রেড, ইন্ডাস্ট্রি-স্ট্যান্ডার্ড টুলগুলোর বেশিরভাগই সম্পূর্ণ বিনামূল্যে! +আজ, আমরা অন্বেষণ করব অসাধারণ সরঞ্জামগুলি যা আধুনিক ওয়েব ডেভেলপমেন্টকে শুধু সম্ভব করেই না, বরং অতিবার আসক্তিকর করে তোলে। আমি কথা বলছ আজীবনের একই সম্পাদক, ব্রাউজার এবং ওয়ার্কফ্লো নিয়ে যা Netflix, Spotify এবং তোমার প্রিয় ইন্ডি অ্যাপ স্টুডিও প্রতিদিন ব্যবহার করে। আর এখানে যা তোমাকে উল্লসিত করবে: এই পেশাদার মানসম্পন্ন, শিল্প-মানের সরঞ্জামগুলোর বেশিরভাগ সম্পূর্ণ ফ্রি! -![প্রোগ্রামিং পরিচিতি](../../../../translated_images/bn/webdev101-programming.d6e3f98e61ac4bff.webp) -> স্কেচনোট: [Tomomi Imura](https://twitter.com/girlie_mac) +![Intro Programming](../../../../translated_images/bn/webdev101-programming.d6e3f98e61ac4bff.webp) +> স্কেচনোট [Tomomi Imura](https://twitter.com/girlie_mac) দ্বারা ```mermaid journey - title Your Programming Journey Today - section Discover - What is Programming: 5: You - Programming Languages: 4: You - Tools Overview: 5: You - section Explore - Code Editors: 4: You - Browsers & DevTools: 5: You - Command Line: 3: You - section Practice - Language Detective: 4: You - Tool Exploration: 5: You - Community Connection: 5: You + title আজকের আপনার প্রোগ্রামিং যাত্রা + section আবিষ্কার করুন + প্রোগ্রামিং কি: 5: You + প্রোগ্রামিং ভাষাসমূহ: 4: You + সরঞ্জাম পর্যালোচনা: 5: You + section অনুসন্ধান করুন + কোড সম্পাদকগণ: 4: You + ব্রাউজার এবং ডেভটুলস: 5: You + কমান্ড লাইন: 3: You + section অনুশীলন + ভাষা গোয়েন্দা: 4: You + সরঞ্জাম অনুসন্ধান: 5: You + সম্প্রদায়ের সংযোগ: 5: You ``` +## চল, দেখি তুমি ইতিমধ্যেই কী জানো! -## দেখা যাক তুমি আগে থেকেই কী জানো! +মজা শুরু করার আগে, আমি জানতে আগ্রহী—তুমি এখনো প্রোগ্রামিং জগত সম্পর্কে কী জানো? আর শোনো, যদি তুমি এই প্রশ্নগুলো দেখে ভাবো "আমার একদমই ধারনা নেই," সেটা একদম ঠিক আছে, বরং এটা নিখুঁত! এর মানে তুমি একেবারে সঠিক জায়গায় রয়েছো। এই কুইজটাকে এক ধরণের ওয়ার্ম-আপ ভাবো – আমরা স্মৃতিশক্তির পেশী গরম করছি! -মজার অংশে যাওয়ার আগে, আমি জানতে চাই – তুমি এই প্রোগ্রামিং জগত সম্পর্কে আগে থেকেই কী জানো? এবং শুনো, যদি তুমি এই প্রশ্নগুলো দেখে ভাবো "আমি সত্যিই এর কিছুই জানি না," তাহলে সেটি শুধু ঠিকই নয়, বরং একদম পারফেক্ট! এর মানে তুমি ঠিক সঠিক জায়গায় আছ। এই কুইজটিকে একটি ওয়ার্কআউটের আগে স্ট্রেচিংয়ের মতো ভাবো – আমরা শুধু মস্তিষ্কের পেশিগুলো গরম করছি! +[পূর্ব-পাঠের কুইজ নাও](https://ff-quizzes.netlify.app/web/) -[পূর্ব-পাঠ কুইজ নাও](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) -## আমরা যে অভিযানে যাচ্ছি একসাথে +## আমরা আজ যে অভিযানে যাচ্ছি -ঠিক আছে, আমি সত্যিই উত্তেজনায় লাফাচ্ছি আজ আমরা যা অন্বেষণ করতে যাচ্ছি তা নিয়ে! সত্যি বলতে, আমি তোমার মুখ দেখতে চাই যখন কিছু ধারণা তোমার মাথায় ক্লিক করবে। এখানে আমাদের অবিশ্বাস্য যাত্রা: +ঠিক আছে, আজ আমরা যা অন্বেষণ করবো তা নিয়ে আমি সত্যিই উচ্ছ্বসিত! সত্যি বলতে, আমি তোমার মুখটা দেখতে চাই যখন এই ধারণাগুলোর কোনটা তোমার জন্য স্পষ্ট হয়ে ওঠবে। এখানে আমাদের অবিশ্বাস্য যাত্রা: -- **প্রোগ্রামিং আসলে কী (এবং কেন এটি সবচেয়ে কুল জিনিস!)** – আমরা আবিষ্কার করব কীভাবে কোড আসলে অদৃশ্য জাদু যা তোমার চারপাশের সবকিছু চালিত করে, সেই অ্যালার্ম থেকে যা জানে এটি সোমবার সকাল, সেই অ্যালগরিদম পর্যন্ত যা তোমার Netflix রিকমেন্ডেশন নিখুঁতভাবে সাজায়। -- **প্রোগ্রামিং ভাষা এবং তাদের অসাধারণ ব্যক্তিত্ব** – কল্পনা করো একটি পার্টিতে ঢুকেছ যেখানে প্রত্যেকের সম্পূর্ণ ভিন্ন ক্ষমতা এবং সমস্যার সমাধানের পদ্ধতি আছে। প্রোগ্রামিং ভাষার জগত ঠিক এরকম, এবং তাদের সাথে পরিচিত হতে তোমার ভালো লাগবে! -- **ডিজিটাল জাদু ঘটানোর মৌলিক নির্মাণ ব্লকগুলো** – এগুলোকে চূড়ান্ত সৃজনশীল LEGO সেট হিসেবে ভাবো। একবার তুমি বুঝতে পারবে কীভাবে এই অংশগুলো একসাথে ফিট করে, তুমি বুঝতে পারবে তুমি যা কল্পনা করো তা তৈরি করতে পারো। -- **পেশাদার টুল যা তোমাকে মনে করাবে যেন তোমাকে একটি জাদুকরের ছড়ি দেওয়া হয়েছে** – আমি এখানে নাটকীয় হচ্ছি না – এই টুলগুলো সত্যিই তোমাকে মনে করাবে যেন তোমার সুপারপাওয়ার আছে, এবং সবচেয়ে ভালো অংশ? এগুলোই প্রোরা ব্যবহার করে! +- **প্রোগ্রামিং আসলে কী (এবং কেন এটা সবচেয়ে দারুণ জিনিস!)** – আমরা আবিষ্কার করবো কিভাবে কোড হল অদৃশ্য জাদু যা তোমার চারপাশের সবকিছু চালায়, সেই অ্যালার্ম থেকে যা সোমবার সকাল বুঝে নেয়ো, সেই অ্যালগরিদম পর্যন্ত যা নিখুঁতভাবে তোমার Netflix সুপারিশ করে +- **প্রোগ্রামিং ভাষাসমূহ এবং তাদের অসাধারণ বৈশিষ্ট্য** – কল্পনা করো এমন একটি পার্টিতে গিয়ে যেখানে প্রত্যেকে সম্পূর্ণ ভিন্ন অতিপ্রাকৃত ক্ষমতা এবং সমস্যা সমাধানের পন্থা নিয়ে আছে। প্রোগ্রামিং ভাষার জগৎ ঠিক এমনটাই, এবং তুমি তাদের সাথে পরিচিত হতে ভালোবাসবে! +- **মৌলিক নির্মাণ ব্লক যা ডিজিটাল জাদু ঘটায়** – এগুলোকে ভাবো একটি চূড়ান্ত স্রষ্টামূলক LEGO সেট হিসেবে। একবার কিভাবে এই টুকরোগুলো একসাথে কাজ করে বুঝলে, তুমি অফুরন্ত কিছুই তৈরি করতে পারবে তোমার কল্পনার নাম অনুসারে +- **পেশাদার সরঞ্জাম যা তোমাকে মনে করাবে তোমার কাছে যাদুর ছড়ি এসেছে** – আমি নাটকীয়তা করছি না — এই সরঞ্জামগুলো সত্যিই তোমাকে অতিপ্রাকৃত অধিকার পাওয়ার মত অনুভূতি দেবে, আর সবচেয়ে ভাল কথা? এগুলোই প্রফেশনালরা ব্যবহার করে! -> 💡 **মজার বিষয়**: আজ সবকিছু মনে রাখার চেষ্টা করো না! এখন আমি শুধু চাই তুমি সম্ভাবনার প্রতি উত্তেজনা অনুভব করো। আমরা একসাথে অনুশীলন করার সময় বিস্তারিত বিষয়গুলো স্বাভাবিকভাবেই মনে থাকবে – আসল শেখা এভাবেই হয়! +> 💡 **মর্ম কথা:** আজকে সবকিছু মুখস্থ করার চেষ্টা করো না! এখন শুধু এটা অনুভব করো যে কি সম্ভব তা নিয়ে তোমার মধ্যে আগ্রহ তৈরি হচ্ছে। বিস্তারিতগুলো স্বাভাবিকভাবেই চর্চার মাধ্যমে মজবুত হবে – এরাই তো আসল শেখার পথ! -> তুমি এই পাঠটি [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon) এ নিতে পারো! +> তোমরা এই পাঠটি [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon) এ নিতে পারো! -## তাহলে প্রোগ্রামিং আসলে কী? +## তাহলে প্রোগ্রামিং আসলে *কি*? -ঠিক আছে, চলো মিলিয়ন-ডলার প্রশ্নটি মোকাবিলা করি: প্রোগ্রামিং আসলে কী? +ঠিক আছে, আসুন আমরা সেরা প্রশ্নের উত্তর দিই: প্রোগ্রামিং আসলে কী? -আমি তোমাকে একটি গল্প বলব যা আমার চিন্তাভাবনা পুরোপুরি বদলে দিয়েছে। গত সপ্তাহে, আমি আমার মাকে আমাদের নতুন স্মার্ট টিভি রিমোট ব্যবহার করতে বোঝানোর চেষ্টা করছিলাম। আমি নিজেকে বলতে শুনলাম, "লাল বোতামটি চাপো, তবে বড় লাল বোতামটি নয়, ছোট লাল বোতামটি বাম দিকে... না, তোমার অন্য বাম... ঠিক আছে, এখন এটি দুই সেকেন্ড ধরে রাখো, এক সেকেন্ড নয়, তিন সেকেন্ডও নয়..." পরিচিত শোনাচ্ছে? 😅 +আমি তোমাকে এমন একটা গল্প বলব যা আমার পুরো চিন্তা বদলে দিয়েছিল। গত সপ্তাহে, আমি আমার মাকে বোঝানোর চেষ্টা করছিলাম কিভাবে আমাদের নতুন স্মার্ট টিভির রিমোট ব্যবহার করতে হয়। আমি নিজেকে বলছিলাম, "লাল বাটন চাপবে, কিন্তু বড় লাল বাটন নয়, বাম দিকের ছোট লাল বাটনে... না, তোমার অন্য বাম... ঠিক আছে, এখন দুই সেকেন্ড ধরে ধরো, এক নয়, তিন নয়..." মনে হচ্ছে পরিচিত? 😅 -এটাই প্রোগ্রামিং! এটি অত্যন্ত বিস্তারিত, ধাপে ধাপে নির্দেশনা দেওয়ার শিল্প, এমন কিছুতে যা খুব শক্তিশালী কিন্তু সবকিছু নিখুঁতভাবে ব্যাখ্যা করা প্রয়োজন। তবে মাকে বোঝানোর পরিবর্তে (যিনি "কোন লাল বোতাম?!" জিজ্ঞাসা করতে পারেন), তুমি একটি কম্পিউটারকে বোঝাচ্ছ (যা ঠিক তাই করে যা তুমি বলো, যদিও তুমি যা বলেছ তা হয়তো তুমি যা বোঝাতে চেয়েছ তা নয়)। +এটাই প্রোগ্রামিং! এটা একটা শিল্প যেখানে খুব বিস্তারিত, ধাপে ধাপে নির্দেশ দেওয়া হয় এমন একটি শক্তিশালী সিস্টেমকে যেটাকে সবকিছু নিখুঁতভাবে স্পেল আউট করতে হয়। তবে এখানে মাকে (যিনি জিজ্ঞাসা করতে পারেন "কোন লাল বাটন?") নয়, বরং কম্পিউটারকে বোঝানো হয় (যে ঠিক তোমার কথামতো কাজ করে, যদিও তুমি ঠিক যেমনটি বলেছিলে তা বুঝতে পারো না)। -যা আমার মনকে উড়িয়ে দিয়েছিল তা হলো: কম্পিউটার আসলে তাদের মূলে বেশ সহজ। তারা মাত্র দুটি জিনিস বোঝে – ১ এবং ০, যা মূলত "হ্যাঁ" এবং "না" বা "চালু" এবং "বন্ধ।" এটাই! কিন্তু এখানেই জাদু শুরু হয় – আমাদের ১ এবং ০-এ কথা বলতে হয় না যেন আমরা The Matrix-এ আছি। এখানেই **প্রোগ্রামিং ভাষা** আমাদের উদ্ধার করে। এগুলো এমন এক সেরা অনুবাদক যা তোমার সাধারণ মানবিক চিন্তাভাবনাকে কম্পিউটার ভাষায় রূপান্তর করে। +যা আমাকে প্রথম শিখার সময় বিস্মিত করেছিল তা হলো: কম্পিউটারগুলি আসলেই মূলে খুবই সরল। তারা মাত্র দুইটি জিনিস বোঝে—১ এবং ০, যা হল "হ্যাঁ" এবং "না" বা "চালু" এবং "বন্ধ"। তাই! কিন্তু এখানেই জাদু শুরু হয়—আমাদের ১ এবং ০ তে কথা বলতে হবে না আরও বুঝি না! তখনই **প্রোগ্রামিং ভাষাসমূহ** আসেন সাহায্যে। তারা যেন বিশ্বের সেরা অনুবাদক, যারা তোমার স্বাভাবিক মানব চিন্তাভাবনাকে কম্পিউটারের ভাষায় অনুবাদ করে দেয়। -এবং যা আমাকে প্রতিদিন সকালে সত্যিই শিহরিত করে তা হলো: তোমার জীবনের প্রতিটি ডিজিটাল জিনিস শুরু হয়েছিল তোমার মতো কারো দ্বারা, সম্ভবত তাদের পায়জামা পরে কফি হাতে ল্যাপটপে কোড টাইপ করতে করতে। সেই Instagram ফিল্টার যা তোমাকে নিখুঁত দেখায়? কেউ সেটি কোড করেছে। সেই রিকমেন্ডেশন যা তোমাকে তোমার নতুন প্রিয় গানের দিকে নিয়ে গেছে? একজন ডেভেলপার সেই অ্যালগরিদম তৈরি করেছে। সেই অ্যাপ যা তোমাকে বন্ধুদের সাথে ডিনারের বিল ভাগ করতে সাহায্য করে? হ্যাঁ, কেউ ভেবেছিল "এটি বিরক্তিকর, আমি বাজি ধরে বলতে পারি এটি ঠিক করতে পারি" এবং তারপর... তারা করেছে! +আর প্রতিদিন সকালে যখন আমি উঠি তখন যা এখনো আমাকে রোমাঞ্চিত করে: তোমার জীবনের সমস্ত ডিজিটাল কিছুই শুরু হয়েছিল ঠিক তোমার মতো কারো হাত থেকে, সম্ভবত প্যাজামায় মোড়ানো, কফির কাপ হাতে নিয়ে ল্যাপটপে কোড টাইপ করতে করতে। সেই Instagram ফিল্টার যা তোমাকে পরফেক্ট দেখায়? কেউ সেটি কোড করেছিল। প্রস্তাবনা যা তোমাকে তোমার নতুন প্রিয় গানের দিকে নিয়ে গিয়েছিল? একজন ডেভেলপার সেই অ্যালগরিদম তৈরি করেছিল। সেই অ্যাপ যা তোমাকে তোমার বন্ধুদের সাথে ডিনার বিল ভাগ করতে সাহায্য করে? হ্যাঁ, কেউ ভাবল "এটা বিরক্তিকর, আমি এটা ঠিক করতে পারি" আর তারপর করেই ফেলল! -যখন তুমি প্রোগ্রামিং শিখবে, তুমি শুধু একটি নতুন দক্ষতা অর্জন করবে না – তুমি সমস্যার সমাধানকারী এই অবিশ্বাস্য সম্প্রদায়ের অংশ হয়ে উঠবে যারা তাদের দিন কাটায় ভাবতে, "যদি আমি এমন কিছু তৈরি করতে পারি যা কারো দিনকে একটু ভালো করে তোলে?" সত্যি বলতে, এর চেয়ে কুল আর কিছু হতে পারে? +যখন তুমি প্রোগ্রামিং শিখবে, তুমি শুধু একটি নতুন দক্ষতা অর্জন করছ না—তুমি এমন একটি অসাধারণ সমস্যার সমাধানকারী সম্প্রদায়ের অংশ হয়ে উঠছো যারা প্রতিদিন ভাবছে, "কী হয়, যদি আমি এমন কিছু তৈরি করি যা কারো দিন একটু ভালো করে তোলে?" সত্যি বলছি, এর থেকে আর কিছু দারুণ হতে পারে? -✅ **মজার তথ্য অনুসন্ধান**: যখন তোমার হাতে একটু সময় থাকবে তখন একটি মজার বিষয় খুঁজে বের করো – তুমি কি জানো কে ছিলেন বিশ্বের প্রথম কম্পিউটার প্রোগ্রামার? আমি একটি ইঙ্গিত দেব: এটি হয়তো তোমার প্রত্যাশিত কেউ নয়! এই ব্যক্তির গল্পটি একেবারে চমকপ্রদ এবং দেখায় যে প্রোগ্রামিং সবসময় সৃজনশীল সমস্যার সমাধান এবং বক্সের বাইরে চিন্তা করার বিষয় ছিল। +✅ **মজার তথ্য খোঁজা:** যখন ফাঁকা সময় পাবে, এটা অনুসন্ধান করো—বিশ্বের প্রথম কম্পিউটার প্রোগ্রামার কে ছিলেন বলে তুমি ভাবো? আমি তোমায় একটি ইঙ্গিত দেবো: হয়তো তুমি যা ভাবছো তা নাও হতে পারে! এই ব্যক্তির গল্প বেশ মজাদার এবং দেখায় প্রোগ্রামিং সবসময় ছিল সৃজনশীল সমস্যা সমাধান এবং সাধারণ ধারা থেকে বেরিয়ে চিন্তার ব্যাপার। -### 🧠 **চেক-ইন সময়: তুমি কেমন অনুভব করছ?** +### 🧠 **চেক-ইন সময়: কেমন লাগছে?** -**একটু সময় নিয়ে ভাবো:** -- "কম্পিউটারকে নির্দেশনা দেওয়া" ধারণাটি কি এখন তোমার কাছে পরিষ্কার? -- তুমি কি এমন কোনো দৈনন্দিন কাজের কথা ভাবতে পারো যা তুমি প্রোগ্রামিং দিয়ে স্বয়ংক্রিয় করতে চাও? -- এই পুরো প্রোগ্রামিং বিষয়টি নিয়ে তোমার মনে কী প্রশ্ন উঠছে? +**একটু ভাবো:** +- "কম্পিউটারকে নির্দেশ দেওয়ার" ধারণাটা কি এখন তোমার কাছে স্পষ্ট? +- এমন কোন কাজ আছে যা তুমি প্রোগ্রামিং দিয়ে স্বয়ংক্রিয় করতে চাও? +- প্রোগ্রামিং নিয়ে এখন তোমার মাথায় কি প্রশ্ন জাগছে? -> **মনে রাখো**: যদি কিছু ধারণা এখনো অস্পষ্ট মনে হয় তবে এটি একেবারে স্বাভাবিক। প্রোগ্রামিং শেখা নতুন ভাষা শেখার মতো – তোমার মস্তিষ্কের সেই নিউরাল পথগুলো তৈরি হতে সময় লাগে। তুমি দারুণ করছ! +> **মনে রেখো:** কিছু ধারণা যদি এখন পরিচ্ছন্ন না মনে হয় তাতে চিন্তা করার কিছু নেই। প্রোগ্রামিং শেখা হল নতুন একটি ভাষা শেখার মতো—তোমার মস্তিষ্ককে নতুন রাস্তাগুলো তৈরি করতে সময় লাগে। তুমি অসাধারণ করছ! -## প্রোগ্রামিং ভাষা বিভিন্ন ধরণের জাদুর মতো +## প্রোগ্রামিং ভাষাসমূহ হলো বিভিন্ন ধরণের জাদুর স্বাদ -ঠিক আছে, এটি অদ্ভুত শোনাতে পারে, কিন্তু আমার সাথে থাকো – প্রোগ্রামিং ভাষা অনেকটা বিভিন্ন ধরণের সঙ্গীতের মতো। ভাবো: তোমার কাছে জ্যাজ আছে, যা মসৃণ এবং স্বতঃস্ফূর্ত, রক যা শক্তিশালী এবং সরল, ক্লাসিকাল যা মার্জিত এবং গঠনমূলক, এবং হিপ-হপ যা সৃজনশীল এবং অভিব্যক্তিপূর্ণ। প্রতিটি শৈলীর নিজস্ব পরিবেশ, নিজস্ব উত্সাহী ভক্তদের সম্প্রদায় আছে, এবং প্রতিটি ভিন্ন মেজাজ এবং উপলক্ষের জন্য উপযুক্ত। +ঠিক আছে, এটা অদ্ভুত শোনাতে পারে, কিন্তু আমার সাথে থাকো—প্রোগ্রামিং ভাষাগুলো অনেকটা বিভিন্ন ধরনের সঙ্গীতের মতো। ভাবো: তোমার কাছে আছে জাজ, যা মসৃণ ও ইমপ্রোভাইজেশনভিত্তিক, রক যা শক্তিশালী ও সরল, ক্লাসিক্যাল যা উজ্জ্বল ও গঠিত এবং হিপ-হপ যা সৃজনশীল ও প্রকাশ্য। প্রতিটি ধারার নিজস্ব ভেজ, পরিপাটি ফ্যানের সম্প্রদায় এবং প্রতিটি আলাদা মেজাজ ও উপলক্ষে যথার্থ। -প্রোগ্রামিং ভাষাগুলো ঠিক একইভাবে কাজ করে! তুমি একটি মজার মোবাইল গেম তৈরি করতে যে ভাষা ব্যবহার করবে, তা দিয়ে বিশাল পরিমাণ জলবায়ু তথ্য বিশ্লেষণ করতে পারবে না, যেমন তুমি যোগব্যায়ামের ক্লাসে ডেথ মেটাল বাজাবে না (ঠিক আছে, বেশিরভাগ যোগব্যায়ামের ক্লাসে!)। +প্রোগ্রামিং ভাষাসমূহ একই রকম কাজ করে! তুমি এমন এক ভাষা ব্যবহার করবে না যা খেলাধূলার একটি মোবাইল গেম বানাতে যা বিশাল পরিমাণ জলবায়ু তথ্য বিশ্লেষণ করার জন্য দরকার, যেমন তুমি যোগ ক্লাসে ডেথ মেটাল প্লে করবে না (ঠিক আছে, বেশিরভাগ যোগ ক্লাসে না! 😄)। -তবে যা আমাকে প্রতিবারই অবাক করে তা হলো: এই ভাষাগুলো এমন এক ধৈর্যশীল, উজ্জ্বল অনুবাদক থাকার মতো যা তোমার পাশে বসে আছে। তুমি তোমার চিন্তাভাবনাগুলো এমনভাবে প্রকাশ করতে পারো যা তোমার মানব মস্তিষ্কের জন্য স্বাভাবিক মনে হয়, এবং তারা সেই জটিল কাজগুলো করে যা কম্পিউটার আসলে বোঝে। এটি এমন একজন বন্ধুর মতো যে "মানব সৃজনশীলতা" এবং "কম্পিউটার লজিক" উভয় ভাষায় পুরোপুরি দক্ষ – এবং তারা কখনো ক্লান্ত হয় না, কখনো কফি বিরতি নেয় না, এবং কখনো একই প্রশ্ন দুবার জিজ্ঞাসা করার জন্য তোমাকে বিচার করে না! +কিন্তু যা আমাকে প্রতি বার মুগ্ধ করে ভাবলে: এই ভাষাগুলো হল একদম সবচেয়ে ধৈর্যশীল, মেধাবী দোভাষী তোমার পাশে বসে আছে। তুমি তোমার ভাবনা এমনভাবে প্রকাশ করতে পারো যা তোমার মানব মস্তিষ্কের জন্য স্বাভাবিক, আর তারা সমস্ত জটিল কাজ করে ১ ও ০ তে অনুবাদ করার যা কম্পিউটার বুঝে। এটা এমন একটি বন্ধুর মত, যিনি "মানব সৃজনশীলতা" এবং "কম্পিউটার যুক্তি" উভয় ভাষাতেই নিখুঁত পারদর্শী—তারা কখনো ক্লান্ত হয় না, কখনো কফি বিরতি দরকার হয় না, এবং তোমার একই প্রশ্ন বারবার করার জন্য কখনো বিচার করে না! -### জনপ্রিয় প্রোগ্রামিং ভাষা এবং তাদের ব্যবহার +### জনপ্রিয় প্রোগ্রামিং ভাষা এবং তাদের ব্যবহার ```mermaid mindmap root((Programming Languages)) Web Development JavaScript - Frontend Magic - Interactive Websites + Frontend Magic [ফ্রন্টএন্ড জাদু] + Interactive Websites [ইন্টারেক্টিভ ওয়েবসাইটস] TypeScript - JavaScript + Types - Enterprise Apps + JavaScript + Types [জাভাস্ক্রিপ্ট + টাইপস] + Enterprise Apps [এন্টারপ্রাইজ অ্যাপস] Data & AI Python - Data Science - Machine Learning - Automation + Data Science [ডেটা সায়েন্স] + Machine Learning [মেশিন লার্নিং] + Automation [স্বয়ংক্রিয়করণ] R - Statistics - Research + Statistics [পরিসংখ্যান] + Research [গবেষণা] Mobile Apps Java - Android - Enterprise + Android [অ্যান্ড্রয়েড] + Enterprise [এন্টারপ্রাইজ] Swift iOS - Apple Ecosystem + Apple Ecosystem [অ্যাপল ইকোসিস্টেম] Kotlin - Modern Android - Cross-platform + Modern Android [আধুনিক অ্যান্ড্রয়েড] + Cross-platform [ক্রস-প্ল্যাটফর্ম] Systems & Performance C++ - Games - Performance Critical + Games [গেমস] + Performance Critical [পারফরম্যান্স ক্রিটিক্যাল] Rust - Memory Safety - System Programming + Memory Safety [মেমরি সেফটি] + System Programming [সিস্টেম প্রোগ্রামিং] Go - Cloud Services - Scalable Backend + Cloud Services [ক্লাউড সার্ভিসেস] + Scalable Backend [স্কেলেবল ব্যাকএন্ড] ``` - -| ভাষা | সেরা ব্যবহার | কেন এটি জনপ্রিয় | -|------|--------------|------------------| -| **জাভাস্ক্রিপ্ট** | ওয়েব ডেভেলপমেন্ট, ইউজার ইন্টারফেস | ব্রাউজারে চলে এবং ইন্টারঅ্যাকটিভ ওয়েবসাইট চালিত করে | -| **পাইথন** | ডেটা সায়েন্স, অটোমেশন, AI | পড়তে এবং শিখতে সহজ, শক্তিশালী লাইব্রেরি | -| **জাভা** | এন্টারপ্রাইজ অ্যাপ্লিকেশন, অ্যান্ড্রয়েড অ্যাপ | প্ল্যাটফর্ম-স্বাধীন, বড় সিস্টেমের জন্য শক্তিশালী | -| **C#** | উইন্ডোজ অ্যাপ্লিকেশন, গেম ডেভেলপমেন্ট | শক্তিশালী মাইক্রোসফট ইকোসিস্টেম সাপোর্ট | -| **Go** | ক্লাউড সার্ভিস, ব্যাকএন্ড সিস্টেম | দ্রুত, সহজ, আধুনিক কম্পিউটিংয়ের জন্য ডিজাইন করা | +| ভাষা | সেরা ব্যবহার | কেন জনপ্রিয় | +|----------|----------|------------------| +| **JavaScript** | ওয়েব ডেভেলপমেন্ট, ব্যবহারকারী ইন্টারফেস | ব্রাউজারে চলে এবং ইন্টারঅ্যাকটিভ ওয়েবসাইট চালায় | +| **Python** | ডেটা সায়েন্স, অটোমেশন, এআই | পড়তে ও শেখতে সহজ, শক্তিশালী লাইব্রেরি | +| **Java** | এন্টারপ্রাইজ অ্যাপ্লিকেশন, অ্যান্ড্রয়েড অ্যাপ | প্ল্যাটফর্ম-স্বাধীন, বড় সিস্টেমের জন্য মজবুত | +| **C#** | উইন্ডোজ অ্যাপ্লিকেশন, গেম ডেভেলপমেন্ট | শক্তিশালী মাইক্রোসফট ইকোসিস্টেম সমর্থন | +| **Go** | ক্লাউড সার্ভিস, ব্যাক-এন্ড সিস্টেম | দ্রুত, সহজ, আধুনিক কম্পিউটিংয়ের জন্য ডিজাইন করা | ### উচ্চ-স্তরের বনাম নিম্ন-স্তরের ভাষা -ঠিক আছে, এটি ছিল সেই ধারণা যা আমাকে প্রথমে বিভ্রান্ত করেছিল, তাই আমি সেই উপমা শেয়ার করতে যাচ্ছি যা অবশেষে আমার জন্য এটি পরিষ্কার করেছিল – এবং আমি সত্যিই আশা করি এটি তোমার জন্যও সাহায্য করবে! +ঠিক আছে, এটা আসলেই এমন একটি ধারণা যা আমার মস্তিষ্ক ভেঙে দিয়েছিল যখন আমি প্রথম শিখছিলাম, তাই আমি সেই রূপকটি শেয়ার করব যা আমাকে শেষ পর্যন্ত বুঝতে সাহায্য করেছিল—আশা করি এটা তোমার জন্যও সাহায্য করবে! -কল্পনা করো তুমি এমন একটি দেশে গিয়েছ যেখানে তুমি ভাষা জানো না, এবং তোমার খুব জরুরি প্রয়োজন কাছের বাথরুম খুঁজে বের করার (আমরা সবাই এই পরিস্থিতিতে পড়েছি, তাই না? 😅): +ধরো তুমি এমন একটি দেশে যাচ্ছো যেখানে তুমি ভাষা বলতে পারো না, আর অবিলম্বে তোমার কাছে সবচেয়ে কাছের বাথরুম খুঁজে বের করতে হবে (আমরা সবাই সেখানে গিয়েছি, তাই না? 😅): -- **নিম্ন-স্তরের প্রোগ্রামিং** হলো স্থানীয় ভাষা এত ভালোভাবে শেখা যে তুমি রাস্তার কোণে ফল বিক্রি করা বৃদ্ধার সাথে কথা বলতে পারো সাংস্কৃতিক রেফারেন্স, স্থানীয় স্ল্যাং এবং ভিতরের রসিকতা ব্যবহার করে যা শুধুমাত্র কেউ বুঝবে যে সেখানে বড় হয়েছে। খুবই চিত্তাকর্ষক এবং অত্যন্ত কার্যকর... যদি তুমি সাবলীল হও! কিন্তু যখন তুমি শুধু বাথরুম খুঁজতে চাও তখন এটি বেশ চাপের। +- **নিম্ন-স্তরের প্রোগ্রামিং** এমন যেন তুমি স্থানীয় উপভাষাটি এতটাই ভালো শিখেছ যে তুমি সেই বুড়ি ঠাকুরমা সঙ্গে ফল বিক্রেতার সাথে বহু স্থানীয় রেফারেন্স, স্থানীয় ভাষা ও অভ্যন্তরীণ রসিকতা ব্যবহার করে আড্ডা মারতে পারো যা শুধু স্থানীয় মানুষই বুঝতে পারে। খুবই প্রভাবশালী ও কার্যকর... যদি তুমি সত্যিই সাবলীল হও! কিন্তু যখন তুমি শুধু বাথরুম খুঁজছ তখন সেটা বেশ জটিল। -- **উচ্চ-স্তরের প্রোগ্রামিং** হলো সেই অসাধারণ স্থানীয় বন্ধুর মতো যে তোমাকে বুঝে। তুমি "আমি সত্যিই একটি বাথরুম খুঁজতে চাই" সাধারণ ইংরেজিতে বলতে পারো, এবং তারা সমস্ত সাংস্কৃতিক অনুবাদ পরিচালনা করে এবং তোমার অ-স্থানীয় মস্তিষ্কের জন্য অর্থবহভাবে দিকনির্দেশনা দেয়। +- **উচ্চ-স্তরের প্রোগ্রামিং** হল সেই অসাধারন স্থানীয় বন্ধু যিনি তোমাকে বুঝে; তুমি সহজ ইংরেজিতে বলতে পারো "আমার বাথরুম খুঁজতে হবে," আর তারা সমস্ত সাংস্কৃতিক অনুবাদ করে এমন একটি পথ নির্দেশনা দেয় যা তোমার অজানা মস্তিষ্কেও একদম পরিষ্কার হয়। -প্রোগ্রামিংয়ের ক্ষেত্রে: -- **নিম্ন-স্তরের ভাষা** (যেমন Assembly বা C) তোমাকে কম্পিউটারের আসল হার্ডওয়্যারের সাথে অত্যন্ত বিস্তারিত কথোপকথন করতে দেয়, কিন্তু তোমাকে একটি মেশিনের মতো চিন্তা করতে হয়, যা... ঠিক আছে, এটি একটি বড় মানসিক পরিবর্তন! -- **উচ্চ-স্তরের ভাষা** (যেমন JavaScript, Python, বা C#) তোমাকে একজন মানুষের মতো চিন্তা করতে দেয় যখন তারা সমস্ত মেশিন-স্পিক পরিচালনা করে। এছাড়া, তাদের এমন অবিশ্বাস্যভাবে স্বাগত জানানো সম্প্রদায় আছে যারা নতুন হওয়ার অভিজ্ঞতা মনে রাখে এবং সত্যিই সাহায্য করতে চায়! +প্রোগ্রামিংয়ের ভাষায়: +- **নিম্ন-স্তরের ভাষা** (যেমন এসেম্বলি বা সি) তোমাকে কম্পিউটারের আসল হার্ডওয়ারের সঙ্গে খুব বিস্তারিত কথোপকথন করতে দেয়, কিন্তু তোমাকে মেশিনের মত চিন্তা করতে হবে, যা বলতে গেলে একটি বড় মানসিক পরিবর্তন! +- **উচ্চ-স্তরের ভাষা** (যেমন JavaScript, Python, অথবা C#) তোমাকে মানবের মত চিন্তা করতে দেয় এবং তারা পেছনে সব মেশিন-ভাষার কাজ করে দেয়। সাথে সাথে, এগুলোর এমন অসাধারণ মৈত্রীপূর্ণ সম্প্রদায় আছে যেটা তোমাকে মনে করিয়ে দেয় তারা যখন নতুন ছিল তখন তারা কেমন ছিল এবং তারা তোমাকে সাহায্য করতে চায়! -তুমি অনুমান করতে পারো আমি কোনটি দিয়ে শুরু করার পরামর্শ দেব? 😉 উচ্চ-স্তরের ভাষা হলো এমন প্রশিক্ষণ চাকা যা তুমি কখনো খুলতে চাইবে না কারণ তারা পুরো অভিজ্ঞতাকে অনেক বেশি উপভোগ্য করে তোলে! +তুমি ভাবছ কোথা থেকে শুরু করো? 😉 উচ্চ-স্তরের ভাষাগুলো হলো এমন প্রশিক্ষণ চাকা যা তুমি কখনই খুলে ফেলতে চাও না কারণ তারা পুরো অভিজ্ঞতাটাকে আরো উপভোগ্য করে তোলে! ```mermaid flowchart TB - A["👤 Human Thought:
'I want to calculate Fibonacci numbers'"] --> B{Choose Language Level} + A["👤 মানব চিন্তা:
'আমি ফিবোনাচ্চি সংখ্যা গণনা করতে চাই'"] --> B{ভাষার স্তর নির্বাচন করুন} - B -->|High-Level| C["🌟 JavaScript/Python
Easy to read and write"] - B -->|Low-Level| D["⚙️ Assembly/C
Direct hardware control"] + B -->|উচ্চ-স্তর| C["🌟 জাভাস্ক্রিপ্ট/পাইথন
সহজে পড়া এবং লেখা যায়"] + B -->|নীচু-স্তর| D["⚙️ অ্যাসেমবলি/সি
ডিরেক্ট হার্ডওয়্যার নিয়ন্ত্রণ"] - C --> E["📝 Write: fibonacci(10)"] - D --> F["📝 Write: mov r0,#00
sub r0,r0,#01"] + C --> E["📝 লিখুন: fibonacci(10)"] + D --> F["📝 লিখুন: mov r0,#00
sub r0,r0,#01"] - E --> G["🤖 Computer Understanding:
Translator handles complexity"] + E --> G["🤖 কম্পিউটার বোঝা:
অনুবাদক জটিলতা সামলায়"] F --> G - G --> H["💻 Same Result:
0, 1, 1, 2, 3, 5, 8, 13..."] + G --> H["💻 একই ফলাফল:
0, 1, 1, 2, 3, 5, 8, 13..."] style C fill:#e1f5fe style D fill:#fff3e0 style H fill:#e8f5e8 ``` +### কেন উচ্চ-স্তরের ভাষাগুলো এত বন্ধুতা পূর্ণ, আমি দেখাবো -### কেন উচ্চ-স্তরের ভাষা এত বেশি বন্ধুত্বপূর্ণ তা আমি তোমাকে দেখাই - -ঠিক আছে, আমি তোমাকে এমন কিছু দেখাতে যাচ্ছি যা পুরোপুরি প্রদর্শন করে কেন আমি উচ্চ-স্তরের ভাষার প্রেমে পড়েছি, কিন্তু প্রথমে – আমি তোমার কাছ থেকে একটি প্রতিশ্রুতি চাই। যখন তুমি প্রথম কোড উদাহরণটি দেখবে, আতঙ্কিত হয়ো না! এটি ভয়ঙ্কর দেখানোর জন্যই তৈরি করা হয়েছে। এটাই আমি বোঝাতে চাইছি! +ঠিক আছে, আমি তোমাকে কিছু দেখাতে যাচ্ছি যা দেখায় কেন আমি উচ্চ-স্তরের ভাষাগুলো ভালোবাসি, কিন্তু আগে—তুমি আমাকে একটা প্রতিশ্রুতি দাও। প্রথম কোড উদাহরণ দেখলে ভয় পেও না! এটা যথাযথরূপে একটু জটিল দেখাতে হবে। এজন্যই আমি এটা ধরিয়ে দিতে চাচ্ছি! -আমরা একই কাজ দুটি সম্পূর্ণ ভিন্ন শৈলীতে লেখা দেখব। দুটিই তৈরি করে যাকে বলা হয় Fibonacci সিকোয়েন্স – এটি একটি সুন্দর গাণিতিক প্যাটার্ন যেখানে প্রতিটি সংখ্যা আগের দুটি সংখ্যার যোগফল: ০, ১, ১, ২, ৩, ৫, ৮, ১৩... (মজার তথ্য: তুমি এই প্যাটার্ন প্রকৃতির সর্বত্র খুঁজে পাবে – সূর্যমুখীর বীজের ঘূর্ণন, পাইনকোনের প্যাটার্ন, এমনকি গ্যালাক্সি গঠনের পদ্ধতিতে!) +আমরা একই কাজ দুইটি সম্পূর্ণ ভিন্ন স্টাইলেই করব। দুইটাই ফিবোনাচ্চি সিকোয়েন্স তৈরি করবে – এটি একটি সুন্দর গণিত প্যাটার্ন যেখানে প্রতিটি সংখ্যা তার আগের দুটির যোগফল: ০, ১, ১, ২, ৩, ৫, ৮, ১৩... (মজার কথা: তুমি এই প্যাটার্ন প্রকৃতিতে সর্বত্র পাবে—সূর্যমুখীর বীজের সর্পিল, পাইনকন নিদর্শন, এমনকি গ্যালাক্সির গঠনেও!) -তফাৎ দেখতে প্রস্তুত? চলো যাই! +দেখতে প্রস্তুত? চলো যাই! -**উচ্চ-স্তরের ভাষা (JavaScript) – মানব-বান্ধব:** +**উচ্চ-স্তরের ভাষা (JavaScript) – মানুষের জন্য সহজ:** ```javascript -// Step 1: Basic Fibonacci setup +// ধাপ ১: মৌলিক ফিবোনাচ্চি সেটআপ const fibonacciCount = 10; let current = 0; let next = 1; @@ -185,32 +183,32 @@ let next = 1; console.log('Fibonacci sequence:'); ``` -**এই কোডটি যা করে:** -- **ঘোষণা করে** একটি কনস্ট্যান্ট যা নির্ধারণ করে আমরা কত Fibonacci সংখ্যা তৈরি করতে চাই -- **প্রাথমিকভাবে সেট করে** দুটি ভ্যারিয়েবল যা সিকোয়েন্সের বর্তমান এবং পরবর্তী সংখ্যাগুলো ট্র্যাক করে -- **শুরু করে** Fibonacci প্যাটার্ন নির্ধারণকারী প্রাথমিক মান (০ এবং ১) -- **প্রদর্শন করে** একটি হেডার বার্তা যা আমাদের আউটপুট চিহ্নিত করে +**এই কোডটি যা করে তা হলো:** +- **একটি ধ্রুবক ঘোষণা** করে আমাদের কত সংখ্যক ফিবোনাচ্চি সংখ্যা দরকার তা নির্ধারণ করে +- **দুটি ভেরিয়েবল শুরু** করে যা সিকোয়েন্সের বর্তমান ও পরবর্তী সংখ্যা ট্র্যাক করে +- **শুরুতে মান সেট** করে (০ ও ১) যেগুলো ফিবোনাচ্চি প্যাটার্ন সংজ্ঞায়িত করে +- **একটি শিরোনাম বার্তা প্রদর্শিত করে** আমাদের আউটপুটের পরিচয় হিসাবে ```javascript -// Step 2: Generate the sequence with a loop +// ধাপ ২: একটি লুপ দিয়ে সিকোয়েন্স তৈরি করুন for (let i = 0; i < fibonacciCount; i++) { console.log(`Position ${i + 1}: ${current}`); - // Calculate next number in sequence + // সিকোয়েন্সে পরবর্তী সংখ্যা গণনা করুন const sum = current + next; current = next; next = sum; } ``` -**এখানে যা ঘটে তা ভেঙে দেখা:** -- **লুপ করে** সিকোয়েন্সের প্রতিটি অবস্থান একটি `for` লুপ ব্যবহার করে -- **প্রদর্শন করে** প্রতিটি সংখ্যা তার অবস্থানসহ টেমপ্লেট লিটারাল ফরম্যাটিং ব্যবহার করে -- **গণনা করে** পরবর্তী Fibonacci সংখ্যা বর্তমান এবং পরবর্তী মান যোগ করে -- **আপডেট করে** আমাদের ট্র্যাকিং ভ্যারিয়েবলগুলো পরবর্তী ইটারেশনে যাওয়ার জন্য +**দেখো এখানে কী হচ্ছে:** +- **`for` লুপের মাধ্যমে** সিকোয়েন্সের প্রতিটি অবস্থানে ঘুরে +- **প্রতিটি সংখ্যা তার অবস্থানসহ** টেমপ্লেট লিটারাল ফর্ম্যাটিং দিয়ে দেখায় +- **পরবর্তী ফিবোনাচ্চি সংখ্যা হিসেব করে** বর্তমান ও পরবর্তী মান যোগ করে +- **আমাদের ট্র্যাকিং ভেরিয়েবল আপডেট করে** পরবর্তী ধাপে যাওয়ার জন্য ```javascript -// Step 3: Modern functional approach +// ধাপ ৩: আধুনিক কার্যকরী পদ্ধতি const generateFibonacci = (count) => { const sequence = [0, 1]; @@ -221,129 +219,166 @@ const generateFibonacci = (count) => { return sequence; }; -// Usage example +// ব্যবহারের উদাহরণ const fibSequence = generateFibonacci(10); console.log(fibSequence); ``` -**উপরের কোডে -- **মন্তব্য**: উচ্চ-স্তরের প্রোগ্রামিং ভাষা ব্যাখ্যামূলক মন্তব্যকে উৎসাহিত করে যা কোডকে স্বয়ং-দলিলীকরণ করে তোলে। -- **গঠন**: জাভাস্ক্রিপ্টের যৌক্তিক প্রবাহ মানুষের সমস্যাগুলি ধাপে ধাপে চিন্তা করার পদ্ধতির সাথে মিলে যায়। -- **রক্ষণাবেক্ষণ**: বিভিন্ন প্রয়োজনের জন্য জাভাস্ক্রিপ্ট সংস্করণ আপডেট করা সহজ এবং পরিষ্কার। +**উপরের কোডে আমরা:** +- **মডার্ন অ্যারো ফাংশন সিনট্যাক্স দিয়ে** একটি পুনঃব্যবহারযোগ্য ফাংশন তৈরি করেছি +- **একটি অ্যারে তৈরি করেছি** পুরো সিকোয়েন্স সংরক্ষণ করার জন্য, একে একে প্রদর্শনের পরিবর্তে +- **অ্যারে ইনডেক্স ব্যবহার করেছি** প্রতিটি নতুন সংখ্যা পূর্বের মান থেকে হিসাব করার জন্য +- **সম্পূর্ণ সিকোয়েন্স রিটার্ন করেছি** যাতে প্রোগ্রামের অন্যান্য অংশেও ব্যবহারযোগ্য হয় + +**নিম্ন-স্তরের ভাষা (ARM Assembly) – কম্পিউটারের জন্য বন্ধুত্বপূর্ণ:** + +```assembly + area ascen,code,readonly + entry + code32 + adr r0,thumb+1 + bx r0 + code16 +thumb + mov r0,#00 + sub r0,r0,#01 + mov r1,#01 + mov r4,#10 + ldr r2,=0x40000000 +back add r0,r1 + str r0,[r2] + add r2,#04 + mov r3,r0 + mov r0,r1 + mov r1,r3 + sub r4,#01 + cmp r4,#00 + bne back + end +``` + +দেখবে কিভাবে JavaScript সংস্করণটি ইংরেজি নির্দেশনার মতো পড়ে, যখন Assembly সংস্করণটি রহস্যময় কমান্ড ব্যবহার করে সরাসরি কম্পিউটারের প্রসেসর নিয়ন্ত্রণ করে। দুটোই একই কাজ সম্পন্ন করে, কিন্তু উচ্চ-স্তরের ভাষাটি মানুষের জন্য অনেক সহজ বোঝা, লেখা এবং রক্ষণাবেক্ষণের। + +**মুখ্য পার্থক্য যা তুমি লক্ষ্য করবে:** +- **পঠনযোগ্যতা**: JavaScript বর্ণনামূলক নাম যেমন `fibonacciCount` ব্যবহার করে, যেখানে Assembly রহস্যময় লেবেল যেমন `r0`, `r1` ব্যবহার করে +- **মন্তব্য**: উচ্চ-স্তরের ভাষাগুলো ব্যাখ্যামূলক মন্তব্যকে উৎসাহিত করে যা কোডকে স্ব-মূল্যায়নযোগ্য করে তোলে +- **গঠন**: JavaScript এর যৌক্তিক প্রবাহ মানুষের সমস্যাগুলো ধাপে ধাপে চিন্তার সাথে মিলে যায় +- **রক্ষণাবেক্ষণ**: বিভিন্ন চাহিদার জন্য JavaScript সংস্করণ আপডেট করা সরল এবং স্পষ্ট + +✅ **ফিবনাচ্চি ধারাবাহিক সম্পর্কে**: এই অত্যন্ত মনোরম সংখ্যার প্যাটার্ন (যেখানে প্রতিটি সংখ্যা তার পূর্বের দুই সংখ্যার যোগফল: 0, 1, 1, 2, 3, 5, 8...) প্রকৃতিতে *সর্বত্রই* দেখা যায়! আপনি এটি সূর্যমুখী ফুলের স্পাইরাল, পাইনকোনের প্যাটার্ন, নটিলাস শেল কিভাবে বাঁক নেয় এবং এমনকি গাছের শাখাগুলোর বৃদ্ধিতেও খুঁজে পাবেন। এটি অত্যন্ত বিস্ময়কর কিভাবে গণিত এবং কোড আমাদের প্রাকৃতিক সুন্দরতা তৈরি করতে ব্যবহৃত প্যাটার্নগুলো বোঝাতে এবং পুনরায় তৈরি করতে সহায়তা করে! -✅ **ফিবোনাচি সিকোয়েন্স সম্পর্কে**: এই অসাধারণ সুন্দর সংখ্যার প্যাটার্ন (যেখানে প্রতিটি সংখ্যা আগের দুটি সংখ্যার যোগফল: ০, ১, ১, ২, ৩, ৫, ৮...) প্রকৃতিতে প্রায় *প্রতিটি জায়গায়* দেখা যায়! আপনি এটি সূর্যমুখীর ঘূর্ণনে, পাইনকোনের প্যাটার্নে, নটিলাস শেলের বাঁকানো আকৃতিতে, এমনকি গাছের শাখাগুলির বৃদ্ধির পদ্ধতিতেও দেখতে পাবেন। এটা সত্যিই অবিশ্বাস্য যে গণিত এবং কোড আমাদের প্রকৃতির সৌন্দর্য তৈরির প্যাটার্নগুলি বুঝতে এবং পুনরায় তৈরি করতে সাহায্য করতে পারে! -## সেই ভিত্তি যা জাদু তৈরি করে +## যেসব মৌলিক উপাদান ম্যাজিক তৈরি করে -ঠিক আছে, এখন আপনি প্রোগ্রামিং ভাষাগুলি কীভাবে কাজ করে তা দেখেছেন, আসুন সেই মৌলিক অংশগুলি ভেঙে দেখি যা প্রায় প্রতিটি প্রোগ্রামের ভিত্তি। এগুলিকে আপনার প্রিয় রেসিপির প্রয়োজনীয় উপাদান হিসাবে ভাবুন – একবার আপনি বুঝতে পারবেন প্রতিটি কী করে, আপনি প্রায় যেকোনো ভাষায় কোড পড়তে এবং লিখতে পারবেন! +ঠিক আছে, এখন যেহেতু আপনি প্রোগ্রামিং ভাষাগুলো কর্মরত অবস্থায় দেখেছেন, চলুন সেই মৌলিক উপাদানগুলো ভাঙা যাক যা লিখিত প্রতিটি প্রোগ্রামের ভিত্তি তৈরি করে। এগুলোকে ভাবুন আপনার প্রিয় রেসিপির অপরিহার্য উপাদান হিসেবে – একবার আপনি প্রতিটির কাজ বুঝে গেলে, আপনি প্রায় যেকোনো ভাষায় কোড পড়তে এবং লিখতে সক্ষম হবেন! -এটি প্রোগ্রামিংয়ের ব্যাকরণ শেখার মতো। মনে আছে স্কুলে যখন আপনি নাম, ক্রিয়া এবং বাক্য গঠনের নিয়ম শিখেছিলেন? প্রোগ্রামিংয়ের নিজস্ব ব্যাকরণ রয়েছে, এবং সত্যি বলতে, এটি ইংরেজি ব্যাকরণের চেয়ে অনেক বেশি যৌক্তিক এবং ক্ষমাশীল! 😄 +এটি প্রোগ্রামিং ব্যাকরণ শিখার মতো। স্কুলে আপনি যখন noun, verb এবং বাক্য গঠনের নিয়ম শিখেছিলেন মনে আছে? প্রোগ্রামিং এরও নিজের ব্যাকরণ আছে, এবং সত্যি বলতে তা ইংরেজি ব্যাকরণ থেকে অনেক বেশি যৌক্তিক এবং সহিষ্ণু! 😄 -### স্টেটমেন্ট: ধাপে ধাপে নির্দেশনা +### বাক্য: ধাপে ধাপে নির্দেশনা -চলুন **স্টেটমেন্ট** দিয়ে শুরু করি – এগুলি আপনার কম্পিউটারের সাথে কথোপকথনের পৃথক বাক্যের মতো। প্রতিটি স্টেটমেন্ট কম্পিউটারকে একটি নির্দিষ্ট কাজ করতে বলে, ঠিক যেমন নির্দেশ দেওয়া: "এখানে বাঁ দিকে ঘুরুন," "লাল আলোতে থামুন," "ওই জায়গায় পার্ক করুন।" +আসুন শুরু করি **বাক্য** দিয়ে – এগুলো হলো আপনার কম্পিউটারের সাথে কথোপকথনের একক বাক্য। প্রতিটি বাক্য কম্পিউটারকে একটি নির্দিষ্ট কাজ করতে বলে, ঠিক যেমন দিকনির্দেশ দেয়া: "এখানে বামদিকে ঘুরুন," "লাল আলোয় থেমে যান," "ওখানে গাড়ি দাঁড় করান।" -স্টেটমেন্টের ব্যাপারে আমি যা পছন্দ করি তা হল এগুলি সাধারণত কতটা পড়ার যোগ্য। এটি দেখুন: +বাক্যগুলো সাধারণত পড়তে কতটা সহজ তা আমি খুবই পছন্দ করি। দেখে নিন: ```javascript -// Basic statements that perform single actions +// মৌলিক বিবৃতি যা একক ক্রিয়া সম্পাদন করে const userName = "Alex"; console.log("Hello, world!"); const sum = 5 + 3; ``` - -**এই কোডটি যা করে:** -- **ঘোষণা** করে একটি কনস্ট্যান্ট ভেরিয়েবল ব্যবহারকারীর নাম সংরক্ষণ করতে -- **প্রদর্শন** করে একটি অভিবাদন বার্তা কনসোল আউটপুটে -- **গণনা** করে এবং একটি গাণিতিক অপারেশনের ফলাফল সংরক্ষণ করে + +**এই কোডটি যা করে:** +- একটি ধ্রুবক ভেরিয়েবল ঘোষণা করে যা ব্যবহারকারীর নাম সংরক্ষণ করে +- কনসোলে স্বাগতম বার্তা প্রদর্শন করে +- একটি গাণিতিক অপারেশনের ফলাফল গণনা করে সংরক্ষণ করে ```javascript -// Statements that interact with web pages +// যে বিবৃতিগুলি ওয়েব পৃষ্ঠাগুলির সাথে যোগাযোগ করে document.title = "My Awesome Website"; document.body.style.backgroundColor = "lightblue"; ``` - -**ধাপে ধাপে যা ঘটছে:** -- **পরিবর্তন** করে ব্রাউজার ট্যাবে প্রদর্শিত ওয়েবপেজের শিরোনাম -- **পরিবর্তন** করে পুরো পৃষ্ঠার ব্যাকগ্রাউন্ড রঙ + +**ধাপে ধাপে, যা হচ্ছে:** +- ব্রাউজার ট্যাবে প্রদর্শিত ওয়েবপেজের শিরোনাম পরিবর্তন করে +- পুরো পৃষ্ঠা বডির ব্যাকগ্রাউন্ড রঙ পরিবর্তন করে ### ভেরিয়েবল: আপনার প্রোগ্রামের মেমোরি সিস্টেম -ঠিক আছে, **ভেরিয়েবল** সত্যিই আমার শেখানোর প্রিয় ধারণাগুলির মধ্যে একটি কারণ এগুলি এমন জিনিসের মতো যা আপনি প্রতিদিন ব্যবহার করেন! +ঠিক আছে, **ভেরিয়েবল** সত্যি বলতে আমার সবচেয়ে প্রিয় ধারণাগুলোর একটি কারণ এগুলো প্রতিদিন আপনি যা ব্যবহার করেন তার মতোই! -আপনার ফোনের কন্টাক্ট লিস্টের কথা ভাবুন। আপনি সবার ফোন নম্বর মুখস্থ করেন না – বরং "মা," "সেরা বন্ধু," বা "পিজ্জা প্লেস যা রাত ২টা পর্যন্ত ডেলিভারি দেয়" সংরক্ষণ করেন এবং আপনার ফোন আসল নম্বরগুলি মনে রাখে। ভেরিয়েবল ঠিক একইভাবে কাজ করে! এগুলি লেবেলযুক্ত কন্টেইনারের মতো যেখানে আপনার প্রোগ্রাম তথ্য সংরক্ষণ করতে পারে এবং পরে একটি অর্থপূর্ণ নাম ব্যবহার করে তা পুনরুদ্ধার করতে পারে। +আপনার ফোনের কন্টাক্ট তালিকা ভাবুন একটু। আপনি প্রত্যেকের ফোন নম্বর মুখস্থ করেন না – পরিবর্তে “মা,” “সেরা বন্ধু,” অথবা “পিজ্জা ডেলিভারি যা রাত ২টা পর্যন্ত” সংরক্ষণ করেন এবং আপনার ফোন সত্যিকার নম্বরগুলো মনে রাখে। ভেরিয়েবলগুলো একই রকম! এগুলো লেবেলযুক্ত পাত্রের মতো যেখানে আপনার প্রোগ্রাম তথ্য সংরক্ষণ করে এবং পরে বোঝান যায় এমন নাম ব্যবহার করে ফেরত আনে। -এখানে যা সত্যিই চমৎকার: আপনার প্রোগ্রাম চলার সময় ভেরিয়েবল পরিবর্তিত হতে পারে (তাই নাম "ভেরিয়েবল" – দেখুন তারা কী করেছে?)। যেমন আপনি হয়তো সেই পিজ্জা প্লেসের কন্টাক্ট আপডেট করবেন যখন আপনি আরও ভালো কোনো জায়গা খুঁজে পাবেন, তেমনি ভেরিয়েবলও নতুন তথ্য শিখলে বা পরিস্থিতি পরিবর্তিত হলে আপডেট হতে পারে! +একটি অসাধারণ জিনিস হলো: আপনার প্রোগ্রাম চলাকালীন ভেরিয়েবল পরিবর্তিত হতে পারে (এজন্যে নামটা “variable” – দেখুন কী সুন্দর)। যেমন আপনি পিজ্জা ডেলিভারি লিস্ট আপডেট করতে পারেন যখন আরও ভাল কিছু খুঁজে পান, ভেরিয়েবলগুলোও প্রোগ্রাম শিখতে থাকলে বা পরিস্থিতি পরিবর্তিত হলে আপডেট হতে পারে! -আমি আপনাকে দেখাই এটি কতটা সুন্দর এবং সহজ হতে পারে: +চলুন দেখাই কিভাবে এটা সুন্দর ও সহজ: ```javascript -// Step 1: Creating basic variables +// ধাপ ১: মৌলিক ভেরিয়েবল তৈরি করা const siteName = "Weather Dashboard"; let currentWeather = "sunny"; let temperature = 75; let isRaining = false; ``` - -**এই ধারণাগুলি বোঝা:** -- **সংরক্ষণ** করুন অপরিবর্তনীয় মান `const` ভেরিয়েবলে (যেমন সাইটের নাম) -- **ব্যবহার** করুন `let` মানগুলির জন্য যা আপনার প্রোগ্রামে পরিবর্তিত হতে পারে -- **অ্যাসাইন** করুন বিভিন্ন ডেটা টাইপ: স্ট্রিং (টেক্সট), সংখ্যা এবং বুলিয়ান (সত্য/মিথ্যা) -- **নির্বাচন** করুন বর্ণনামূলক নাম যা প্রতিটি ভেরিয়েবল কী ধারণ করে তা ব্যাখ্যা করে + +**এই ধারণাগুলো বোঝা:** +- ধ্রুবক মান `const` এ সংরক্ষণ করুন (যেমন সাইটের নাম) +- এমন মানের জন্য `let` ব্যবহার করুন যা প্রোগ্রামের মধ্যে পরিবর্তিত হতে পারে +- বিভিন্ন ডাটা টাইপ বরাদ্দ করুন: স্ট্রিং (টেক্সট), সংখ্যা, বুলিয়ান (সত্য/মিথ্যা) +- বর্ণনামূলক নাম দিন যা প্রতিটি ভেরিয়েবলের বিষয় বুঝায় ```javascript -// Step 2: Working with objects to group related data +// ধাপ ২: সংশ্লিষ্ট ডেটা গ্রুপ করার জন্য অবজেক্ট নিয়ে কাজ করা const weatherData = { location: "San Francisco", humidity: 65, windSpeed: 12 }; ``` - -**উপরের কোডে আমরা:** -- **তৈরি** করেছি একটি অবজেক্ট যা সম্পর্কিত আবহাওয়ার তথ্য একত্রিত করে -- **সংগঠিত** করেছি একাধিক তথ্য এক ভেরিয়েবল নামের অধীনে -- **ব্যবহার** করেছি কী-ভ্যালু পেয়ার প্রতিটি তথ্য স্পষ্টভাবে লেবেল করতে + +**উপরের কোডে আমরা:** +- সম্পর্কিত আবহাওয়ার তথ্য একত্রিত করতে একটি অবজেক্ট তৈরি করেছি +- একাধিক তথ্য একটি ভেরিয়েবল নামের অধীনে সংগঠিত করেছি +- প্রতিটি তথ্য স্পষ্ট করার জন্য কী-ভ্যালু জোড়া ব্যবহার করেছি ```javascript -// Step 3: Using and updating variables +// ধাপ ৩: পরিবর্তনশীল ব্যবহার এবং আপডেট করা console.log(`${siteName}: Today is ${currentWeather} and ${temperature}°F`); console.log(`Wind speed: ${weatherData.windSpeed} mph`); -// Updating changeable variables +// পরিবর্তনশীল পরিবর্তনশীল আপডেট করা currentWeather = "cloudy"; temperature = 68; ``` - -**প্রতিটি অংশ বুঝি:** -- **প্রদর্শন** করি তথ্য টেমপ্লেট লিটারাল ব্যবহার করে `${}` সিনট্যাক্সে -- **অ্যাক্সেস** করি অবজেক্ট প্রপার্টি ডট নোটেশন (`weatherData.windSpeed`) ব্যবহার করে -- **আপডেট** করি `let` দিয়ে ঘোষিত ভেরিয়েবল পরিবর্তিত পরিস্থিতি প্রতিফলিত করতে -- **সংযুক্ত** করি একাধিক ভেরিয়েবল অর্থপূর্ণ বার্তা তৈরি করতে + +**প্রত্যেক অংশ বোঝা যাক:** +- `${}` সিনট্যাক্স ব্যবহার করে টেমপ্লেট লিটারাল দিয়ে তথ্য প্রদর্শন +- অবজেক্টের প্রপার্টি ডট নোটেশন (`weatherData.windSpeed`) দিয়ে অ্যাক্সেস করা +- `let` দিয়ে ঘোষিত ভেরিয়েবলগুলো আপডেট করা যাতে পরিবর্তনশীল অবস্থা প্রতিফলিত হয় +- অর্থবহ বার্তা তৈরির জন্য একাধিক ভেরিয়েবল একত্রিত করা ```javascript -// Step 4: Modern destructuring for cleaner code +// ধাপ ৪: পরিষ্কার কোডের জন্য আধুনিক ডেসট্রাকচারিং const { location, humidity } = weatherData; console.log(`${location} humidity: ${humidity}%`); ``` + +**আপনাকে যা জানতে হবে:** +- ডেসট্রাকচারিং অ্যাসাইনমেন্ট ব্যবহার করে অবজেক্ট থেকে নির্দিষ্ট প্রপার্টি বের করা +- অবজেক্ট কী এর সাথে একই নামের নতুন ভেরিয়েবল তৈরি করা +- ডট নোটেশন বারবার ব্যবহার থেকে কোড সরল করা -**আপনার যা জানা দরকার:** -- **এক্সট্র্যাক্ট** করি নির্দিষ্ট প্রপার্টি অবজেক্ট থেকে ডেস্ট্রাকচারিং অ্যাসাইনমেন্ট ব্যবহার করে -- **তৈরি** করি নতুন ভেরিয়েবল যা অবজেক্ট কী-এর মতো নাম ধারণ করে -- **সরলীকরণ** করি কোড পুনরাবৃত্তি ডট নোটেশন এড়িয়ে - -### কন্ট্রোল ফ্লো: আপনার প্রোগ্রামকে চিন্তা করতে শেখানো +### কন্ট্রোল ফ্লো: আপনার প্রোগ্রামকে চিন্তা শেখানো -ঠিক আছে, এখানেই প্রোগ্রামিং সত্যিই অবিশ্বাস্য হয়ে ওঠে! **কন্ট্রোল ফ্লো** মূলত আপনার প্রোগ্রামকে স্মার্ট সিদ্ধান্ত নিতে শেখানো, ঠিক যেমন আপনি প্রতিদিন করেন। +ঠিক আছে, এটা সেই জায়গা যেখানে প্রোগ্রামিং সত্যিই অবিশ্বাস্য হয়ে ওঠে! **কন্ট্রোল ফ্লো** হলো আপনার প্রোগ্রামকে বুদ্ধিমত্তার সাথে সিদ্ধান্ত নিতে শেখানো, ঠিক যেমন আপনি প্রতিদিন বিনা চিন্তায় করেন। -ভাবুন: আজ সকালে আপনি সম্ভবত এমন কিছু ভেবেছেন, "যদি বৃষ্টি হয়, আমি ছাতা নিয়ে যাব। যদি ঠান্ডা লাগে, আমি জ্যাকেট পরব। যদি দেরি হয়, আমি নাশতা বাদ দিয়ে পথে কফি কিনব।" আপনার মস্তিষ্ক স্বাভাবিকভাবে এই if-then যুক্তি প্রতিদিন অসংখ্যবার অনুসরণ করে! +ভাবুন: আজ সকালে হয়তো আপনি এমন কিছু করেন “যদি বৃষ্টি হয়, আমি ছাতা নেব। যদি ঠান্ডা হয়, জ্যাকেট পড়ব। দেরি হলে নাস্তা বাদ দিয়ে পথে কফি নেব।” আপনার মস্তিষ্ক স্বাভাবিকভাবেই এই if-then লজিক দশোবার অনুসরণ করে প্রতিদিন! -এটি প্রোগ্রামগুলিকে বুদ্ধিমান এবং জীবন্ত মনে করে তোলে, শুধু কিছু বিরক্তিকর, পূর্বনির্ধারিত স্ক্রিপ্ট অনুসরণ করার পরিবর্তে। তারা আসলে একটি পরিস্থিতি দেখতে পারে, কী ঘটছে তা মূল্যায়ন করতে পারে এবং উপযুক্তভাবে প্রতিক্রিয়া জানাতে পারে। এটি আপনার প্রোগ্রামকে একটি মস্তিষ্ক দেওয়ার মতো যা মানিয়ে নিতে এবং সিদ্ধান্ত নিতে পারে! +এটাই প্রোগ্রামগুলোকে বুদ্ধিমান এবং জীবন্ত করে তোলে, শুধু একটি একঘেয়েমি স্ক্রিপ্ট অনুসরণ করার বদলে। তারা একটি পরিস্থিতি দেখতে পারে, মূল্যায়ন করতে পারে এবং যথোপযুক্ত প্রতিক্রিয়া দিতে পারে। এটা আপনার প্রোগ্রামকে এমন মস্তিষ্ক দেওয়ার মত যা মানিয়ে নিতে এবং সিদ্ধান্ত নিতে পারে! -দেখতে চান এটি কীভাবে সুন্দরভাবে কাজ করে? আমি আপনাকে দেখাই: +দেখতে চান এটা কতটা সুন্দর কাজ করে? দেখুন: ```javascript -// Step 1: Basic conditional logic +// ধাপ ১: মৌলিক শর্তাধীন লজিক const userAge = 17; if (userAge >= 18) { @@ -353,15 +388,15 @@ if (userAge >= 18) { console.log(`You'll be able to vote in ${yearsToWait} year(s).`); } ``` - -**এই কোডটি যা করে:** -- **পরীক্ষা** করে ব্যবহারকারীর বয়স ভোট দেওয়ার যোগ্যতা পূরণ করে কিনা -- **সম্পাদন** করে বিভিন্ন কোড ব্লক শর্তের ফলাফলের উপর ভিত্তি করে -- **গণনা** করে এবং প্রদর্শন করে ভোট দেওয়ার যোগ্যতা অর্জনের জন্য কত সময় বাকি -- **প্রদান** করে প্রতিটি পরিস্থিতির জন্য নির্দিষ্ট, সহায়ক প্রতিক্রিয়া + +**এই কোড যা করে:** +- ব্যবহারকারীর বয়স ভোটাধিকারের যোগ্যতা মেযা করে +- শর্ত অনুসারে বিভিন্ন কোড ব্লক চালায় +- যদি ১৮ এর নিচে হয় ভোটাধিকারের যোগ্য হওয়ার অবশিষ্ট সময় হিসাব করে দেখায় +- প্রতিটি পরিস্থিতির জন্য নির্দিষ্ট, সহায়ক ফিডব্যাক দেয় ```javascript -// Step 2: Multiple conditions with logical operators +// ধাপ ২: লজিক্যাল অপারেটর সহ একাধিক শর্ত্‌গুলি const userAge = 17; const hasPermission = true; @@ -373,26 +408,26 @@ if (userAge >= 18 && hasPermission) { console.log("Sorry, you must be at least 16 years old."); } ``` - -**এখানে যা ঘটছে তা বিশ্লেষণ:** -- **সংযুক্ত** করি একাধিক শর্ত `&&` (এবং) অপারেটর ব্যবহার করে -- **তৈরি** করি শর্তগুলির একটি শ্রেণিবিন্যাস `else if` ব্যবহার করে একাধিক পরিস্থিতির জন্য -- **হ্যান্ডেল** করি সমস্ত সম্ভাব্য কেস একটি চূড়ান্ত `else` স্টেটমেন্ট দিয়ে -- **প্রদান** করি স্পষ্ট, কার্যকর প্রতিক্রিয়া প্রতিটি ভিন্ন পরিস্থিতির জন্য + +**এখানে যা ঘটছে:** +- `&&` (এবং) অপারেটর ব্যবহার করে একাধিক শর্ত যুক্ত করা +- একাধিক পরিস্থিতির জন্য `else if` ব্যবহার করে শর্তের সজ্জা তৈরি করা +- সর্বশেষে `else` ব্যবহার করে সব সম্ভাব্য ক্ষেত্র পরিচালনা করা +- প্রতিটি ভিন্ন পরিস্থিতির জন্য স্পষ্ট এবং কার্যকর ফিডব্যাক প্রদান করা ```javascript -// Step 3: Concise conditional with ternary operator +// ধাপ ৩: টার্নারি অপারেটর দিয়ে সংক্ষিপ্ত শর্তীয় বিবৃতি const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; console.log(`Status: ${votingStatus}`); ``` - -**আপনার মনে রাখা উচিত:** -- **ব্যবহার** করুন টার্নারি অপারেটর (`? :`) সহজ দুই-বিকল্প শর্তের জন্য -- **লিখুন** শর্ত প্রথমে, তারপরে `?`, তারপর সত্য ফলাফল, তারপর `:`, তারপর মিথ্যা ফলাফল -- **প্রয়োগ** করুন এই প্যাটার্ন যখন শর্তের উপর ভিত্তি করে মান অ্যাসাইন করতে হবে + +**মনে রাখার জন্য:** +- সহজ দুই-অপশন শর্তের জন্য টার্নারি অপারেটর (`? :`) ব্যবহার করুন +- প্রথমে শর্ত লিখুন, তারপর `?`, তারপর সত্য ফলাফল, তারপর `:`, তারপর মিথ্যা ফলাফল +- যখন শর্ত অনুসারে মান বরাদ্দ করতে হয় এই প্যাটার্ন ব্যবহার করুন ```javascript -// Step 4: Handling multiple specific cases +// ধাপ ৪: একাধিক নির্দিষ্ট ক্ষেত্রে পরিচালনা করা const dayOfWeek = "Tuesday"; switch (dayOfWeek) { @@ -411,58 +446,57 @@ switch (dayOfWeek) { console.log("Invalid day of the week"); } ``` + +**এই কোড যা করে:** +- ভেরিয়েবল মান একাধিক নির্দিষ্ট কেসের সাথে মেলে কিনা পরীক্ষা করে +- সমমনোনীত কেসগুলো একত্রিত করে (সাপ্তাহিক দিনের জন্য এবং উইকএন্ডের জন্য) +- মিলে গেলে উপযুক্ত কোড ব্লক চালায় +- অপ্রত্যাশিত মানের জন্য একটি `default` কেস অন্তর্ভুক্ত করে +- পরবর্তী কেসে যাওয়া আটকাতে `break` স্টেটমেন্ট ব্যবহার করে -**এই কোডটি যা অর্জন করে:** -- **মিল** করে ভেরিয়েবল মান একাধিক নির্দিষ্ট কেসের সাথে -- **গ্রুপ** করে অনুরূপ কেস একসাথে (সপ্তাহের দিন বনাম সপ্তাহান্ত) -- **সম্পাদন** করে উপযুক্ত কোড ব্লক যখন একটি মিল পাওয়া যায় -- **অন্তর্ভুক্ত** করে একটি `default` কেস অপ্রত্যাশিত মানগুলি হ্যান্ডেল করতে -- **ব্যবহার** করে `break` স্টেটমেন্ট পরবর্তী কেসে কোড চালিয়ে যাওয়া বন্ধ করতে - -> 💡 **বাস্তব জীবনের উদাহরণ**: কন্ট্রোল ফ্লোকে ভাবুন বিশ্বের সবচেয়ে ধৈর্যশীল জিপিএসের মতো যা আপনাকে নির্দেশনা দেয়। এটি বলতে পারে "যদি মেইন স্ট্রিটে ট্রাফিক থাকে, তাহলে হাইওয়ে নিন। যদি হাইওয়েতে নির্মাণ কাজ চলতে থাকে, তাহলে সুন্দর রাস্তা ধরুন।" প্রোগ্রামগুলি ঠিক একই ধরনের শর্তযুক্ত যুক্তি ব্যবহার করে বিভিন্ন পরিস্থিতিতে বুদ্ধিমত্তার সাথে প্রতিক্রিয়া জানাতে এবং ব্যবহারকারীদের সর্বোত্তম অভিজ্ঞতা দিতে। +> 💡 **বাস্তব জীবনের উপমা**: কন্ট্রোল ফ্লোকে ভাবুন সবচেয়ে ধৈর্যশীল GPS এর দিকনির্দেশনার মতো। এটি বলতে পারে “যদি মেইন স্ট্রিটে ট্রাফিক থাকে, তাহলে হাইওয়ে নাও। যদি হাইওয়ে নির্মাণে বন্ধ থাকে, তাহলে দৃশ্যমান রুট নাও।” প্রোগ্রামগুলো এই একই ধরণের শর্তাদি লজিক ব্যবহার করে বুদ্ধিমত্তার সাথে বিভিন্ন পরিস্থিতিতে সাড়া দেয় এবং সবসময় ব্যবহারকারীদের জন্য সেরা অভিজ্ঞতা দেয়। -### 🎯 **ধারণা যাচাই: ভিত্তি আয়ত্ত করা** +### 🎯 **ধারণা যাচাই: মৌলিক উপাদান দক্ষতা** -**চলুন দেখি আপনি মৌলিক বিষয়গুলি নিয়ে কেমন করছেন:** -- আপনি কি নিজের ভাষায় একটি ভেরিয়েবল এবং একটি স্টেটমেন্টের মধ্যে পার্থক্য ব্যাখ্যা করতে পারেন? -- এমন একটি বাস্তব জীবনের পরিস্থিতি ভাবুন যেখানে আপনি একটি if-then সিদ্ধান্ত ব্যবহার করবেন (যেমন আমাদের ভোট দেওয়ার উদাহরণ) -- প্রোগ্রামিং যুক্তি সম্পর্কে এমন একটি বিষয় কী যা আপনাকে অবাক করেছে? +**চলুন দেখি আপনি মৌলিক বিষয়গুলো কতটা বুঝতে পেরেছেন:** +- আপনি কি নিজের ভাষায় ভেরিয়েবল এবং বাক্যের পার্থক্য ব্যাখ্যা করতে পারেন? +- একটি বাস্তব জীবনের উদাহরণ ভাবুন যেখানে if-then সিদ্ধান্ত ব্যবহার করবেন (যেমন আমাদের ভোটাধিকারের উদাহরণ) +- প্রোগ্রামিং যুক্তির কোন একটি বিষয় যা আপনাকে অবাক করেছে? -**দ্রুত আত্মবিশ্বাস বাড়ানোর টিপস:** +**দ্রুত আত্মবিশ্বাস বৃদ্ধিকারক:** ```mermaid flowchart LR - A["📝 Statements
(Instructions)"] --> B["📦 Variables
(Storage)"] --> C["🔀 Control Flow
(Decisions)"] --> D["🎉 Working Program!"] + A["📝 বিবৃতি
(নির্দেশনা)"] --> B["📦 ভেরিয়েবলস
(সংগ্রহস্থল)"] --> C["🔀 নিয়ন্ত্রণ প্রবাহ
(সিদ্ধান্ত)"] --> D["🎉 কার্যকর প্রোগ্রাম!"] style A fill:#ffeb3b style B fill:#4caf50 style C fill:#2196f3 style D fill:#ff4081 -``` - -✅ **পরবর্তী কী আসছে**: আমরা এই অসাধারণ যাত্রায় একসাথে এই ধারণাগুলির গভীরে আরও মজা করতে যাচ্ছি! এখন, শুধু সমস্ত আশ্চর্যজনক সম্ভাবনার জন্য উত্তেজনা অনুভব করার উপর মনোযোগ দিন। নির্দিষ্ট দক্ষতা এবং কৌশলগুলি স্বাভাবিকভাবেই অনুশীলনের সাথে লেগে থাকবে – আমি প্রতিশ্রুতি দিচ্ছি এটি আপনার প্রত্যাশার চেয়ে অনেক বেশি মজার হবে! +``` +✅ **পরবর্তী পর্যায়ে যা আসছে**: আমরা এই ধারণাগুলো আরও গভীরভাবে অন্বেষণ করে প্রচুর মজা করব! এখনই শুধু এই উত্তেজনা অনুভব করুন আপনার সামনে থাকা অসাধারণ সম্ভাবনাগুলোর জন্য। নির্দিষ্ট দক্ষতা ও কৌশলগুলো আমাদের একসাথে অনুশীলনে স্বাভাবিকভাবেই বসবে – আমি গ্যারান্টি দিচ্ছি এটি আপনি যেকোনো বিষয়ের তুলনায় অনেক বেশি মজার হবে! -## কাজের সরঞ্জাম +## বাণিজ্যের সরঞ্জাম -ঠিক আছে, এটি এমন একটি বিষয় যা আমাকে এতটাই উত্তেজিত করে তোলে যে আমি নিজেকে সামলাতে পারি না! 🚀 আমরা সেই অসাধারণ সরঞ্জামগুলি সম্পর্কে কথা বলতে যাচ্ছি যা আপনাকে মনে করাবে যে আপনি একটি ডিজিটাল স্পেসশিপের চাবি পেয়েছেন। +ঠিক আছে, এটিই এমন একটা জায়গা যেখানে আমি এত উত্তেজিত হই যে নিজেকে ধরে রাখতে পারি না! 🚀 আমরা সেই অবিশ্বাস্য সরঞ্জামগুলো নিয়ে কথা বলব যা আপনাকে ডিজিটাল মহাকাশযানের চাবি হাতে পেয়েছেন এমন অনুভূতি দেবে। -আপনি জানেন একজন শেফের সেই নিখুঁতভাবে ভারসাম্যপূর্ণ ছুরি থাকে যা তাদের হাতের এক্সটেনশনের মতো অনুভূত হয়? অথবা একজন সংগীতশিল্পীর সেই একটি গিটার থাকে যা তারা স্পর্শ করলেই গান গায়? ঠিক তেমনি, ডেভেলপারদেরও আমাদের নিজস্ব এই জাদুকরী সরঞ্জাম রয়েছে, এবং এখানে যা আপনাকে অবাক করবে – এর বেশিরভাগই সম্পূর্ণ বিনামূল্যে! +আপনি জানেন কিভাবে একজন শেফের সেই নিখুঁত ভারসাম্যপূর্ণ ছুরি থাকে যা তাদের হাতের বিস্তার মনে হয়? অথবা একজন সঙ্গীতশিল্পীর সেই গিটার যা স্পর্শ করলেই গান গায়? ঠিক তেমনই, ডেভেলপারদেরও এমন ম্যাজিক্যাল সরঞ্জাম আছে, এবং এখানে এমন কিছু আছে যা আপনার বুদ্ধি ধামাকা করে দেবে – অধিকাংশই সম্পূর্ণ ফ্রি! -আমি আপনাকে এগুলি শেয়ার করার জন্য এতটাই উত্তেজিত যে আমি প্রায় চেয়ারে লাফিয়ে উঠছি কারণ এগুলি আমাদের সফটওয়্যার তৈরির পদ্ধতিকে সম্পূর্ণভাবে বিপ্লব করেছে। আমরা কথা বলছি AI-চালিত কোডিং সহকারী যারা আপনার কোড লিখতে সাহায্য করতে পারে (আমি মজা করছি না!), ক্লাউড পরিবেশ যেখানে আপনি যেকোনো জায়গা থেকে Wi-Fi সহ পুরো অ্যাপ্লিকেশন তৈরি করতে পারেন, এবং ডিবাগিং সরঞ্জামগুলি এতটাই উন্নত যে তারা আপনার প্রোগ্রামের জন্য এক্স-রে ভিশনের মতো। +আমি আসলে চেয়ারে লাফাচ্ছি এইগুলো আপনার সাথে ভাগ করে নিতে because এর ফলে সফটওয়্যার তৈরি করার পদ্ধতি সম্পূর্ণ পরিপুর্ণ পরিবর্তিত হয়েছে। আমরা কথা বলছি AI চালিত কোডিং সহকারী নিয়ে, যারা আপনার কোড লেখায় সাহায্য করে (আমি চুটিয়ে বলছি না!), ক্লাউড এনভায়রনমেন্টের যেখানে আপনি Wi-Fi সহ যেকোনো জায়গা থেকে পুরো অ্যাপ্লিকেশন তৈরি করতে পারেন, এবং এমন ডিবাগিং সরঞ্জাম যা আপনার প্রোগ্রামের জন্য X-ray দৃষ্টি দেয়। -এবং এখানে এমন একটি অংশ রয়েছে যা এখনও আমাকে শিহরিত করে: এগুলি "শুরু করার সরঞ্জাম" নয় যা আপনি পরে ছেড়ে দেবেন। এগুলি ঠিক একই পেশাদার-গ্রেডের সরঞ্জাম যা গুগল, নেটফ্লিক্স এবং আপনার প্রিয় ইন্ডি অ্যাপ স্টুডিওর ডেভেলপাররা এই মুহূর্তে ব্যবহার করছে। এগুলি ব্যবহার করে আপনি সত্যিই একজন পেশাদারের মতো অনুভব করবেন! +এবং এখানে এমন একটি অংশ আছে যা এখনও আমাকে কেঁপে দেয়: এগুলো "শিখনার্থীদের সরঞ্জাম" নয় যা আপনি তাড়াতাড়ি বড় হয়ে ফেলবেন না। এগুলোই একই পেশাদার মানের সরঞ্জাম যা গুগল, নেটফ্লিক্স এবং আপনার প্রিয় ইন্ডি অ্যাপ স্টুডিওর ডেভেলপাররা এ মুহূর্তে ব্যবহার করছে। এগুলো ব্যবহার করে আপনি নিজেকে একজন পেশাদারই মনে করবেন! ```mermaid graph TD - A["💡 Your Idea"] --> B["⌨️ Code Editor
(VS Code)"] - B --> C["🌐 Browser DevTools
(Testing & Debugging)"] - C --> D["⚡ Command Line
(Automation & Tools)"] - D --> E["📚 Documentation
(Learning & Reference)"] - E --> F["🚀 Amazing Web App!"] + A["💡 আপনার ধারণা"] --> B["⌨️ কোড সম্পাদক
(VS কোড)"] + B --> C["🌐 ব্রাউজার ডেভটুলস
(পরীক্ষা ও ডিবাগিং)"] + C --> D["⚡ কমান্ড লাইন
(স্বয়ংক্রিয়করণ ও সরঞ্জাম)"] + D --> E["📚 ডকুমেন্টেশন
(শিখন ও রেফারেন্স)"] + E --> F["🚀 দুর্দান্ত ওয়েব অ্যাপ!"] - B -.-> G["🤖 AI Assistant
(GitHub Copilot)"] - C -.-> H["📱 Device Testing
(Responsive Design)"] - D -.-> I["📦 Package Managers
(npm, yarn)"] - E -.-> J["👥 Community
(Stack Overflow)"] + B -.-> G["🤖 এআই সহকারী
(GitHub Copilot)"] + C -.-> H["📱 ডিভাইস পরীক্ষা
(রেসপনসিভ ডিজাইন)"] + D -.-> I["📦 প্যাকেজ ম্যানেজারস
(npm, yarn)"] + E -.-> J["👥 কমিউনিটি
(Stack Overflow)"] style A fill:#fff59d style F fill:#c8e6c9 @@ -470,322 +504,352 @@ graph TD style H fill:#f3e5f5 style I fill:#ffccbc style J fill:#e8eaf6 -``` - -### কোড এডিটর এবং IDE: আপনার নতুন ডিজিটাল সঙ্গী +``` +### কোড এডিটর এবং IDE: আপনার নতুন ডিজিটাল সর্বশেষ সঙ্গী -চলুন কোড এডিটর সম্পর্কে কথা বলি – এগুলি সত্যিই আপনার নতুন প্রিয় জায়গা হতে চলেছে! এগুলিকে আপনার ব্যক্তিগত কোডিং অভয়ারণ্য হিসাবে ভাবুন যেখানে আপনি আপনার ডিজিটাল সৃষ্টিগুলি তৈরি এবং নিখুঁত করতে বেশিরভাগ সময় ব্যয় করবেন। +আসুন কথা বলি কোড এডিটর নিয়ে – এগুলো শীঘ্রই আপনার প্রিয় স্থান হয়ে উঠবে! এগুলো এমন একটি ব্যক্তিগত কোডিং আশ্রম, যেখানে আপনি আপনার অধিকাংশ সময় কাটিয়ে ডিজিটাল সৃজনশীলতা গড়ে তুলবেন এবং নিখুঁত করবেন। -কিন্তু এখানে যা একেবারে জাদুকরী তা হল আধুনিক এডিটরগুলি শুধুমাত্র ফ্যান্সি টেক্সট এডিটর নয়। এগুলি এমন একটি উজ্জ্বল, সহায়ক কোডিং পরামর্শদাতা থাকার মতো যা ২৪/৭ আপনার পাশে বসে থাকে। তারা আপনার টাইপো ধরবে আপনি লক্ষ্য করার আগেই, এমন উন্নতির পরামর্শ দেবে যা আপনাকে একজন প্রতিভা মনে করাবে, আপনাকে সাহায্য করবে প্রতিটি কোডের অংশ কী করে তা বুঝতে, এবং কিছু এমনকি আপনার টাইপ করার আগে আপনার চিন্তা অনুমান করতে পারে এবং আপনার চিন্তা শেষ করতে সাহায্য করবে! +কিন্তু আধুনিক এডিটরগুলোর ব্যাপারে যা জাদুকরী তা হলো: এরা শুধু ফ্যান্সি টেক্সট এডিটর নয়। এরা অধিকন্তু সবচেয়ে মেধাবী, সহায়ক কোডিং মেন্টর যারা ২৪/৭ আপনার পাশে বসে থাকে। তারা টাইপ করার আগেই ভুল ধরিয়ে দেয়, উন্নতির পরামর্শ দেয় যা আপনাকে জিনিয়াস করে তোলে, কোডের প্রতিটি অংশের কাজ বুঝতে সাহায্য করে, এবং অনেকে এমনকি আপনি যা টাইপ করতে যাচ্ছেন সেটা পূর্বাভাস দিয়ে শেষ করার প্রস্তাব দেয়! -আমি যখন প্রথম অটো-কমপ্লিশন আবিষ্কার করেছিলাম তখন আমি সত্যিই মনে করেছিলাম যে আমি ভবিষ্যতে বাস করছি। আপনি কিছু টাইপ করা শুরু করেন, এবং আপনার এডিটর বলে, "আরে, আপনি কি এই ফাংশনটি ভাবছেন যা ঠিক আপনার প্রয়োজন?" এটি একটি মনের পাঠক থাকার মতো আপনার কোডিং সঙ্গী! +আমি মনে করি যখন প্রথমবার অটো-কাম্পলিশন আবিষ্কার করেছিলাম – সত্যিই মনে হচ্ছিল আমি ভবিষ্যতে বসবাস করছি। আপনি কিছু টাইপ শুরু করলে, আপনার এডিটর বলে, "এই, আপনি কি এই ফাংশনের কথা ভাবছিলেন যেটা ঠিক আপনার দরকার অনুযায়ী কাজ করে?" এটা ঠিক যেন আপনার কোডিং বন্ধু একজন মাইন্ড রিডার! -**এই এডিটরগুলি এত অসাধারণ কী করে তোলে?** +**এই এডিটরগুলো কেন এত অসাধারণ?** -আধুনিক কোড এডিটরগুলি আপনার উৎপাদনশীলতা বাড়ানোর জন্য চমকপ্রদ বৈশিষ্ট্যগুলির একটি অ্যারে অফার করে: +আধুনিক কোড এডিটর অনেক ফিচারের বিস্ময়কর সংগ্রহ অফার করে যা আপনার উৎপাদনশীলতা বাড়ায়: -| বৈশিষ্ট্য | এটি কী করে | এটি কেন সাহায্য করে | +| ফিচার | যা করে | সাহায্যের কারণ | |---------|--------------|--------------| -| **সিনট্যাক্স হাইলাইটিং** | আপনার কোডের বিভিন্ন অংশ রঙিন করে | কোড পড়া সহজ করে এবং ভুলগুলি খুঁজে পেতে সাহায্য করে | -| **অটো-কমপ্লিশন** | টাইপ করার সময় কোডের পরামর্শ দেয় | কোডিং দ্রুত করে এবং টাইপো কমায় | -| **ডিবাগিং টুলস** | আপনাকে ভুল খুঁজে এবং ঠিক করতে সাহায্য করে | সমস্যার সমাধানে সময় বাঁচায় | -| **এক্সটেনশন** | বিশেষায়িত বৈশিষ্ট্য যোগ করে | আপনার এডিটরকে যেকোনো প্রযুক্তির জন্য কাস্টমাইজ করুন | -| **AI সহকারী** | কোড এবং ব্যাখ্যা পরামর্শ দেয় | শেখা এবং উৎপাদনশীলতা ত্বরান্বিত করে | +| **সিনট্যাক্স হাইলাইটিং** | আপনার কোডের বিভিন্ন অংশ রঙিন করে | কোড পড়া সহজ করে এবং ভুল ধরতে সাহায্য করে | +| **অটো-কাম্পলিশন** | টাইপ করার সময় কোড প্রস্তাব করে | কোডিং দ্রুত হয় এবং টাইপিং ভুল কমে যায় | +| **ডিবাগিং টুলস** | ভুল খুঁজে বের করা এবং ঠিক করতে সাহায্য করে | সমস্যা সমাধানে ঘন্টা বাঁচায় | +| **এক্সটেনশনস** | বিশেষায়িত ফিচার যুক্ত করে | আপনার এডিটরকে যেকোনো প্রযুক্তির জন্য কাস্টমাইজ করে | +| **AI সহকারী** | কোড এবং ব্যাখ্যা প্রস্তাব করে | শেখা এবং উৎপাদনশীলতা দ্রুততর করে | -> 🎥 **ভিডিও রিসোর্স**: এই সরঞ্জামগুলি কার্যকরভাবে দেখতে চান? এই [Tools of the Trade ভিডিও](https://youtube.com/watch?v=69WJeXGBdxg) দেখুন একটি বিস্তৃত ওভারভিউর জন্য। +> 🎥 **ভিডিও রিসোর্স**: এই সরঞ্জামগুলো কর্মরত দেখতে চান? দেখুন এই [Tools of the Trade ভিডিও](https://youtube.com/watch?v=69WJeXGBdxg) ব্যাপক পর্যালোচনার জন্য। #### ওয়েব ডেভেলপমেন্টের জন্য সুপারিশকৃত এডিটর -**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (বিনামূল্যে) -- ওয়েব ডেভেলপারদের মধ্যে সবচেয়ে জনপ্রিয় -- চমৎকার এক্সটেনশন ইকোসিস্টেম -- বিল্ট-ইন টার্মিনাল এবং Git ইন্টিগ্রেশন -- **অবশ্যই থাকা এক্সটেনশন**: - - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI-চালিত কোড পরামর্শ - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - রিয়েল-টাইম সহযোগিতা - - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - স্বয়ংক্রিয় কোড ফরম্যাটিং - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - কোডে টাইপো ধরুন +**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (ফ্রি) +- ওয়েব ডেভেলপারদের মধ্যে সবচেয়ে জনপ্রিয় +- চমৎকার এক্সটেনশন ইকোসিস্টেম +- বিল্ট-ইন টার্মিনাল এবং Git ইন্টিগ্রেশন +- **অত্যাবশ্যক এক্সটেনশনস**: + - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI চালিত কোড প্রস্তাব + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - রিয়েল-টাইম সহযোগিতা + - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - স্বয়ংক্রিয় কোড ফরম্যাটিং + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - আপনার কোডে টাইপো ধরার জন্য + +**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (পেইড, ছাত্রদের জন্য ফ্রি) +- উন্নত ডিবাগিং এবং টেস্টিং টুলস +- বুদ্ধিমান কোড সম্পূরক +- বিল্ট-ইন সংস্করণ নিয়ন্ত্রণ -**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (পেইড, শিক্ষার্থীদের জন্য বিনামূল্যে) -- উন্নত ডিবাগিং এবং টেস্টিং টুলস -- বুদ্ধিমান কোড কমপ্লিশন -- বিল্ট-ইন ভার্সন কন্ট্রোল +**ক্লাউড-ভিত্তিক IDEs** (বিভিন্ন মূল্য) +- [GitHub Codespaces](https://github.com/features/codespaces) - আপনার ব্রাউজারে পূর্ণ VS Code +- [Replit](https://replit.com/) - শেখা এবং কোড শেয়ার করার জন্য চমৎকার +- [StackBlitz](https://stackblitz.com/) - তাৎক্ষণিক, পূর্ণ-স্ট্যাক ওয়েব ডেভেলপমেন্ট -**ক্লাউড-ভিত্তিক IDEs** (বিভিন্ন মূল্য -যখন প্রথমবার কেউ আমাকে ব্রাউজার ডেভটুলস দেখিয়েছিল, আমি প্রায় তিন ঘণ্টা শুধু ক্লিক করেই কাটিয়েছি এবং বলেছি, "অপেক্ষা করুন, এটা কি এটাও করতে পারে?!" আপনি বাস্তব সময়ে যেকোনো ওয়েবসাইট সম্পাদনা করতে পারেন, ঠিক কত দ্রুত সবকিছু লোড হয় তা দেখতে পারেন, বিভিন্ন ডিভাইসে আপনার সাইট কেমন দেখায় তা পরীক্ষা করতে পারেন, এবং এমনকি একজন পেশাদারের মতো জাভাস্ক্রিপ্ট ডিবাগ করতে পারেন। এটা একেবারে অবিশ্বাস্য! +> 💡 **শুরুর টিপ**: Visual Studio Code দিয়ে শুরু করুন – এটি ফ্রি, শিল্পে ব্যাপক ব্যবহৃত, এবং একটি বিশাল কমিউনিটি সহায়ক টিউটোরিয়াল এবং এক্সটেনশন তৈরি করে। -**ব্রাউজার কেন আপনার গোপন অস্ত্র:** +### ওয়েব ব্রাউজার: আপনার গোপন উন্নয়ন ল্যাবরেটরি -যখন আপনি একটি ওয়েবসাইট বা ওয়েব অ্যাপ্লিকেশন তৈরি করেন, তখন আপনাকে দেখতে হবে এটি বাস্তব জগতে কেমন দেখায় এবং কাজ করে। ব্রাউজার শুধু আপনার কাজ প্রদর্শন করে না, বরং পারফরম্যান্স, অ্যাক্সেসিবিলিটি এবং সম্ভাব্য সমস্যাগুলির বিষয়ে বিস্তারিত প্রতিক্রিয়া প্রদান করে। +ঠিক আছে, প্রস্তুত হন পুরোপুরি অবাক হতে! আপনি জানেন কিভাবে সোশ্যাল মিডিয়া স্ক্রোল করা এবং ভিডিও দেখা জন্য ব্রাউজার ব্যবহার করেছেন? আসলে তারা এই পুরো সময়টা অবিশ্বাস্য গোপন ডেভেলপার ল্যাবরেটরি লুকিয়ে রেখেছিল, শুধু আপনার আবিষ্কারের জন্য অপেক্ষা করছিল! -#### ব্রাউজার ডেভেলপার টুলস (ডেভটুলস) +প্রতিবার যখন আপনি একটি ওয়েবপেজে রাইট-ক্লিক করে "Inspect Element" নির্বাচন করেন, আপনি এমন একটি গোপন বিশ্বের দরজা খুলছেন যা সত্যি বলতে আমার আগে শত শত ডলার খরচ করে কেনা সফটওয়্যারের থেকেও অনেক বেশি শক্তিশালী। এটা ঠিক যেন আপনার সাধারণ রান্নাঘরের একটি সিক্রেট প্যানেলের পেছনে একজন পেশাদার শেফের গবেষণাগৃহ লুকিয়ে ছিল! +প্রথমবার কেউ আমাকে ব্রাউজার DevTools দেখিয়েছিল, আমি প্রায় তিন ঘন্টা কেবল ক্লিক করতে করতে এবং বলছিলাম "রুসি, এটা এটাও করতে পারে?!" আপনি আদৌ যেকোনো ওয়েবসাইট রিয়েল-টাইমে সম্পাদনা করতে পারেন, ঠিক কেমন দ্রুত সবকিছু লোড হচ্ছে তা দেখতে পারেন, বিভিন্ন ডিভাইসে আপনার সাইট কেমন দেখায় পরীক্ষা করতে পারেন, এমনকি জাভাস্ক্রিপ্ট ডিবাগ করতে পারেন পাশাঠ মতো। এটা পুরোপুরি চমকপ্রদ! -আধুনিক ব্রাউজারগুলিতে বিস্তৃত ডেভেলপমেন্ট স্যুট অন্তর্ভুক্ত রয়েছে: +**এটাই কারণ ব্রাউজারগুলি আপনার গোপন অস্ত্র:** -| টুলের বিভাগ | এটি কী করে | উদাহরণ ব্যবহার | -|-------------|------------|----------------| -| **এলিমেন্ট ইন্সপেক্টর** | HTML/CSS বাস্তব সময়ে দেখুন এবং সম্পাদনা করুন | স্টাইলিং সামঞ্জস্য করুন এবং তাৎক্ষণিক ফলাফল দেখুন | -| **কনসোল** | ত্রুটি বার্তা দেখুন এবং জাভাস্ক্রিপ্ট পরীক্ষা করুন | সমস্যা ডিবাগ করুন এবং কোড নিয়ে পরীক্ষা করুন | -| **নেটওয়ার্ক মনিটর** | রিসোর্স লোড কেমন হচ্ছে তা ট্র্যাক করুন | পারফরম্যান্স এবং লোডিং টাইম অপ্টিমাইজ করুন | -| **অ্যাক্সেসিবিলিটি চেকার** | অন্তর্ভুক্তিমূলক ডিজাইন পরীক্ষা করুন | নিশ্চিত করুন যে আপনার সাইট সব ব্যবহারকারীর জন্য কাজ করে | -| **ডিভাইস সিমুলেটর** | বিভিন্ন স্ক্রিন সাইজে প্রিভিউ দেখুন | একাধিক ডিভাইস ছাড়াই রেসপন্সিভ ডিজাইন পরীক্ষা করুন | +যখন আপনি একটি ওয়েবসাইট বা ওয়েব অ্যাপ তৈরি করেন, আপনাকে দেখতে হয় এটা বাস্তব জগতে কেমন দেখায় এবং কিভাবে কাজ করে। ব্রাউজার শুধু আপনার কাজ প্রদর্শন করে না, বরং কার্যক্ষমতা, প্রবেশগম্যতা, এবং সম্ভাব্য সমস্যাগুলি সম্পর্কে বিস্তারিত প্রতিক্রিয়াও দেয়। -#### ডেভেলপমেন্টের জন্য সুপারিশকৃত ব্রাউজার +#### ব্রাউজার ডেভেলপার সরঞ্জাম (DevTools) -- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - শিল্প-মান DevTools সহ বিস্তৃত ডকুমেন্টেশন -- **[Firefox](https://developer.mozilla.org/docs/Tools)** - চমৎকার CSS Grid এবং অ্যাক্সেসিবিলিটি টুলস -- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Chromium ভিত্তিক, Microsoft's ডেভেলপার রিসোর্স সহ +আধুনিক ব্রাউজারগুলি বিস্তৃত ডেভেলপমেন্ট স্যুট অন্তর্ভুক্ত করে: -> ⚠️ **গুরুত্বপূর্ণ পরীক্ষার টিপস**: আপনার ওয়েবসাইটগুলি সবসময় একাধিক ব্রাউজারে পরীক্ষা করুন! Chrome-এ যা পুরোপুরি কাজ করে তা Safari বা Firefox-এ ভিন্ন দেখাতে পারে। পেশাদার ডেভেলপাররা সমস্ত প্রধান ব্রাউজারে পরীক্ষা করেন যাতে ব্যবহারকারীর অভিজ্ঞতা সঙ্গতিপূর্ণ হয়। +| টুল ক্যাটাগরি | এটি কী করে | উদাহরণ ব্যবহারিক | +|---------------|--------------|------------------| +| **এলিমেন্ট ইন্সপেক্টর** | রিয়েল-টাইমে HTML/CSS দেখা এবং সম্পাদনা করা | স্টাইলিং সামঞ্জস্য করে তাৎক্ষণিক ফলাফল দেখা | +| **কন্সোলে** | ত্রুটি বার্তা দেখা ও জাভাস্ক্রিপ্ট টেস্ট করা | সমস্যা ডিবাগ করা এবং কোড নিয়ে পরীক্ষা-নিরীক্ষা করা | +| **নেটওয়ার্ক মনিটর** | রিসোর্স কিভাবে লোড হচ্ছে তা ট্র্যাক করা | কার্যক্ষমতা ও লোডিং সময় উন্নত করা | +| **অ্যাক্সেসিবিলিটি চেকার** | অন্তর্ভুক্ত ডিজাইনের জন্য টেস্ট করা | নিশ্চিত করা আপনার সাইট সব ব্যবহারকারীর জন্য কাজ করে | +| **ডিভাইস সিমুলেটর** | বিভিন্ন স্ক্রিন সাইজে প্রিভিউ | একাধিক ডিভাইস ছাড়াই রেসপনসিভ ডিজাইন পরীক্ষা করা | -### কমান্ড লাইন টুলস: ডেভেলপার সুপারপাওয়ারসের গেটওয়ে +#### বিকাশের জন্য সুপারিশকৃত ব্রাউজার -ঠিক আছে, এখানে কমান্ড লাইন সম্পর্কে সম্পূর্ণ সৎ মুহূর্তের কথা বলি, কারণ আমি চাই আপনি এটা এমন কারো কাছ থেকে শুনুন যে সত্যিই এটা বোঝে। যখন আমি প্রথম এটি দেখেছিলাম – শুধু এই ভয়ঙ্কর কালো স্ক্রিনটি যা টেক্সট ব্লিঙ্ক করছিল – আমি সত্যিই ভেবেছিলাম, "না, একদম না! এটা তো ১৯৮০ এর দশকের কোনো হ্যাকার মুভির মতো দেখাচ্ছে, এবং আমি অবশ্যই এর জন্য যথেষ্ট স্মার্ট নই!" 😅 +- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - শিল্প মানের DevTools বিস্তৃত ডকুমেন্টেশন সহ +- **[Firefox](https://developer.mozilla.org/docs/Tools)** - চমৎকার CSS গ্রিড এবং অ্যাক্সেসিবিলিটি টুলস +- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - ক্রোমিয়ামে ভিত্তি করে মাইক্রোসফটের ডেভেলপার রিসোর্সস সহ -কিন্তু আমি যা চাইতাম কেউ আমাকে তখন বলুক, এবং যা আমি এখন আপনাকে বলছি: কমান্ড লাইন ভীতিকর নয় – এটি আসলে আপনার কম্পিউটারের সাথে সরাসরি কথোপকথনের মতো। এটা এমন, যেমন আপনি একটি ফ্যান্সি অ্যাপ দিয়ে খাবার অর্ডার করছেন যেখানে ছবি এবং মেনু রয়েছে (যা সুন্দর এবং সহজ) বনাম আপনার প্রিয় স্থানীয় রেস্টুরেন্টে হাঁটছেন যেখানে শেফ ঠিক জানেন আপনি কী পছন্দ করেন এবং আপনি শুধু বলছেন "আমাকে কিছু অসাধারণ দিয়ে চমকে দিন।" +> ⚠️ **গুরুত্বপূর্ণ টেস্টিং টিপ**: সর্বদা আপনার ওয়েবসাইটগুলি একাধিক ব্রাউজারে পরীক্ষা করুন! যা ক্রোমে নিখুঁত কাজ করে তা সাফারি বা ফায়ারফক্সে ভিন্ন দেখাতে পারে। পেশাদার ডেভেলপাররা সব প্রধান ব্রাউজারে পরীক্ষা করে নিশ্চিত হন ব্যবহারকারীর অভিজ্ঞতা সঙ্গতিপূর্ণ থাকে। -কমান্ড লাইন এমন জায়গা যেখানে ডেভেলপাররা যায় যেন তারা সম্পূর্ণ জাদুকর। আপনি কয়েকটি জাদুকরী শব্দ টাইপ করেন (ঠিক আছে, তারা শুধু কমান্ড, কিন্তু তারা জাদুকরী মনে হয়!), এন্টার চাপুন, এবং বুম – আপনি পুরো প্রকল্পের কাঠামো তৈরি করেছেন, বিশ্বজুড়ে শক্তিশালী টুল ইনস্টল করেছেন, অথবা আপনার অ্যাপ ইন্টারনেটে প্রকাশ করেছেন যাতে লক্ষ লক্ষ মানুষ এটি দেখতে পারে। একবার আপনি সেই ক্ষমতার স্বাদ পেয়ে গেলে, এটি সত্যিই বেশ নেশাজনক! -**কমান্ড লাইন কেন আপনার প্রিয় টুল হয়ে উঠবে:** +### কমান্ড লাইন টুলস: আপনার ডেভেলপার স্সুপারপাওয়ারের প্রবেশদ্বার -গ্রাফিকাল ইন্টারফেস অনেক কাজের জন্য দুর্দান্ত, তবে কমান্ড লাইন অটোমেশন, নির্ভুলতা এবং গতিতে শ্রেষ্ঠ। অনেক ডেভেলপমেন্ট টুল মূলত কমান্ড লাইন ইন্টারফেসের মাধ্যমে কাজ করে, এবং সেগুলি দক্ষতার সাথে ব্যবহার করা শিখলে আপনার উৎপাদনশীলতা নাটকীয়ভাবে উন্নত হতে পারে। +আচ্ছা, কমান্ড লাইন সম্পর্কে সম্পূর্ণ সৎ মুহূর্ত নেওয়া যাক, কারণ আমি চাই আপনি এটা এমন একজন থেকে শুনুন যিনি সত্যিই এটা বোঝেন। যখন আমি প্রথম এটাকে দেখেছিলাম – কেবল এই ভয়ঙ্কর কালো স্ক্রীন যা টিপটিপ করে লেখা দেখাচ্ছিল – আমি সত্যিই ভাবছিলাম, “না, একদম না! এটা যেন ১৯৮০-এর দশকের হ্যাকার সিনেমার কিছু, আর আমি নিশ্চিত এটা করার জন্য যথেষ্ট বুদ্ধিমান নই!” 😅 + +কিন্তু এখানেই আমি চাই কেউ আমাকে তখন বলত, আর আমি এখন আপনাকে বলছি: কমান্ড লাইন ভয়ঙ্কর নয় – এটা আসলে আপনার কম্পিউটারের সাথে সরাসরি কথোপকথনের মতো। ভাবুন এটা যেমন একটি ফ্যান্সি অ্যাপ থেকে ছবি আর মেনু সহ খাবার অর্ডার করার মতো (যা ভালো এবং সহজ), তার তুলনায় আপনার প্রিয় স্থানীয় রেস্টুরেন্টে হাঁটার মতো, যেখানে শেফ ঠিক জানে আপনি কি পছন্দ করেন এবং আপনি শুধু বললেই “দয়াকরে মুগ্ধকর কিছু সারপ্রাইজ দিন” সঙ্গে অসাধারণ কিছু রান্না করতে পারে। + +কমান্ড লাইন হলো সেই জায়গা যেখানে ডেভেলপাররা পুরোপুরি যাদুকর হিসাবে অনুভব করে। আপনি কয়েকটি দেখতে জাদুকরী শব্দ টাইপ করেন (ঠিক আছে, এগুলো কমান্ড মাত্র, কিন্তু জাদুকরী মনে হয়!), এন্টার চাপেন, আর হঠাৎ – আপনি পুরো প্রকল্পের গঠন তৈরি করেছেন, শক্তিশালী সরঞ্জাম বিশ্বের বিভিন্ন স্থান থেকে ইন্সটল করেছেন, বা আপনার অ্যাপ ইন্টারনেটে মাইলিয়ন মানুষের দেখার জন্য ডিপ্লয় করেছেন। একবার আপনি এই ক্ষমতার স্বাদ পেয়ে গেলে, সত্যিই এটি আসক্তিকর হয়ে যায়! + +**কেন কমান্ড লাইন আপনার প্রিয় সরঞ্জাম হবে:** + +যদিও গ্রাফিক্যাল ইন্টারফেস অনেক কাজের জন্য দুর্দান্ত, কমান্ড লাইন স্বয়ংক্রিয়তা, নিখুঁততা এবং গতি নিয়ে ছাড়িয়ে যায়। অনেক ডেভেলপমেন্ট টুলস প্রধানত কমান্ড লাইন ইন্টারফেস ব্যবহার করে কাজ করে, এবং দক্ষতার সঙ্গে এগুলো ব্যবহার শেখা আপনার উৎপাদনশীলতা নাটকীয়ভাবে বাড়াতে পারে। ```bash -# Step 1: Create and navigate to project directory +# ধাপ ১: প্রকল্প ডিরেক্টরি তৈরি করুন এবং সেখানে যান mkdir my-awesome-website cd my-awesome-website ``` **এই কোডটি কী করে:** -- **নতুন ডিরেক্টরি তৈরি করুন** "my-awesome-website" নামে আপনার প্রকল্পের জন্য -- **নেভিগেট করুন** নতুন তৈরি ডিরেক্টরিতে কাজ শুরু করতে +- **নতুন ডিরেক্টরি তৈরি করে** যার নাম "my-awesome-website" আপনার প্রকল্পের জন্য +- **নতুন তৈরি ডিরেক্টরিতে প্রবেশ করে** কাজ শুরু করার জন্য ```bash -# Step 2: Initialize project with package.json +# ধাপ ২: package.json দিয়ে প্রকল্প শুরু করুন npm init -y -# Install modern development tools +# আধুনিক উন্নয়ন সরঞ্জাম ইনস্টল করুন npm install --save-dev vite prettier eslint npm install --save-dev @eslint/js ``` -**ধাপে ধাপে যা ঘটছে:** -- **নোড.জেএস প্রকল্প ইনিশিয়ালাইজ করুন** ডিফল্ট সেটিংস সহ `npm init -y` ব্যবহার করে -- **Vite ইনস্টল করুন** দ্রুত ডেভেলপমেন্ট এবং প্রোডাকশন বিল্ডের জন্য একটি আধুনিক বিল্ড টুল হিসেবে -- **Prettier যোগ করুন** স্বয়ংক্রিয় কোড ফরম্যাটিংয়ের জন্য এবং ESLint কোডের গুণমান পরীক্ষা করার জন্য -- **`--save-dev` ফ্ল্যাগ ব্যবহার করুন** এগুলিকে শুধুমাত্র ডেভেলপমেন্ট-সম্পর্কিত ডিপেনডেন্সি হিসেবে চিহ্নিত করতে +**ক্রমানুসারে, যা ঘটছে তা হলো:** +- `npm init -y` ব্যবহার করে ডিফল্ট সেটিংস সহ নতুন Node.js প্রকল্প আরম্ভ করা +- দ্রুত উন্নয়ন ও প্রোডাকশন বিল্ডের জন্য আধুনিক বিল্ড টুল Vite ইন্সটল করা +- স্বয়ংক্রিয় কোড ফরম্যাটিং এর জন্য Prettier এবং কোড গুণগত মান পরীক্ষা করার জন্য ESLint যোগ করা +- `--save-dev` ফ্ল্যাগ ব্যবহার করে এগুলোকে শুধুমাত্র ডেভেলপমেন্ট নির্ভরশীল হিসেবে চিহ্নিত করা ```bash -# Step 3: Create project structure and files +# ধাপ ৩: প্রকল্পের কাঠামো এবং ফাইল তৈরি করুন mkdir src assets echo 'My Site

Hello World

' > index.html -# Start development server +# ডেভেলপমেন্ট সার্ভার শুরু করুন npx vite ``` -**উপরের কোডে আমরা:** -- **প্রকল্প সংগঠিত করেছি** সোর্স কোড এবং অ্যাসেটের জন্য আলাদা ফোল্ডার তৈরি করে -- **একটি বেসিক HTML ফাইল তৈরি করেছি** সঠিক ডকুমেন্ট স্ট্রাকচারের সাথে -- **Vite ডেভেলপমেন্ট সার্ভার শুরু করেছি** লাইভ রিলোডিং এবং হট মডিউল রিপ্লেসমেন্টের জন্য +**উপরোক্ত ক্ষেত্রে, আমরা:** +- আলাদা সোর্স কোড ও এসেট ফোল্ডার তৈরি করে প্রকল্প সংগঠিত করেছি +- সঠিক ডকুমেন্ট স্ট্রাকচার সহ একটি বেসিক HTML ফাইল তৈরি করেছি +- লাইভ রিলোড এবং হট মডিউল রিপ্লেসমেন্টের জন্য Vite ডেভেলপমেন্ট সার্ভার শুরু করেছি -#### ওয়েব ডেভেলপমেন্টের জন্য প্রয়োজনীয় কমান্ড লাইন টুলস +#### ওয়েব উন্নয়নের জন্য অপরিহার্য কমান্ড লাইন টুলস -| টুল | উদ্দেশ্য | কেন এটি দরকার | -|-----|----------|----------------| -| **[Git](https://git-scm.com/)** | ভার্সন কন্ট্রোল | পরিবর্তন ট্র্যাক করুন, অন্যদের সাথে সহযোগিতা করুন, আপনার কাজ ব্যাকআপ করুন | -| **[Node.js & npm](https://nodejs.org/)** | জাভাস্ক্রিপ্ট রানটাইম এবং প্যাকেজ ম্যানেজমেন্ট | ব্রাউজারের বাইরে জাভাস্ক্রিপ্ট চালান, আধুনিক ডেভেলপমেন্ট টুল ইনস্টল করুন | -| **[Vite](https://vitejs.dev/)** | বিল্ড টুল এবং ডেভ সার্ভার | হট মডিউল রিপ্লেসমেন্ট সহ দ্রুত ডেভেলপমেন্ট | -| **[ESLint](https://eslint.org/)** | কোডের গুণমান | আপনার জাভাস্ক্রিপ্টে সমস্যা স্বয়ংক্রিয়ভাবে খুঁজে বের করুন এবং ঠিক করুন | -| **[Prettier](https://prettier.io/)** | কোড ফরম্যাটিং | আপনার কোডকে ধারাবাহিকভাবে ফরম্যাট এবং পাঠযোগ্য রাখুন | +| টুল | উদ্দেশ্য | কেন দরকার | +|------|---------|-----------------| +| **[Git](https://git-scm.com/)** | ভার্সন কন্ট্রোল | পরিবর্তন ট্র্যাক করা, সাথে কাজ করা, ব্যাকআপ রাখা | +| **[Node.js & npm](https://nodejs.org/)** | জাভাস্ক্রিপ্ট রানটাইম ও প্যাকেজ ম্যানেজমেন্ট | ব্রাউজারের বাইরে জাভাস্ক্রিপ্ট চালানো, আধুনিক ডেভেলপমেন্ট টুল ইনস্টল করা | +| **[Vite](https://vitejs.dev/)** | বিল্ড টুল ও ডেভ সার্ভার | অত্যন্ত দ্রুত উন্নয়ন হট মডিউল রিপ্লেসমেন্ট সহ | +| **[ESLint](https://eslint.org/)** | কোড গুণমান | স্বয়ংক্রিয়ভাবে জাভাস্ক্রিপ্ট কোডের সমস্যা খুঁজে বের করা ও ঠিক করা | +| **[Prettier](https://prettier.io/)** | কোড ফরম্যাটিং | আপনার কোড নিয়মিত ফরম্যাটেড ও পাঠযোগ্য রাখা | #### প্ল্যাটফর্ম-নির্দিষ্ট অপশন **Windows:** -- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - আধুনিক, ফিচার-সমৃদ্ধ টার্মিনাল -- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - শক্তিশালী স্ক্রিপ্টিং পরিবেশ -- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - ঐতিহ্যবাহী Windows কমান্ড লাইন +- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** – আধুনিক, বৈশিষ্ট্যসম্পন্ন টার্মিনাল +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 – শক্তিশালী স্ক্রিপ্টিং পরিবেশ +- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 – ঐতিহ্যবাহী উইন্ডোজ কমান্ড লাইন **macOS:** -- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - বিল্ট-ইন টার্মিনাল অ্যাপ্লিকেশন -- **[iTerm2](https://iterm2.com/)** - উন্নত টার্মিনাল উন্নত বৈশিষ্ট্য সহ +- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 – বিল্ট-ইন টার্মিনাল অ্যাপ্লিকেশন +- **[iTerm2](https://iterm2.com/)** – উন্নত বৈশিষ্ট্যসহ টার্মিনাল **Linux:** -- **[Bash](https://www.gnu.org/software/bash/)** 💻 - স্ট্যান্ডার্ড Linux শেল -- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - উন্নত টার্মিনাল এমুলেটর +- **[Bash](https://www.gnu.org/software/bash/)** 💻 – স্ট্যান্ডার্ড লিনাক্স শেল +- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** – উন্নত টার্মিনাল এমুলেটর > 💻 = অপারেটিং সিস্টেমে প্রি-ইনস্টল করা -> 🎯 **শেখার পথ**: `cd` (ডিরেক্টরি পরিবর্তন), `ls` বা `dir` (ফাইল তালিকা), এবং `mkdir` (ফোল্ডার তৈরি) এর মতো মৌলিক কমান্ড দিয়ে শুরু করুন। `npm install`, `git status`, এবং `code .` (বর্তমান ডিরেক্টরি VS Code-এ খুলুন) এর মতো আধুনিক ওয়ার্কফ্লো কমান্ড দিয়ে অনুশীলন করুন। আপনি যত বেশি স্বাচ্ছন্দ্য বোধ করবেন, ততই আপনি আরও উন্নত কমান্ড এবং অটোমেশন কৌশলগুলি শিখবেন। +> 🎯 **শেখার পথ**: মৌলিক কমান্ড যেমন `cd` (ডিরেক্টরি পরিবর্তন), `ls` বা `dir` (ফাইল তালিকা), এবং `mkdir` (ফোল্ডার তৈরি) দিয়ে শুরু করুন। আধুনিক ওয়ার্কফ্লো কমান্ড যেমন `npm install`, `git status`, এবং `code .` (বর্তমান ডিরেক্টরিতে VS Code খুলে) দিয়ে অনুশীলন করুন। আরামদায়ক হওয়ার সাথে সাথেই আপনি স্বাভাবিকভাবেই আরও উন্নত কমান্ড এবং স্বয়ংক্রিয়করণ কৌশল শিখবেন। + -### ডকুমেন্টেশন: আপনার সর্বদা-উপলব্ধ শেখার মেন্টর +### ডকুমেন্টেশন: আপনার সর্বদা উপলব্ধ শেখার উপদেশক -ঠিক আছে, আমি একটি ছোট গোপন কথা শেয়ার করতে চাই যা আপনাকে একজন শিক্ষানবিশ হিসেবে আরও ভালো অনুভব করতে সাহায্য করবে: এমনকি সবচেয়ে অভিজ্ঞ ডেভেলপাররাও তাদের সময়ের একটি বড় অংশ ডকুমেন্টেশন পড়তে ব্যয় করেন। এবং এটি এই কারণে নয় যে তারা জানে না তারা কী করছে – এটি আসলে জ্ঞানের একটি চিহ্ন! +আচ্ছা, আমি একটি ছোট গোপন কথা শেয়ার করব যা আপনাকে শুরুতে অনেক ভালো লাগবে: সবচেয়ে অভিজ্ঞ ডেভেলপাররাও তাদের সময়ের একটা বিশাল অংশ ডকুমেন্টেশন পড়তে ব্যয় করেন। এবং এটা এই কারণে নয় যে তারা জানেন না কী করছেন – বরং এটা প্রজ্ঞার পরিচয়! -ডকুমেন্টেশনকে এমন বিশ্বের সবচেয়ে ধৈর্যশীল, জ্ঞানী শিক্ষকদের অ্যাক্সেস করার মতো মনে করুন যারা ২৪/৭ উপলব্ধ। রাত ২টায় কোনো সমস্যায় আটকে গেছেন? ডকুমেন্টেশন সেখানে একটি উষ্ণ ভার্চুয়াল আলিঙ্গন এবং ঠিক আপনার প্রয়োজনীয় উত্তর নিয়ে। সবাই যে নতুন বৈশিষ্ট্যটি নিয়ে কথা বলছে তা সম্পর্কে জানতে চান? ডকুমেন্টেশন আপনার পাশে রয়েছে ধাপে ধাপে উদাহরণ সহ। কিছু কেন কাজ করে তা বোঝার চেষ্টা করছেন? আপনি অনুমান করেছেন – ডকুমেন্টেশন এটি ব্যাখ্যা করতে প্রস্তুত এমনভাবে যা অবশেষে এটিকে ক্লিক করে তোলে! +ডকুমেন্টেশন ভাবুন বিশ্বজুড়ে সবচেয়ে ধৈর্যশীল, জ্ঞানশালী শিক্ষকদের প্রবেশাধিকার হিসেবে যারা ২৪/৭ উপলব্ধ। দুপুর ২টায় কোনো সমস্যায় আটকা? ডকুমেন্টেশন আপনাকে একটি উষ্ণ ভার্চুয়াল আলিঙ্গন ও সঠিক উত্তর সরবরাহ করে। কেউ নতুন কোনো শীতল ফিচার সম্পর্কে জানতে চায় যা সবাই আলোচনা করছে? ডকুমেন্টেশন আপনার পিঠ দেয় পর্যায়ক্রমিক উদাহরণ দিয়ে। কেন কিছু নিয়ে কাজ করে সে রীতিটি বুঝতে চান? অনুমান করুন – ডকুমেন্টেশন বুঝিয়ে দিতে প্রস্তুত যাতে আপনি অবশেষে তা বুঝতে পারেন! -এখানে এমন কিছু আছে যা আমার দৃষ্টিভঙ্গি সম্পূর্ণরূপে পরিবর্তন করেছে: ওয়েব ডেভেলপমেন্ট বিশ্বটি অবিশ্বাস্যভাবে দ্রুত চলে, এবং কেউ (আমি বলতে চাই, একেবারে কেউই!) সবকিছু মনে রাখে না। আমি ১৫+ বছরের অভিজ্ঞতা সম্পন্ন সিনিয়র ডেভেলপারদের দেখেছি মৌলিক সিনট্যাক্স খুঁজে বের করতে, এবং আপনি জানেন কি? এটি লজ্জাজনক নয় – এটি বুদ্ধিমানের কাজ! এটি নিখুঁত স্মৃতি থাকার বিষয়ে নয়; এটি দ্রুত নির্ভরযোগ্য উত্তরগুলি কোথায় খুঁজে পাওয়া যায় তা জানার এবং সেগুলি কীভাবে প্রয়োগ করতে হয় তা বোঝার বিষয়ে। +এটা এমন কিছু যা আমার দৃষ্টিভঙ্গি পুরোপুরি বদলে দিয়েছিল: ওয়েব ডেভেলপমেন্ট জগতটি দ্রুত এগিয়ে চলে, এবং কেউই (আমি বলছি একদম কেউই নয়!) সবকিছু মুখস্থ রাখে না। আমি ১৫+ বছরের অভিজ্ঞতা সম্পন্ন সিনিয়র ডেভেলপারদের মৌলিক সিনট্যাক্স খুঁজে দেখার ঘটনা দেখেছি, এবং জানেন কি? এটা লজ্জাজনক নয় – এটা বুদ্ধিমানের কাজ! নিখুঁত স্মৃতির ব্যাপারে নয়; বরং এটি দ্রুত নির্ভরযোগ্য উত্তর খুঁজে পেতে এবং প্রয়োগ করার কৌশল জানা। -**এখানে আসল জাদু ঘটে:** +**এখানেই আসল জাদু ঘটে:** -পেশাদার ডেভেলপাররা তাদের সময়ের একটি উল্লেখযোগ্য অংশ ডকুমেন্টেশন পড়তে ব্যয় করেন – কারণ তারা জানে যে ওয়েব ডেভেলপমেন্টের ল্যান্ডস্কেপ এত দ্রুত বিকশিত হয় যে বর্তমান থাকতে হলে ক্রমাগত শেখার প্রয়োজন। চমৎকার ডকুমেন্টেশন আপনাকে শুধু *কীভাবে* কিছু ব্যবহার করতে হয় তা বুঝতে সাহায্য করে না, বরং *কেন* এবং *কখন* এটি ব্যবহার করতে হয় তাও বুঝতে সাহায্য করে। +পেশাদার ডেভেলপাররা বড় অংশ ডকুমেন্টেশন পড়েন – এটা তাদের অজ্ঞতা নয়, বরং ওয়েব ডেভেলপমেন্ট দ্রুত পরিবর্তনশীল হওয়ার কারণে তারা সর্বদা নতুন কিছু শিখতে থাকে। অসাধারণ ডকুমেন্টেশন শুধু শেখায় *কিভাবে* কিছু ব্যবহার করবেন না, বরং *কেন* এবং *কবে* ব্যবহার করবেন। -#### প্রয়োজনীয় ডকুমেন্টেশন রিসোর্স +#### অপরিহার্য ডকুমেন্টেশন রিসোর্সেস **[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** -- ওয়েব প্রযুক্তি ডকুমেন্টেশনের জন্য সেরা মান -- HTML, CSS, এবং জাভাস্ক্রিপ্টের জন্য বিস্তৃত গাইড -- ব্রাউজার সামঞ্জস্যতার তথ্য অন্তর্ভুক্ত -- ব্যবহারিক উদাহরণ এবং ইন্টারঅ্যাকটিভ ডেমো বৈশিষ্ট্যযুক্ত +- ওয়েব প্রযুক্তির স্বর্ণ মানের ডকুমেন্টেশন +- HTML, CSS, এবং জাভাস্ক্রিপ্টের বিস্তৃত গাইড +- ব্রাউজার সামঞ্জস্যতা তথ্য অন্তর্ভুক্ত +- ব্যবহারিক উদাহরণ এবং ইন্টারেক্টিভ ডেমো -**[Web.dev](https://web.dev)** (গুগলের দ্বারা) -- আধুনিক ওয়েব ডেভেলপমেন্টের সেরা অনুশীলন -- পারফরম্যান্স অপ্টিমাইজেশন গাইড -- অ্যাক্সেসিবিলিটি এবং অন্তর্ভুক্তিমূলক ডিজাইনের নীতিমালা -- বাস্তব প্রকল্পের কেস স্টাডি +**[Web.dev](https://web.dev)** (গুগল দ্বারা) +- আধুনিক ওয়েব উন্নয়নের সেরা অনুশীলন +- কার্যক্ষমতা অপ্টিমাইজেশন গাইড +- প্রবেশগম্যতা ও অন্তর্ভুক্ত ডিজাইন নীতি +- বাস্তব প্রকল্প থেকে কেস স্টাডি **[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** -- Edge ব্রাউজার ডেভেলপমেন্ট রিসোর্স -- প্রগ্রেসিভ ওয়েব অ্যাপ গাইড -- ক্রস-প্ল্যাটফর্ম ডেভেলপমেন্ট ইনসাইট +- Edge ব্রাউজার উন্নয়ন রিসোর্স +- প্রোগ্রেসিভ ওয়েব অ্যাপ গাইড +- ক্রস-প্ল্যাটফর্ম ডেভেলপমেন্ট অন্তর্দৃষ্টি **[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** -- গঠনমূলক শেখার পাঠ্যক্রম +- কাঠামোবদ্ধ শেখার পাঠ্যক্রম - শিল্প বিশেষজ্ঞদের ভিডিও কোর্স - হাতে-কলমে কোডিং অনুশীলন -> 📚 **অধ্যয়নের কৌশল**: ডকুমেন্টেশন মুখস্থ করার চেষ্টা করবেন না – বরং এটি দক্ষতার সাথে নেভিগেট করতে শিখুন। প্রায়ই ব্যবহৃত রেফারেন্সগুলি বুকমার্ক করুন এবং নির্দিষ্ট তথ্য দ্রুত খুঁজে পেতে অনুসন্ধান ফাংশনগুলি ব্যবহার করার অনুশীলন করুন। +> 📚 **অধ্যয়ন কৌশল**: ডকুমেন্টেশন মুখস্থ করার চেষ্টা করবেন না – বরং কিভাবে দক্ষতার সঙ্গে চালনা করবেন তা শিখুন। প্রায়শই ব্যবহৃত রেফারেন্স বুকমার্ক করুন এবং নির্দিষ্ট তথ্য দ্রুত খুঁজে পেতে সার্চ ফাংশন ব্যবহৃতার চর্চা করুন। -### 🔧 **টুল মাস্টারি চেক: আপনার সাথে কী অনুরণিত হয়?** +### 🔧 **টুল দক্ষতা যাচাই: আপনার সাথে কী অনুরণিত হয়?** -**এক মুহূর্ত সময় নিয়ে ভাবুন:** -- কোন টুলটি আপনি প্রথমে চেষ্টা করতে সবচেয়ে বেশি আগ্রহী? (এখানে ভুল উত্তর নেই!) -- কমান্ড লাইন কি এখনও ভীতিকর মনে হয়, নাকি আপনি এটি সম্পর্কে কৌতূহলী? -- আপনি কি আপনার প্রিয় ওয়েবসাইটগুলির পর্দার পিছনে উঁকি দিতে ব্রাউজার ডেভটুলস ব্যবহার করার কথা ভাবতে পারেন? +**একটু সময় নিয়ে ভাবুন:** +- কোন টুল প্রথমে চেষ্টা করতে সবচেয়ে আগ্রহী? (ভুল উত্তর নেই!) +- কমান্ড লাইন কি এখনও ভয়ানক মনে হয়, নাকি আপনি এতে কৌতূহলী? +- আপনি কি ব্রাউজার DevTools ব্যবহার করে আপনার প্রিয় ওয়েবসাইটগুলোর পেছনের পর্দা দেখতে কল্পনা করতে পারেন? ```mermaid -pie title "Developer Time Spent With Tools" - "Code Editor" : 40 - "Browser Testing" : 25 - "Command Line" : 15 - "Reading Docs" : 15 - "Debugging" : 5 +pie title "টুলস এর সাথে ডেভেলপার সময় ব্যয়" + "কোড এডিটর" : 40 + "ব্রাউজার টেস্টিং" : 25 + "কমান্ড লাইন" : 15 + "ডকুমেন্ট পড়া" : 15 + "ডিবাগিং" : 5 ``` +> **মজার অন্তর্দৃষ্টি**: অধিকাংশ ডেভেলপার তার সময়ের প্রায় ৪০% কোড সম্পাদকেই ব্যয় করে, কিন্তু লক্ষ করুন কত সময় যায় পরীক্ষা, শেখা, এবং সমস্যা সমাধানে। প্রোগ্রামিং কেবল কোড লেখা নয় – এটা অভিজ্ঞতা তৈরি! -> **মজার তথ্য**: বেশিরভাগ ডেভেলপার তাদের সময়ের প্রায় ৪০% তাদের কোড এডিটরে ব্যয় করেন, তবে লক্ষ্য করুন যে কতটা সময় পরীক্ষার, শেখার এবং সমস্যা সমাধানের জন্য যায়। প্রোগ্রামিং শুধু কোড লেখার বিষয়ে নয় – এটি অভিজ্ঞতা তৈরি করার বিষয়ে! +✅ **চিন্তার জন্য খাবার**: এখানে ভাবার জন্য কিছু মজার বিষয় – আপনি কী ভাবে ভাবেন, ওয়েবসাইট তৈরি করার টুল (ডেভেলপমেন্ট) এবং ডিজাইন সংক্রান্ত টুলগুলোর মধ্যে পার্থক্য কী? এটা ঠিক যেমন একজন স্থপতি সুন্দর বাড়ি ডিজাইন করেন আর ঠিকাদার সেই বাড়ি বাস্তবায়ন করেন। দুটোই গুরুত্বপূর্ণ, কিন্তু তাদের আলাদা আলাদা সরঞ্জাম বাক্স লাগে! এই ধরনের চিন্তা আপনাকে ওয়েবসাইট তৈরি হওয়ার বড় দিকগুলো দেখতে সাহায্য করবে। -✅ **চিন্তার খোরাক**: এখানে একটি আকর্ষণীয় বিষয় নিয়ে ভাবুন – ওয়েবসাইট তৈরি করার (ডেভেলপমেন্ট) টুলগুলি কীভাবে ওয়েবসাইটের চেহারা ডিজাইন করার (ডিজাইন) টুলগুলির থেকে আলাদা হতে পারে? এটি এমন, যেমন একজন স্থপতি একটি সুন্দর বাড়ি ডিজাইন করছেন এবং ঠিকাদার এটি তৈরি করছেন। উভয়ই গুরুত্বপূর্ণ, তবে তাদের আলাদা টুলবক্স দরকার! এই ধরনের চিন্তাভাবনা সত্যিই আপনাকে ওয়েবসাইটগুলি কীভাবে জীবন্ত হয়ে ওঠে তার বড় চিত্রটি দেখতে সাহায্য করবে। +## GitHub Copilot Agent চ্যালেঞ্জ 🚀 -## GitHub Copilot Agent Challenge 🚀 +Agent মোড ব্যবহার করে নিম্নলিখিত চ্যালেঞ্জ সম্পন্ন করুন: -Agent মোড ব্যবহার করে নিম্নলিখিত চ্যালেঞ্জটি সম্পূর্ণ করুন: +**বর্ণনা:** আধুনিক কোড সম্পাদক বা IDE এর বৈশিষ্ট্যগুলি অন্বেষণ করুন এবং দেখান কিভাবে এটি একজন ওয়েব ডেভেলপার হিসেবে আপনার ওয়ার্কফ্লো উন্নত করতে পারে। -**বর্ণনা:** একটি আধুনিক কোড এডিটর বা IDE-এর বৈশিষ্ট্যগুলি অন্বেষণ করুন এবং দেখান কীভাবে এটি একজন ওয়েব ডেভেলপারের কাজের প্রবাহ উন্নত করতে পারে। - -**প্রম্পট:** একটি কোড এডিটর বা IDE (যেমন Visual Studio Code, WebStorm, বা একটি ক্লাউড-ভিত্তিক IDE) নির্বাচন করুন। তিনটি বৈশিষ্ট্য বা এক্সটেনশন তালিকাভুক্ত করুন যা আপনাকে কোড লিখতে, ডিবাগ করতে বা আরও দক্ষতার সাথে রক্ষণাবেক্ষণ করতে সাহায্য করে। প্রতিটির জন্য, এটি কীভাবে আপনার কাজের প্রবাহে উপকার করে তার একটি সংক্ষিপ্ত ব্যাখ্যা দিন। +**প্রম্পট:** একটি কোড সম্পাদক অথবা IDE নির্বাচন করুন (যেমন Visual Studio Code, WebStorm, বা ক্লাউড-ভিত্তিক IDE)। এমন তিনটি বৈশিষ্ট্য বা এক্সটেনশন তালিকাভুক্ত করুন যা কোড লেখা, ডিবাগ করা, বা রক্ষণাবেক্ষণে সাহায্য করে। প্রতিটির জন্য সংক্ষিপ্ত ব্যাখ্যা দিন কিভাবে এটি আপনার কাজের গতি বৃদ্ধি করে। --- ## 🚀 চ্যালেঞ্জ -**ঠিক আছে, গোয়েন্দা, আপনার প্রথম কেসের জন্য প্রস্তুত?** +**ঠিক আছে ডিটেকটিভ, আপনার প্রথম মামলার জন্য প্রস্তুত?** + +এখন যেহেতু আপনার এই চমৎকার ভিত্তি গড়ে উঠেছে, আমি এক অভিযান দিচ্ছি যা আপনাকে দেখাবে কতটা বৈচিত্র্যময় ও আকর্ষণীয় প্রোগ্রামিং জগৎ আসলেই। আর শুনুন – এটা এখনও কোড লেখার ব্যাপার নয়, তাই চাপ নেই! নিজেকে ভাবুন প্রথম উত্তেজনাপূর্ণ মামলায় প্রোগ্রামিং ভাষার গোয়েন্দা হিসেবে! + +**আপনার মিশন, যদি আপনি গ্রহণ করতে চান:** +1. **ভাষার অনুসন্ধানী হন**: পুরোপুরি ভিন্ন তিনটি প্রোগ্রামিং ভাষা বাছুন – হয়তো একটি ওয়েবসাইট তৈরি করে, একটি মোবাইল অ্যাপ তৈরি করে, আরেকটি বিজ্ঞানীদের জন্য ডেটা বিশ্লেষণ করে। প্রতিটি ভাষায় একই সহজ কাজের উদাহরণ খুঁজে বের করুন। আমি আশ্বস্ত করছি, আপনি মুগ্ধ হবেন কীভাবে একেবারে ভিন্ন দেখতে হলেও একটিও কাজ একই রকম করে! + +2. **তাদের উত্স গল্প খুঁজে বের করুন**: প্রতিটি ভাষাকে বিশেষ করে তোলে কী? একটি মজার ঘটনা – প্রতিটি প্রোগ্রামিং ভাষা তৈরি হয়েছিল কারো মনে "আমি ভাবছি, এই নির্দিষ্ট সমস্যা সমাধানের একটা ভালো উপায় হওয়া উচিত" বলে। আপনি কি সেই সমস্যাগুলো বের করতে পারবেন? কিছু গল্প সত্যিই অসাধারণ! + +3. **কমিউনিটি চিনুন**: দেখুন প্রতিটি ভাষার কমিউনিটি কতটা বন্ধুত্বপূর্ণ ও উদ্দীপনাপূর্ণ। কিছু কমিউনিটিতে লাখ লাখ ডেভেলপার জ্ঞ্যান শেয়ার এবং সাহায্য করে, অন্যগুলি ছোট কিন্তু অতি-সংহত এবং সহায়ক। আপনি দেখতে পাবেন কিভাবে বিভিন্ন ব্যক্তিত্ব এই কমিউনিটিগুলোকে প্রাণবন্ত করে তোলে! + +4. **নিজের অনুভূতি অনুসরণ করুন**: কোন ভাষাটি এখন সবচেয়ে গ্রহণযোগ্য মনে হচ্ছে? “সঠিক” নির্বাচন নিয়ে চিন্তা করবেন না – শুধু আপনার অন্তর জিজ্ঞাসা শুনুন! এখানে ভুল উত্তর নেই, এবং পরে আপনি অন্য ভাষাগুলোও অন্বেষণ করতে পারেন। -এখন যেহেতু আপনার এই অসাধারণ ভিত্তি রয়েছে, আমার কাছে একটি অ্যাডভেঞ্চার রয়েছে যা আপনাকে দেখাবে প্রোগ্রামিং জগতটি কতটা বৈচিত্র্যময় এবং আকর্ষণীয়। এবং শুনুন – এটি এখনও কোড লেখার বিষয়ে নয়, তাই এখানে কোনো চাপ নেই! নিজেকে একজন প্রোগ্রামিং ভাষার গোয়েন্দা মনে করুন আপনার প্রথম উত্তেজনাপূর্ণ কেসে! +**বোনাস গোয়েন্দা কাজ**: দেখতে পারেন কোন প্রধান ওয়েবসাইট বা অ্যাপ কোন ভাষা দিয়ে তৈরি। আমি নিশ্চিত আপনি অবাক হবেন কীভাবে Instagram, Netflix, বা আপনি যে মোবাইল গেমটি খেলতে থামাতে পারেন না, সেগুলো কী দিয়ে চালানো হয়! -**আপনার মিশন, যদি আপনি এটি গ্রহণ করতে চান:** -1. **একজন ভাষা অনুসন্ধানকারী হয়ে উঠুন**: সম্পূর্ণ ভিন্ন জগতের তিনটি প্রোগ্রামিং ভাষা বেছে নিন – হয়তো একটি যা ওয়েবসাইট তৈরি করে, একটি যা মোবাইল অ্যাপ তৈরি করে, এবং একটি যা বিজ্ঞানীদের জন্য ডেটা বিশ্লেষণ করে। প্রতিটি ভাষায় লেখা একই সাধারণ কাজের উদাহরণ খুঁজুন। আমি প্রতিশ্রুতি দিচ্ছি আপনি অবাক হবেন যে তারা একই কাজ করতে কতটা ভিন্ন দেখাতে পারে -## পর্যালোচনা ও স্ব-অধ্যয়ন +> 💡 **মনে রাখবেন**: আজকে আপনি কোন ভাষায় বিশেষজ্ঞ হতে চাইছেন না। আপনি শুধু আশেপাশের এলাকা চিন্তা করছেন যেখান থেকে আপনি ব্যবসা শুরু করবেন। ধীরে ধীরে, মজা করুন, এবং আপনার কৌতূহলকে পথপ্রদর্শক করুন! -**সময় নিয়ে অন্বেষণ করুন এবং মজা করুন!** +## চলুন উদযাপন করি আপনি যা আবিষ্কার করেছেন! -আজ আপনি অনেক কিছু শিখেছেন, এবং এটি নিয়ে গর্বিত হওয়া উচিত! এখন মজার অংশ শুরু – সেই বিষয়গুলো অন্বেষণ করা যা আপনার কৌতূহল জাগিয়েছে। মনে রাখবেন, এটি কোনো হোমওয়ার্ক নয় – এটি একটি অভিযান! +ওহ মাই, আজ আপনি অসাধারণ অনেক তথ্য গ্রহণ করেছেন! আমি সত্যিই উন্মুখ দেখতে যে এই চমৎকার যাত্রার কতটুকু আপনার মনে গেঁথে গেছে। এবং মনে রাখবেন – এটা কোনো পরীক্ষা নয় যে আপনাকে সবকিছু নিখুঁত করতে হবে। এটা একটা উদযাপন আপনার শেখা সব দুর্দান্ত বিষয়ের! -**যে বিষয়গুলো আপনাকে উত্তেজিত করে তার গভীরে যান:** +[পোস্ট-লেসন কুইজ দিন](https://ff-quizzes.netlify.app/web/) -**প্রোগ্রামিং ভাষার সাথে হাতে-কলমে কাজ করুন:** -- ২-৩টি ভাষার অফিসিয়াল ওয়েবসাইটে যান যা আপনার আগ্রহ জাগিয়েছে। প্রতিটি ভাষার নিজস্ব ব্যক্তিত্ব এবং গল্প রয়েছে! -- [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), বা [Replit](https://replit.com/) এর মতো অনলাইন কোডিং প্ল্যাটফর্মে চেষ্টা করুন। পরীক্ষা করতে ভয় পাবেন না – কিছুই ভাঙবে না! -- আপনার প্রিয় ভাষার উৎপত্তি সম্পর্কে পড়ুন। সত্যি বলতে, কিছু ভাষার গল্প খুবই আকর্ষণীয় এবং এটি আপনাকে বুঝতে সাহায্য করবে কেন ভাষাগুলো এভাবে কাজ করে। +## পর্যালোচনা ও স্ব-অধ্যয়ন -**আপনার নতুন টুলগুলোর সাথে পরিচিত হন:** -- Visual Studio Code ডাউনলোড করুন যদি এখনও না করে থাকেন – এটি বিনামূল্যে এবং আপনি এটি পছন্দ করবেন! -- Extensions মার্কেটপ্লেসে কয়েক মিনিট সময় কাটান। এটি আপনার কোড এডিটরের জন্য একটি অ্যাপ স্টোরের মতো! -- আপনার ব্রাউজারের Developer Tools খুলুন এবং ক্লিক করুন। সবকিছু বুঝতে না পারলেও চিন্তা করবেন না – শুধু পরিচিত হওয়ার চেষ্টা করুন। +**সময় নিয়ে অন্বেষণ করুন এবং উপভোগ করুন!** +আপনি আজ অনেক কিছু শিখেছেন, এবং এটা নিয়ে গর্ব করার মত বিষয়! এখন মজার সময় এসেছে – সেই বিষয়গুলো অন্বেষণ করার যেগুলো আপনার কৌতূহল উসকে দিয়েছে। মনে রাখবেন, এটা কোনো হোমওয়ার্ক নয় – এটা এক ধরনের অভিযান! + +**আপনাকে কি উত্তেজিত করে তা আরও গভীরভাবে জানুন:** + +**প্রোগ্রামিং ভাষাগুলোর সাথে হাতেকলমে পরিচিত হোন:** +- ২-৩টি ভাষার অফিসিয়াল ওয়েবসাইট দেখুন যেগুলো আপনার নজর কেড়েছে। প্রত্যেকটির আলাদা আলাদা ব্যক্তিত্ব এবং গল্প আছে! +- [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), অথবা [Replit](https://replit.com/) এর মত কিছু অনলাইন কোডিং প্লেগ্রাউন্ডে চেষ্টা করুন। ভয় পাবেন না পরিক্ষা করতে – আপনি কিছু ভাঙতে পারবেন না! +- আপনার পছন্দের ভাষা কিভাবে তৈরি হলো সে সম্পর্কে পড়ুন। সত্যি বলছি, এই ভাষাগুলোর উৎপত্তি গল্পগুলো আকর্ষণীয় এবং এগুলো আপনাকে বুঝতে সাহায্য করবে কেন ভাষাগুলো এমন কাজ করে যেভাবে করে। + +**আপনার নতুন টুলগুলোর সাথে স্বাচ্ছন্দ্য বোধ করুন:** +- যদি এখনও ডাউনলোড না করে থাকেন, তবে Visual Studio Code ডাউনলোড করুন – এটা বিনামূল্যে এবং আপনি এটি পছন্দ করবেন! +- কয়েক মিনিট নিন Extension মার্কেটপ্লেস দেখতে। এটি আপনার কোড এডিটরের জন্য একটি অ্যাপ স্টোরের মত! +- আপনার ব্রাউজারের Developer Tools খুলুন এবং শুধু ক্লিক করে দেখুন। সবকিছু বুঝতে হবে না – শুধু যা আছে তা নিয়ে পরিচিত হন। **কমিউনিটিতে যোগ দিন:** -- [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), বা [GitHub](https://github.com/) এ কিছু ডেভেলপার কমিউনিটি অনুসরণ করুন। প্রোগ্রামিং কমিউনিটি নতুনদের জন্য অত্যন্ত স্বাগতপূর্ণ! -- YouTube-এ কিছু নতুনদের জন্য বানানো কোডিং ভিডিও দেখুন। অনেক চমৎকার ক্রিয়েটর আছেন যারা নতুনদের জন্য সহজ করে বোঝান। -- স্থানীয় মিটআপ বা অনলাইন কমিউনিটিতে যোগ দেওয়ার কথা ভাবুন। বিশ্বাস করুন, ডেভেলপাররা নতুনদের সাহায্য করতে ভালোবাসে! +- [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), অথবা [GitHub](https://github.com/) এর মত ডেভেলপার কমিউনিটিগুলো অনুসরণ করুন। প্রোগ্রামিং কমিউনিটি নতুনদের অনেক আন্তরিক! +- YouTube এ কিছু শিখনযোগ্য কোডিং ভিডিও দেখুন। অনেক চমৎকার নির্মাতা আছেন যারা জানেন নতুন শুরু করার অনুভূতি কেমন। +- স্থানীয় মিটআপ বা অনলাইন কমিউনিটিতে যোগ দেওয়ার কথা ভাবুন। বিশ্বাস করুন, ডেভেলপাররা নতুনদের সাহায্য করতে ভালোবাসে! + +> 🎯 **সাবধান, আমি যা বলব মনে রাখবেন**: আপনি রাতারাতি কোডিং জাদুকর হয়ে যাবেন এমন প্রত্যাশা নেই! এখন আপনি শুধু এই আশ্চর্য নতুন জগতের সাথে পরিচিত হচ্ছেন যার অংশ হতে যাচ্ছেন। সময় নিন, যাত্রা উপভোগ করুন, এবং মনে রাখবেন – আপনি যে প্রতিটি ডেভেলপারকে শ্রদ্ধা করেন তারা একসময় ঠিক আপনার মতোই বসে ছিলেন, উত্তেজিত ও হয়তো কিছুটা নগণ্য বোধ করছিলেন। এটা সম্পূর্ণ স্বাভাবিক, এবং এর মানে আপনি সঠিক পথে আছেন! + -> 🎯 **শুনুন, আমি যা চাই তা মনে রাখুন**: আপনাকে রাতারাতি কোডিং উইজার্ড হয়ে উঠতে হবে না! এখন আপনি এই অসাধারণ নতুন জগতের সাথে পরিচিত হচ্ছেন যা আপনি শীঘ্রই অংশ হতে চলেছেন। সময় নিন, যাত্রাটি উপভোগ করুন, এবং মনে রাখুন – আপনি যেসব ডেভেলপারকে প্রশংসা করেন তারা একসময় ঠিক আপনার মতোই ছিলেন, উত্তেজিত এবং হয়তো কিছুটা বিভ্রান্ত। এটি সম্পূর্ণ স্বাভাবিক, এবং এর মানে আপনি সঠিক পথে আছেন। ## অ্যাসাইনমেন্ট [Reading the Docs](assignment.md) -> 💡 **আপনার অ্যাসাইনমেন্টের জন্য একটি ছোট্ট ইঙ্গিত**: আমি সত্যিই চাই আপনি এমন কিছু টুল অন্বেষণ করুন যা আমরা এখনও আলোচনা করিনি! আমরা ইতিমধ্যে আলোচনা করা এডিটর, ব্রাউজার, এবং কমান্ড লাইন টুলগুলো বাদ দিন – সেখানে অসাধারণ ডেভেলপমেন্ট টুলের একটি বিশাল জগৎ রয়েছে যা আবিষ্কারের অপেক্ষায় রয়েছে। এমন টুল খুঁজুন যা সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় এবং যেখানে প্রাণবন্ত, সহায়ক কমিউনিটি রয়েছে (এগুলো সাধারণত সেরা টিউটোরিয়াল এবং সহায়ক মানুষদের নিয়ে থাকে যখন আপনি আটকে যান এবং সাহায্যের প্রয়োজন হয়)। +> 💡 **আপনার অ্যাসাইনমেন্টের জন্য একটি ছোট টিপস**: আমি সত্যিই দেখতে চাই আপনি কিছু নতুন টুল অন্বেষণ করছেন যেগুলো আমরা এখনও আলোচনা করিনি! যেই এডিটর, ব্রাউজার এবং কমান্ড লাইন টুলগুলো আমরা শিখেছি সেগুলো বাদ দিন – এই বিশাল অসাধারণ ডেভেলপমেন্ট টুলসের জগত আছে অপেক্ষা করছে আবিষ্কারের জন্য। এমন গুলো খুঁজুন যেগুলো নিয়মিত আপডেট হয় এবং সুন্দর, সাহায্যকারী কমিউনিটি আছে (এই গুলোই সাধারণত সেরা টিউটোরিয়াল এবং সর্বাধিক সমর্থন পায় যখন আপনি আটকে যান এবং সাহায্যের প্রয়োজন হয়)। --- ## 🚀 আপনার প্রোগ্রামিং যাত্রার টাইমলাইন ### ⚡ **পরবর্তী ৫ মিনিটে আপনি যা করতে পারেন** -- [ ] ২-৩টি প্রোগ্রামিং ভাষার ওয়েবসাইট বুকমার্ক করুন যা আপনার আগ্রহ জাগিয়েছে -- [ ] Visual Studio Code ডাউনলোড করুন যদি এখনও না করে থাকেন -- [ ] আপনার ব্রাউজারের DevTools (F12) খুলুন এবং যেকোনো ওয়েবসাইটে ক্লিক করুন -- [ ] একটি প্রোগ্রামিং কমিউনিটিতে যোগ দিন (Dev.to, Reddit r/webdev, বা Stack Overflow) - -### ⏰ **এই ঘণ্টায় আপনি যা অর্জন করতে পারেন** -- [ ] লেসন-পরবর্তী কুইজ সম্পন্ন করুন এবং আপনার উত্তরগুলো নিয়ে চিন্তা করুন -- [ ] GitHub Copilot এক্সটেনশন দিয়ে VS Code সেটআপ করুন -- [ ] অনলাইনে ২টি ভিন্ন প্রোগ্রামিং ভাষায় "Hello World" উদাহরণ চেষ্টা করুন -- [ ] YouTube-এ "Day in the Life of a Developer" ভিডিও দেখুন -- [ ] আপনার প্রোগ্রামিং ভাষার গোয়েন্দাগিরি শুরু করুন (চ্যালেঞ্জ থেকে) +- [ ] ২-৩টি প্রোগ্রামিং ভাষার ওয়েবসাইট বুকমার্ক করুন যেগুলো নজর কেড়েছে +- [ ] যদি এখনও না করে থাকেন Visual Studio Code ডাউনলোড করুন +- [ ] আপনার ব্রাউজারের DevTools (F12) খুলে যেকোনো ওয়েবসাইটে ক্লিক করে দেখুন +- [ ] একটি প্রোগ্রামিং কমিউনিটিতে যোগদান করুন (Dev.to, Reddit r/webdev, অথবা Stack Overflow) + +### ⏰ **এই ঘণ্টায় আপনি যা অর্জন করতে পারেন** +- [ ] পোস্ট-লেসন কুইজ সম্পন্ন করুন এবং আপনার উত্তর নিয়ে প্রতিফলন করুন +- [ ] VS Code এ GitHub Copilot এক্সটেনশন সেটআপ করুন +- [ ] ২টি ভিন্ন প্রোগ্রামিং ভাষায় অনলাইনে "হ্যালো ওয়ার্ল্ড" উদাহরণ চেষ্টা করুন +- [ ] YouTube এ "একজন ডেভেলাপারের জীবনের এক দিন" ভিডিও দেখুন +- [ ] আপনার প্রোগ্রামিং ভাষার গোয়েন্দা কাজ শুরু করুন (চ্যালেঞ্জ থেকে) ### 📅 **আপনার সপ্তাহব্যাপী অভিযান** -- [ ] অ্যাসাইনমেন্ট সম্পন্ন করুন এবং ৩টি নতুন ডেভেলপমেন্ট টুল অন্বেষণ করুন -- [ ] সোশ্যাল মিডিয়ায় ৫ জন ডেভেলপার বা প্রোগ্রামিং অ্যাকাউন্ট অনুসরণ করুন -- [ ] CodePen বা Replit-এ কিছু ছোট্ট তৈরি করার চেষ্টা করুন (এমনকি "Hello, [আপনার নাম]!" হলেও!) -- [ ] কারো কোডিং যাত্রা নিয়ে একটি ডেভেলপার ব্লগ পোস্ট পড়ুন -- [ ] একটি ভার্চুয়াল মিটআপে যোগ দিন বা একটি প্রোগ্রামিং টক দেখুন -- [ ] অনলাইন টিউটোরিয়াল দিয়ে আপনার পছন্দের ভাষা শেখা শুরু করুন +- [ ] অ্যাসাইনমেন্ট সম্পন্ন করুন এবং ৩টি নতুন ডেভেলপমেন্ট টুল পড়ুন +- [ ] ৫ জন ডেভেলপার বা প্রোগ্রামিং অ্যাকাউন্ট সোশ্যাল মিডিয়ায় অনুসরণ করুন +- [ ] CodePen অথবা Replit এ কিছু ছোট্ট কিছু তৈরি করে দেখুন (যেমন "Hello, [Your Name]!") +- [ ] কারো কোডিং যাত্রা সম্পর্কে একটি ডেভেলপার ব্লগ পোস্ট পড়ুন +- [ ] একটি ভার্চুয়াল মিটআপে যোগ দিন বা প্রোগ্রামিং টক দেখুন +- [ ] অনলাইন টিউটোরিয়াল দিয়ে আপনার পছন্দের ভাষা শেখা শুরু করুন ### 🗓️ **আপনার মাসব্যাপী রূপান্তর** -- [ ] আপনার প্রথম ছোট প্রকল্প তৈরি করুন (এমনকি একটি সাধারণ ওয়েবপেজ হলেও!) -- [ ] একটি ওপেন-সোর্স প্রকল্পে অবদান রাখুন (ডকুমেন্টেশন সংশোধন দিয়ে শুরু করুন) -- [ ] এমন কাউকে মেন্টর করুন যে তার প্রোগ্রামিং যাত্রা শুরু করেছে -- [ ] আপনার ডেভেলপার পোর্টফোলিও ওয়েবসাইট তৈরি করুন -- [ ] স্থানীয় ডেভেলপার কমিউনিটি বা স্টাডি গ্রুপের সাথে সংযুক্ত হন -- [ ] আপনার পরবর্তী শেখার মাইলস্টোন পরিকল্পনা শুরু করুন +- [ ] আপনার প্রথম ছোট প্রকল্প তৈরি করুন (এমনকি একটি সাধারণ ওয়েবপেজও চলে!) +- [ ] একটি ওপেন-সোর্স প্রকল্পে অবদান রাখুন (ডকুমেন্টেশন থেকে শুরু করুন) +- [ ] যাঁরা নতুন শুরু করেছেন তাদের মেন্টর হন +- [ ] আপনার ডেভেলপার পোর্টফোলিওয়েবসাইট তৈরি করুন +- [ ] স্থানীয় ডেভেলপার কমিউনিটি বা স্টাডি গ্রুপের সাথে সংযোগ করুন +- [ ] আপনার পরবর্তী শেখার মাইলস্টোন প্ল্যান করা শুরু করুন -### 🎯 **চূড়ান্ত প্রতিফলন চেক-ইন** +### 🎯 **চূড়ান্ত প্রতিফলন পরীক্ষা** -**আগে আপনি এগিয়ে যান, একটি মুহূর্ত নিয়ে উদযাপন করুন:** -- প্রোগ্রামিং সম্পর্কে আজ আপনাকে উত্তেজিত করেছে এমন একটি বিষয় কী? +**আগে এগিয়ে যাওয়ার আগে এক মুহূর্ত উদযাপন করুন:** +- আজ কোডিং সম্পর্কে কোন বিষয়টি আপনার সবচেয়ে বেশি উত্তেজিত করেছে? - কোন টুল বা ধারণা আপনি প্রথমে অন্বেষণ করতে চান? -- এই প্রোগ্রামিং যাত্রা শুরু করার ব্যাপারে আপনি কেমন অনুভব করছেন? -- একজন ডেভেলপারকে আপনি এখন কী প্রশ্ন করতে চান? +- এই প্রোগ্রামিং যাত্রা শুরু করতে কেমন অনুভব করছেন? +- এখনই কোন প্রশ্ন আপনি একটি ডেভেলপারকে জিজ্ঞাসা করতে চান? ```mermaid journey - title Your Confidence Building Journey - section Today - Curious: 3: You - Overwhelmed: 4: You - Excited: 5: You - section This Week - Exploring: 4: You - Learning: 5: You - Connecting: 4: You - section Next Month - Building: 5: You - Confident: 5: You - Helping Others: 5: You + title আপনার আত্মবিশ্বাস গড়ার যাত্রা + section আজ + উৎসাহী: 3: You + অতিপ্রশস্ত: 4: You + উন্মুখ: 5: You + section এই সপ্তাহে + অনুসন্ধান করা: 4: You + শেখা: 5: You + সংযোগ করা: 4: You + section পরবর্তী মাস + নির্মাণ করা: 5: You + আত্মবিশ্বাসী: 5: You + অন্যদের সাহায্য করা: 5: You ``` - -> 🌟 **মনে রাখবেন**: প্রতিটি বিশেষজ্ঞ একসময় একজন শিক্ষার্থী ছিলেন। প্রতিটি সিনিয়র ডেভেলপার একসময় ঠিক আপনার মতোই অনুভব করেছিলেন – উত্তেজিত, হয়তো কিছুটা বিভ্রান্ত, এবং অবশ্যই সম্ভাবনার প্রতি কৌতূহলী। আপনি অসাধারণ সঙ্গতে আছেন, এবং এই যাত্রা অবিশ্বাস্য হতে চলেছে। প্রোগ্রামিংয়ের চমৎকার জগতে আপনাকে স্বাগতম! 🎉 +> 🌟 **মনে রাখবেন**: প্রত্যেক বিশেষজ্ঞ একজন নবীন ছিলেন। প্রত্যেক সিনিয়র ডেভেলপার ঠিক আপনার মতো অনুভব করতেন – উত্তেজিত, হয়তো একটু হতবাক, এবং নিশ্চয়ই আগ্রহী কী সম্ভব। আপনি অসাধারণ কোম্পানিতে আছেন, এবং এই যাত্রা অসাধারণ হবে। প্রোগ্রামিংয়ের আশ্চর্যজনক জগতে স্বাগতম! 🎉 --- + **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। এর মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসম্ভব সঠিকতার চেষ্টা করি, তবে স্বয়ংক্রিয় অনুবাদে ভুল বা অসম্পূর্ণতা থাকতে পারে তা ভালো করে বুঝে নেয়া উচিত। মূল নথিটি তার নিজস্ব ভাষায় কর্তৃপক্ষপূর্ণ উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ গ্রহণ করা উত্তম। এই অনুবাদের ব্যবহারে সৃষ্টি হওয়া কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। + \ No newline at end of file diff --git a/translations/bn/AGENTS.md b/translations/bn/AGENTS.md index 0c2209ea9..32cb471e2 100644 --- a/translations/bn/AGENTS.md +++ b/translations/bn/AGENTS.md @@ -2,56 +2,56 @@ ## প্রকল্পের ওভারভিউ -এটি শিক্ষামূলক কারিকুলাম রিপোজিটরি যা ওয়েব ডেভেলপমেন্টের মৌলিক বিষয়গুলো শুরু থেকে শেখানোর জন্য তৈরি। কারিকুলামটি একটি ব্যাপক ১২ সপ্তাহের কোর্স, যা Microsoft Cloud Advocates দ্বারা উন্নয়ন করা হয়েছে, এতে JavaScript, CSS, এবং HTML বিষয়ক ২৪টি হাতে-কলমে শেখার পাঠ অন্তর্ভুক্ত। +এটি শিক্ষামূলক পাঠক্রমের রেপোজিটরি, যা শুরু থেকেই ওয়েব ডেভেলপমেন্টের মৌলিক বিষয়গুলি শেখানোর জন্য তৈরি। এই পাঠক্রমটি একটি ব্যাপক ১২ সপ্তাহের কোর্স, যা Microsoft Cloud Advocates দ্বারা উন্নত করা হয়েছে, এবং এতে জাভাস্ক্রিপ্ট, CSS, এবং HTML এর উপর ভিত্তি করে ২৪টি হ্যান্ডস-অন লেসন রয়েছে। ### মূল উপাদানসমূহ -- **শিক্ষামূলক বিষয়বস্তু**: প্রকল্প-ভিত্তিক মডিউলগুলোতে সাজানো ২৪টি গঠনবদ্ধ পাঠ -- **প্র্যাকটিক্যাল প্রকল্পসমূহ**: টেরারিয়াম, টাইপিং গেম, ব্রাউজার এক্সটেনশন, স্পেস গেম, ব্যাংকিং অ্যাপ, কোড এডিটর, এবং AI চ্যাট সহকারী -- **ইন্টারঅ্যাকটিভ কুইজ**: প্রতিটি ৩টি প্রশ্নসহ ৪৮টি কুইজ (পাঠের পূর্ব ও পরবর্তী মূল্যায়ন) -- **বহুভাষা সহায়তা**: GitHub Actions এর মাধ্যমে ৫০+ ভাষায় স্বয়ংক্রিয় অনুবাদ -- **প্রযুক্তিসমূহ**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (AI প্রকল্পের জন্য) +- **শিক্ষামূলক বিষয়বস্তু**: ২৪টি কাঠামোবদ্ধ লেসন, প্রজেক্ট-ভিত্তিক মডিউলে সংগঠিত +- **ব্যবহারিক প্রজেক্ট**: টেরারিয়াম, টাইপিং গেম, ব্রাউজার এক্সটেনশন, স্পেস গেম, ব্যাংকিং অ্যাপ, কোড এডিটর, এবং AI চ্যাট অ্যাসিস্ট্যান্ট +- **ইন্টারেক্টিভ কুইজ**: ৪৮টি কুইজ, প্রত্যেকটির মধ্যে ৩টি প্রশ্ন (পূর্ব এবং পরবর্তী লেসন মূল্যায়ন) +- **মাল্টি-ভাষা সমর্থন**: GitHub Actions ব্যবহার করে ৫০+ ভাষায় স্বয়ংক্রিয় অনুবাদ +- **প্রযুক্তি**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (AI প্রকল্পের জন্য) ### স্থাপত্য -- পাঠভিত্তিক কাঠামোর শিক্ষামূলক রিপোজিটরি -- প্রতিটি পাঠের ফোল্ডারে README, কোড উদাহরণ, এবং সমাধানাদি থাকে -- স্বতন্ত্র প্রকল্পগুলি আলাদা ডিরেক্টরিতে (quiz-app, বিভিন্ন পাঠ প্রকল্প) -- GitHub Actions (co-op-translator) ব্যবহার করে অনুবাদ সিস্টেম -- Docsify এর মাধ্যমে ডকুমেন্টেশন পরিবেশিত এবং PDF ফরম্যাটে উপলব্ধ +- লেসন-ভিত্তিক কাঠামোসহ শিক্ষামূলক রেপোজিটরি +- প্রতিটি লেসন ফোল্ডারে README, কোড উদাহরণ, এবং সমাধান রয়েছে +- পৃথক ডিরেক্টরিতে স্ট্যান্ডঅ্যালোন প্রজেক্ট (quiz-app, বিভিন্ন লেসন প্রজেক্ট) +- GitHub Actions দ্বারা পরিচালিত অনুবাদ ব্যবস্থা (co-op-translator) +- Docsify এর মাধ্যমে ডকুমেন্টেশন পরিবেশন এবং PDF আকারে পাওয়া যায় -## সেটআপ কমান্ডসমূহ +## সেটআপ কমান্ড -এই রিপোজিটরি মূলত শিক্ষামূলক বিষয়বস্তু ব্যবহারের জন্য। নির্দিষ্ট প্রকল্পে কাজের জন্য: +এই রেপোজিটরি প্রধানত শিক্ষামূলক বিষয়বস্তু ব্যবহারের জন্য। নির্দিষ্ট প্রজেক্ট নিয়ে কাজ করার জন্য: -### মূল রিপোজিটরি সেটআপ +### প্রধান রেপোজিটরি সেটআপ ```bash git clone https://github.com/microsoft/Web-Dev-For-Beginners.git cd Web-Dev-For-Beginners ``` -### Quiz App সেটআপ (Vue 3 + Vite) +### কুইজ অ্যাপ সেটআপ (Vue 3 + Vite) ```bash cd quiz-app npm install -npm run dev # ডেভেলপমেন্ট সার্ভার শুরু করুন -npm run build # প্রোডাকশনের জন্য বিল্ড করুন +npm run dev # উন্নয়ন সার্ভার শুরু করুন +npm run build # উৎপাদনের জন্য বিল্ড করুন npm run lint # ESLint চালান ``` -### Bank Project API (Node.js + Express) +### ব্যাংক প্রজেক্ট API (Node.js + Express) ```bash cd 7-bank-project/api npm install -npm start # API সার্ভার শুরু করুন +npm start # এপিআই সার্ভার শুরু করুন npm run lint # ESLint চালান npm run format # Prettier দিয়ে ফরম্যাট করুন ``` -### Browser Extension প্রকল্পসমূহ +### ব্রাউজার এক্সটেনশন প্রজেক্টসমূহ ```bash cd 5-browser-extension/solution @@ -59,139 +59,139 @@ npm install # ব্রাউজার-নির্দিষ্ট এক্সটেনশন লোডিং নির্দেশাবলী অনুসরণ করুন ``` -### Space Game প্রকল্পসমূহ +### স্পেস গেম প্রজেক্টসমূহ ```bash cd 6-space-game/solution npm install -# ব্রাউজারে index.html খুলুন বা Live Server ব্যবহার করুন +# ব্রাউজারে index.html খুলুন অথবা লাইভ সার্ভার ব্যবহার করুন ``` -### Chat প্রকল্প (Python Backend) +### চ্যাট প্রজেক্ট (Python ব্যাকেন্ড) ```bash cd 9-chat-project/solution/backend/python pip install openai -# GITHUB_TOKEN পরিবেশ পরিবর্তনশীল সেট করুন +# GITHUB_TOKEN পরিবেশ ভেরিয়েবল সেট করুন python api.py ``` -## ডেভেলপমেন্ট ওয়ার্কফ্লো +## ডেভেলপমেন্ট ওয়ার্কফ্লো -### বিষয়বস্তু অবদানকারীদের জন্য +### বিষয়বস্তু অবদানকারীদের জন্য -1. **রিপোজিটরি ফর্ক করুন** আপনার GitHub অ্যাকাউন্টে -2. **লোকাল ক্লোন করুন** আপনার ফর্কটি -3. **নতুন ব্রাঞ্চ তৈরি করুন** আপনার পরিবর্তনের জন্য -4. পাঠের বিষয় বা কোড উদাহরণে পরিবর্তন করুন -5. সংশ্লিষ্ট প্রকল্প ডিরেক্টরিতে কোড পরিবর্তন পরীক্ষণ করুন -6. অবদান নির্দেশিকা অনুযায়ী পুল রিকোয়েস্ট জমা দিন +1. আপনার GitHub অ্যাকাউন্টে **রেপোজিটরি ফর্ক করুন** +2. **আপনার ফর্ক লোকালি ক্লোন করুন** +3. আপনার পরিবর্তনের জন্য একটি **নতুন ব্রাঞ্চ তৈরি করুন** +4. লেসন বিষয়বস্তু বা কোড উদাহরণে পরিবর্তন করুন +5. সংশ্লিষ্ট প্রজেক্ট ডিরেক্টরিতে যেকোনো কোড পরিবর্তন পরীক্ষা করুন +6. অবদান নির্দেশিকা অনুসরণ করে পুল রিকোয়েস্ট জমা দিন ### শিক্ষার্থীদের জন্য -1. রিপোজিটরি ফর্ক বা ক্লোন করুন -2. ক্রমানুসারে পাঠের ডিরেক্টরিতে যান -3. প্রতিটি পাঠের README পড়ুন -4. https://ff-quizzes.netlify.app/web/ এ পূর্ব-পাঠ কুইজ সম্পন্ন করুন -5. পাঠ ফোল্ডারে কোড উদাহরণে কাজ করুন -6. অ্যাসাইনমেন্ট এবং চ্যালেঞ্জ সমাধান করুন -7. পরবর্তী-পাঠের কুইজ নিন +1. রেপোজিটরি ফর্ক বা ক্লোন করুন +2. ধারাবাহিকভাবে লেসন ডিরেক্টরিতে নেভিগেট করুন +3. প্রতিটি লেসনের README ফাইল পড়ুন +4. https://ff-quizzes.netlify.app/web/ এ প্রি-লেসন কুইজ সম্পন্ন করুন +5. লেসন ফোল্ডারে কোড উদাহরণ কাজ করুন +6. অ্যাসাইনমেন্ট ও চ্যালেঞ্জ সম্পন্ন করুন +7. পোস্ট-লেসন কুইজ নিন ### লাইভ ডেভেলপমেন্ট -- **ডকুমেন্টেশন**: রুটে `docsify serve` চালান (পোর্ট ৩০০০) -- **Quiz App**: quiz-app ডিরেক্টরিতে `npm run dev` চালান -- **প্রকল্পসমূহ**: HTML প্রকল্পের জন্য VS Code Live Server এক্সটেনশন ব্যবহার করুন -- **API প্রকল্প**: সংশ্লিষ্ট API ডিরেক্টরিতে `npm start` চালান +- **ডকুমেন্টেশন**: মূল ফোল্ডারে `docsify serve` চালান (পোর্ট ৩০০০) +- **কুইজ অ্যাপ**: quiz-app ডিরেক্টরিতে `npm run dev` চালান +- **প্রজেক্টসমূহ**: HTML প্রজেক্টের জন্য VS Code লাইভ সার্ভার এক্সটেনশন ব্যবহার করুন +- **API প্রজেক্টসমূহ**: সংশ্লিষ্ট API ডিরেক্টরিতে `npm start` চালান -## টেস্টিং নির্দেশাবলি +## পরীক্ষার নির্দেশাবলী -### Quiz App টেস্টিং +### কুইজ অ্যাপ টেস্টিং ```bash cd quiz-app -npm run lint # কোড স্টাইল সমস্যাগুলি পরীক্ষা করুন -npm run build # বিল্ড সফল হয়েছে কি না যাচাই করুন +npm run lint # কোড স্টাইল সমস্যা পরীক্ষা করুন +npm run build # বিল্ড সফল হয় কি না যাচাই করুন ``` -### Bank API টেস্টিং +### ব্যাংক API টেস্টিং ```bash cd 7-bank-project/api npm run lint # কোড স্টাইল সমস্যাগুলি পরীক্ষা করুন -node server.js # সার্ভার ত্রুটি ছাড়াই শুরু হয় কিনা যাচাই করুন +node server.js # সার্ভার ত্রুটি ছাড়া শুরু হচ্ছে কিনা যাচাই করুন ``` -### সাধারণ টেস্টিং পদ্ধতি +### সাধারণ পরীক্ষার পদ্ধতি -- এটি একটি শিক্ষামূলক রিপোজিটরি, ব্যাপক স্বয়ংক্রিয় টেস্ট নেই -- ম্যানুয়াল টেস্টিং মূলত: - - কোড উদাহরণ ত্রুটিমুক্ত চালানো - - ডকুমেন্টেশনের লিঙ্ক সঠিক কাজ করা - - প্রকল্পের বিল্ড সফলভাবে সম্পন্ন হওয়া - - উদাহরণসমূহ সেরা চর্চানুযায়ী হতে হবে +- এটি একটি শিক্ষামূলক রেপোজিটরি, পূর্ণাঙ্গ স্বয়ংক্রিয় টেস্ট নেই +- হাতে পরীক্ষার জোর দেওয়া হয়: + - কোড উদাহরণ ভুল ছাড়াই চলা + - ডকুমেন্টেশনে লিঙ্ক সঠিক কাজ + - প্রজেক্ট বিল্ড সাফল্যের সাথে সম্পন্ন হওয়া + - উদাহরণসমূহ সর্বোত্তম অনুশীলন অনুসরণ করে ### সাবমিশনের আগে যাচাই -- যেখানে package.json আছে ঐ ডিরেক্টরিতে `npm run lint` চালান -- মার্কডাউন লিঙ্ক যাচাই করুন -- ব্রাউজার বা Node.js এ কোড উদাহরণ পরীক্ষা করুন -- অনুবাদগুলি সঠিক কাঠামো বজায় রাখছে কিনা দেখুন +- যেখানে package.json আছে, সেখানগুলোতে `npm run lint` চালান +- মার্কডাউন লিঙ্কগুলি বৈধ কিনা যাচাই করুন +- কোড উদাহরণ ব্রাউজার বা Node.js এ পরীক্ষা করুন +- অনুবাদ সঠিক কাঠামো বজায় রাখে কিনা পরীক্ষা করুন -## কোড স্টাইল নির্দেশিকা +## কোড স্টাইল গাইডলাইনস -### JavaScript +### জাভাস্ক্রিপ্ট - আধুনিক ES6+ সিনট্যাক্স ব্যবহার করুন -- প্রকল্পে প্রদত্ত standard ESLint কনফিগারেশন অনুসরণ করুন -- শিক্ষার স্বচ্ছতার জন্য অর্থবহ ভ্যারিয়েবল ও ফাংশন নাম ব্যবহার করুন -- শিক্ষার্থীদের জন্য ধারণা ব্যাখ্যা করে মন্তব্য যোগ করুন -- যেখানে প্রয়োজন Prettier ব্যবহার করে ফরম্যাট করুন +- প্রজেক্টের ESLint কনফিগারেশন অনুসরণ করুন +- শিক্ষার্থীদের জন্য অর্থপূর্ণ ভ্যারিয়েবল ও ফাংশন নাম ব্যবহার করুন +- শিক্ষার্থীদের বোঝার জন্য ব্যাখ্যামূলক কমেন্ট যুক্ত করুন +- যেখানে প্রিসেট আছে সেখানে Prettier দ্বারা ফরম্যাট করুন ### HTML/CSS -- সেমান্টিক HTML5 এলিমেন্ট ব্যবহার করুন -- প্রতিক্রিয়াশীল ডিজাইন নীতিমালা অনুসরণ করুন -- স্পষ্ট ক্লাস নামকরণ রীতিনীতি -- শিক্ষার্থীদের জন্য CSS কৌশল ব্যাখ্যা করে মন্তব্য দিন +- সেম্যান্টিক HTML5 উপাদান ব্যবহার করুন +- প্রতিক্রিয়াশীল ডিজাইন নীতিমালা অনুসরণ করুন +- স্পষ্ট ক্লাস নামকরণ পদ্ধতি +- CSS কৌশলগুলো শিক্ষার্থীদের জন্য ব্যাখ্যা সহ কমেন্ট করুন -### Python +### পাইথন - PEP 8 স্টাইল গাইডলাইন অনুসরণ করুন -- পরিষ্কার, শিক্ষামূলক কোড উদাহরণ দিন -- শেখার জন্য প্রয়োজনীয় জায়গায় টাইপ হিন্ট যোগ করুন +- স্পষ্ট, শিক্ষামূলক কোড উদাহরণ দিন +- শেখার জন্য যেখানে দরকার, টাইপ হিন্ট যুক্ত করুন -### Markdown ডকুমেন্টেশন +### মার্কডাউন ডকুমেন্টেশন -- স্পষ্ট শিরোনামের শ্রেণিবিন্যাস -- ল্যাঙ্গুয়েজ স্পেসিফিকেশনসহ কোড ব্লক -- অতিরিক্ত রিসোর্সের লিঙ্ক -- `images/` ডিরেক্টরিতে স্ক্রিনশট ও ছবি -- প্রবেশগম্যতার জন্য ছবির জন্য Alt টেক্সট +- স্পষ্ট হেডিং হায়ারার্কি বজায় রাখুন +- ভাষা নির্দিষ্ট করে কোড ব্লক ব্যবহার করুন +- অতিরিক্ত রিসোর্সের লিঙ্ক দিন +- `images/` ফোল্ডারে স্ক্রীনশট এবং ছবি সংরক্ষণ করুন +- প্রাপ্যতায় ছবির জন্য Alt টেক্সট দিন -### ফাইল এরঙগেইজেশন +### ফাইল সংগঠন -- পাঠগুলো ক্রমানুসারে নম্বরকৃত (1-getting-started-lessons, 2-js-basics, ইত্যাদি) -- প্রতিটি প্রকল্পে `solution/` এবং প্রায়ই `start/` বা `your-work/` ডিরেক্টরি থাকে -- ছবিগুলো পাঠ-নির্দিষ্ট `images/` ফোল্ডারে সংরক্ষিত -- অনুবাদসমূহ `translations/{language-code}/` কাঠামোয় +- লেসন নম্বর ধারাবাহিকভাবে (1-getting-started-lessons, 2-js-basics ইত্যাদি) +- প্রতিটি প্রজেক্টের `solution/` এবং প্রায়শই `start/` বা `your-work/` ডিরেক্টরি থাকে +- লেসন-নির্দিষ্ট `images/` ফোল্ডারে ছবি সংরক্ষণ +- অনুবাদ থাকে `translations/{language-code}/` কাঠামোতে ## বিল্ড এবং ডিপ্লয়মেন্ট -### Quiz App ডিপ্লয়মেন্ট (Azure Static Web Apps) +### কুইজ অ্যাপ ডিপ্লয়মেন্ট (Azure Static Web Apps) -quiz-app Azure Static Web Apps ডিপ্লয়মেন্টের জন্য কনফিগার করা: +quiz-app Azure Static Web Apps এ ডিপ্লয়মেন্টের জন্য কনফিগার করা হয়েছে: ```bash cd quiz-app npm run build # dist/ ফোল্ডার তৈরি করে -# মেইন ব্রাঞ্চে পুশ করার সময় GitHub Actions ওয়ার্কফ্লো দ্বারা ডিপ্লয় করে +# main-এ push করার সময় GitHub Actions ওয়ার্কফ্লোর মাধ্যমে ডিপ্লয় করে ``` Azure Static Web Apps কনফিগারেশন: -- **অ্যাপ লোকেশন**: `/quiz-app` -- **আউটপুট লোকেশন**: `dist` -- **ওয়ার্কফ্লো**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` +- **অ্যাপ অবস্থান**: `/quiz-app` +- **আউটপুট অবস্থান**: `dist` +- **ওয়ার্কফ্লো**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` ### ডকুমেন্টেশন PDF তৈরি @@ -203,80 +203,80 @@ npm run convert # ডক্স থেকে পিডিএফ ত ### Docsify ডকুমেন্টেশন ```bash -npm install -g docsify-cli # ডকসিফাই বৈশ্বিকভাবে ইনস্টল করুন -docsify serve # লোকালহোস্ট:3000-এ সার্ভ করুন +npm install -g docsify-cli # গ্লোবালি Docsify ইনস্টল করুন +docsify serve # লোকালহোস্ট:3000 এ পরিবেশন করুন ``` -### প্রকল্প-নির্দিষ্ট বিল্ডসমূহ +### প্রজেক্ট-নির্দিষ্ট বিল্ড -প্রতিটি প্রকল্পের নিজস্ব বিল্ড প্রক্রিয়া থাকতে পারে: -- Vue প্রকল্প: `npm run build` প্রোডাকশন বান্ডেল তৈরি করে -- স্ট্যাটিক প্রকল্প: বিল্ড ধাপ নেই, সরাসরি ফাইল পরিবেশন +প্রতিটি প্রজেক্ট ডিরেক্টরির নিজস্ব বিল্ড প্রক্রিয়া থাকতে পারে: +- Vue প্রজেক্ট: `npm run build` প্রোডাকশন বান্ডেল তৈরি করে +- স্ট্যাটিক প্রজেক্ট: বিল্ড ধাপ নেই, সরাসরি ফাইল পরিবেশন -## পুল রিকোয়েস্ট নির্দেশিকা +## পুল রিকোয়েস্ট গাইডলাইন ### শিরোনাম ফরম্যাট -পরিবর্তনের ক্ষেত্র নির্দিষ্ট স্পষ্ট, বর্ণনামূলক শিরোনাম ব্যবহার করুন: +পরিবর্তনের ক্ষেত্র স্পষ্টভাবে উল্লেখ করে স্পষ্ট ও বর্ণনামূলক শিরোনাম ব্যবহার করুন: - `[Quiz-app] Add new quiz for lesson X` - `[Lesson-3] Fix typo in terrarium project` - `[Translation] Add Spanish translation for lesson 5` - `[Docs] Update setup instructions` -### প্রয়োজনীয় যাচাই +### প্রয়োজনীয় যাচাই -PR জমার আগে: +PR জমা দেওয়ার আগে: -1. **কোড কোয়ালিটি**: - - প্রভাবিত প্রকল্প ডিরেক্টরিতে `npm run lint` চালান - - সব লিন্ট ত্রুটি ও সতর্কতা ঠিক করুন +1. **কোড মান**: + - প্রভাবিত প্রজেক্ট ডিরেক্টরিতে `npm run lint` চালান + - সব লিন্টিং ত্রুটি ও সতর্কতা ঠিক করুন 2. **বিল্ড যাচাই**: - - প্রয়োজনে `npm run build` চালান - - কোন বিল্ড ত্রুটি নেই নিশ্চিত করুন + - যেখানে প্রযোজ্য, `npm run build` চালান + - কোন বিল্ড ত্রুটি নেই তা নিশ্চিত করুন -3. **লিঙ্ক ভ্যালিডেশন**: +3. **লিঙ্ক যাচাই**: - সব মার্কডাউন লিঙ্ক পরীক্ষা করুন - - ইমেজ রেফারেন্স কাজ করছে নিশ্চিত করুন + - ইমেজ রেফারেন্সগুলো কাজ করছে কিনা যাচাই করুন -4. **বিষয়বস্তু পর্যালোচনা**: - - বানান ও ব্যাকরণ ঠিক আছে কিনা দেখুন - - কোড উদাহরণ সঠিক ও শিক্ষণীয় কিনা যাচাই করুন - - অনুবাদ মূল অর্থ ধরে রেখেছে কিনা নিশ্চিত করুন +4. **বিষয়বস্তু পর্যালোচনা**: + - বানান ও ব্যাকরণ পরীক্ষা করুন + - কোড উদাহরণ সঠিক এবং শিক্ষামূলক কিনা নিশ্চিত করুন + - অনুবাদগুলি প্রাথমিক অর্থ বজায় রাখে কিনা যাচাই করুন -### অবদান রাখার শর্তাবলী +### অবদান দেওয়ার শর্ত -- Microsoft CLA-তে সম্মতি (প্রথম PR এ স্বয়ংক্রিয় যাচাই) +- Microsoft CLA (প্রথম PR এ স্বয়ংক্রিয় যাচাই) - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) অনুসরণ করুন -- বিস্তারিত গাইডলাইনের জন্য [CONTRIBUTING.md](./CONTRIBUTING.md) দেখুন -- প্রয়োজনে PR বর্ণনায় ইস্যু নম্বর উল্লেখ করুন +- বিস্তারিত নির্দেশের জন্য [CONTRIBUTING.md](./CONTRIBUTING.md) দেখুন +- প্রযোজ্য হলে PR বর্ণনায় ইস্যু নম্বর উল্লেখ করুন -### পর্যালোচনা প্রক্রিয়া +### পর্যালোচনা প্রক্রিয়া -- PR-গুলো মেইনটেনার ও কমিউনিটির দ্বারা পর্যালোচনা হয় -- শিক্ষাগত স্পষ্টতা অগ্রাধিকার পায় -- কোড উদাহরণ বর্তমান সেরা চর্চা অনুসরণ করবে -- অনুবাদ সঠিকতা ও সাংস্কৃতিক প্রাসঙ্গিকতার জন্য পর্যালোচনা হয় +- PR গুলো রক্ষণাবেক্ষক ও কমিউনিটি দ্বারা পর্যালোচনা করা হয় +- শিক্ষামূলক স্পষ্টতা অগ্রাধিকার পায় +- কোড উদাহরণ সর্বোত্তম অনুশীলন অনুসরণ করে +- অনুবাদ যথাযথতা ও সাংস্কৃতিক মানানসই কিনা যাচাই করা হয় -## অনুবাদ সিস্টেম +## অনুবাদ ব্যবস্থা -### স্বয়ংক্রিয় অনুবাদ +### স্বয়ংক্রিয় অনুবাদ -- GitHub Actions co-op-translator ওয়ার্কফ্লো ব্যবহার করে -- ৫০+ ভাষায় স্বয়ংক্রিয় অনুবাদ করে -- মূল ফাইলগুলো মেইন ডিরেক্টরিতে থাকে -- অনূদিত ফাইল `translations/{language-code}/` ডিরেক্টরিতে থাকে +- GitHub Actions এ co-op-translator ওয়ার্কফ্লো ব্যবহার করে +- ৫০+ ভাষায় স্বয়ংক্রিয় অনুবাদ +- মূল ফাইল প্রধান ডিরেক্টরিতে থাকে +- অনুবাদ ফাইল থাকে `translations/{language-code}/` ডিরেক্টরিতে -### ম্যানুয়াল অনুবাদ উন্নয়ন যুক্ত করা +### ম্যানুয়াল অনুবাদ উন্নতি যোগ করা -1. `translations/{language-code}/` এ ফাইল খুঁজুন -2. কাঠামো বজায় রেখে উন্নতি করুন -3. কোড উদাহরণ কার্যকরী রাখুন -4. কোন লোকালাইজড কুইজ কনটেন্ট থাকলে পরীক্ষা করুন +1. `translations/{language-code}/` ফোল্ডারে ফাইল অবস্থান করুন +2. কাঠামো বজায় রেখে উন্নতি করুন +3. কোড উদাহরণগুলি কার্যকর থাকবে নিশ্চিত করুন +4. স্থানীয়কৃত কুইজ বিষয়বস্তু পরীক্ষা করুন -### অনুবাদের মেটাডেটা +### অনুবাদ মেটাডেটা -অনূদিত ফাইলগুলোতে মেটাডেটা হেডার থাকে: +অনুবাদকৃত ফাইলগুলোতে মেটাডেটা হেডার থাকে: ```markdown ``` -## ডিবাগিং এবং সমস্যা সমাধান +## ডিবাগিং ও সমস্যার সমাধান -### সাধারণ সমস্যাসমূহ +### সাধারণ সমস্যা -**Quiz app শুরু হয় না**: -- Node.js সংস্করণ পরীক্ষা করুন (v14+ সুপারিশকৃত) -- `node_modules` এবং `package-lock.json` মুছুন, পুনরায় `npm install` চালান -- পোর্ট সংঘাত আছে কিনা দেখুন (ডিফল্ট: Vite পোর্ট 5173) +**কুইজ অ্যাপ স্টার্ট হয় না**: +- Node.js ভার্সন পরীক্ষা করুন (v14+ সুপারিশকৃত) +- `node_modules` ও `package-lock.json` মুছে পুনরায় `npm install` চালান +- পোর্ট সংঘর্ষ আছে কিনা দেখুন (ডিফল্ট: Vite পোর্ট ৫১৭৩) -**API সার্ভার শুরু হয় না**: +**API সার্ভার স্টার্ট হয় না**: - Node.js সংস্করণ ন্যূনতম (node >=10) নিশ্চিত করুন -- পোর্ট ইতোমধ্যে ব্যবহৃত হচ্ছে কি না দেখুন -- সব ডিপেন্ডেন্সি `npm install` দিয়ে ইনস্টল হয়েছে কি না যাচাই করুন +- পোর্ট ইতিমধ্যে অন্যত্র ব্যবহৃত কিনা দেখুন +- সব নির্ভরশীলতা `npm install` দিয়ে ইনস্টল করুন -**ব্রাউজার এক্সটেনশন লোড হয় না**: -- manifest.json সঠিক ফরম্যাটে আছে কি না পরীক্ষা করুন -- ব্রাউজার কনসোলে ত্রুটি দেখুন -- ব্রাউজার নির্দিষ্ট এক্সটেনশন ইনস্টলেশন নির্দেশিকা অনুসরণ করুন +**ব্রাউজার এক্সটেনশন লোড হয় না**: +- manifest.json সঠিক ফরম্যাটে আছে কিনা যাচাই করুন +- ব্রাউজার কনসোলে ত্রুটি আছে কিনা দেখুন +- ব্রাউজার-নির্দিষ্ট এক্সটেনশন ইনস্টলেশন নির্দেশিকা অনুসরণ করুন -**Python চ্যাট প্রকল্প সমস্যা**: -- OpenAI প্যাকেজ ইনস্টল করুন: `pip install openai` -- GITHUB_TOKEN পরিবেশ ভেরিয়েবল সেট আছে নিশ্চিত করুন -- GitHub Models অ্যাক্সেস অনুমতি পরীক্ষা করুন +**পাইথন চ্যাট প্রজেক্ট সমস্যা**: +- OpenAI প্যাকেজ ইনস্টল আছে কিনা নিশ্চিত করুন: `pip install openai` +- GITHUB_TOKEN পরিবেশ পরিবর্তনশীল সেট আছে কিনা দেখুন +- GitHub Models অ্যাক্সেস অনুমতি যাচাই করুন -**Docsify ডক সার্ভ করেনা**: +**Docsify ডকস পরিবেশন করছে না**: - গ্লোবালি docsify-cli ইনস্টল করুন: `npm install -g docsify-cli` -- রিপোজিটরি রুট ডিরেক্টরি থেকে চালান -- `docs/_sidebar.md` আছে কিনা দেখুন +- রেপোজিটরি রুট থেকে চালান +- `docs/_sidebar.md` আছে কিনা চেক করুন -### ডেভেলপমেন্ট এনভায়রনমেন্ট টিপস +### ডেভেলপমেন্ট পরিবেশ টিপস -- HTML প্রকল্পে VS Code এর Live Server এক্সটেনশন ব্যবহার করুন -- সামঞ্জস্যপূর্ণ ফরম্যাটিংয়ের জন্য ESLint ও Prettier এক্সটেনশন ইনস্টল করুন -- JavaScript ডিবাগিংয়ের জন্য ব্রাউজার DevTools ব্যবহার করুন -- Vue প্রকল্পে Vue DevTools ব্রাউজার এক্সটেনশন ইনস্টল করুন +- HTML প্রজেক্টের জন্য VS Code লাইভ সার্ভার এক্সটেনশন ব্যবহার করুন +- ESLint এবং Prettier এক্সটেনশন ইনস্টল করুন সামঞ্জস্যপূর্ণ ফরম্যাটিংয়ের জন্য +- জাভাস্ক্রিপ্ট ডিবাগ করার জন্য ব্রাউজার DevTools ব্যবহার করুন +- Vue প্রজেক্টের জন্য Vue DevTools ব্রাউজার এক্সটেনশন ইনস্টল করুন -### পারফরমেন্স বিবেচনা +### কর্মক্ষমতার বিবেচনা -- অনুবাদের বড় সংখ্যা (৫০+ ভাষা) মানে সম্পূর্ণ ক্লোন বড় হয় -- কেবল বিষয়বস্তু নিয়ে কাজ করলে শ্যালো ক্লোন ব্যবহার করুন: `git clone --depth 1` -- ইংরেজি কাজ করার সময় অনুবাদ খোঁজ থেকে বাদ দিন -- বিল্ড প্রক্রিয়া প্রথমবার ধীর হতে পারে (npm install, Vite build) +- অনুবাদের সংখ্যা অনেক বেশি (৫০+ ভাষা), তাই সম্পূর্ণ ক্লোন বড় হয় +- শুধুমাত্র বিষয়বস্তুতে কাজ করলে shallow clone ব্যবহার করুন: `git clone --depth 1` +- ইংরেজি বিষয়বস্তুতে কাজ করার সময় অনুবাদগুলি অনুসন্ধান থেকে বাদ দিন +- প্রথম রান-এ বিল্ড প্রক্রিয়া ধীর হতে পারে (npm install, Vite build) -## নিরাপত্তা বিষয়সমূহ +## নিরাপত্তা বিবেচনা -### পরিবেশ ভেরিয়েবল +### পরিবেশ পরিবর্তনশীল -- API কী কখনো রিপোজিটরিতে কমিট করবেন না -- `.env` ফাইল ব্যবহার করুন (আগেই `.gitignore` এ আছে) -- প্রয়োজনীয় পরিবেশ ভেরিয়েবল প্রকল্প README-তে ডকুমেন্ট করুন +- API কী কখনো রেপোজিটরিতে কমিট করবেন না +- `.env` ফাইল ব্যবহার করুন (যা `.gitignore` তে রয়েছে) +- প্রয়োজনীয় পরিবেশ পরিবর্তনশীল প্রকল্প README তে ডকুমেন্ট করুন -### Python প্রকল্পসমূহ +### পাইথন প্রজেক্টসমূহ -- ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করুন: `python -m venv venv` -- ডিপেন্ডেন্সি আপডেট রাখুন -- GitHub টোকেনগুলোর ন্যূনতম প্রয়োজনীয় অনুমতি থাকা উচিত +- ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করুন: `python -m venv venv` +- নির্ভরশীলতা আপডেট রাখুন +- GitHub টোকেনের জন্য ন্যূনতম অনুমতি দিন -### GitHub Models অ্যাক্সেস +### GitHub মডেল অ্যাক্সেস -- GitHub Models ব্যবহারের জন্য Personal Access Tokens (PAT) প্রয়োজন -- টোকেনগুলো পরিবেশ ভেরিয়েবল হিসেবে সংরক্ষণ করুন -- টোকেন বা ক্রেডেনশিয়াল কখনো কমিট করবেন না +- GitHub মডেলের জন্য পার্সোনাল অ্যাক্সেস টোকেন (PAT) প্রয়োজন +- টোকেন পরিবেশ পরিবর্তনশীল হিসেবে সংরক্ষণ করুন +- কখনো টোকেন বা ক্রেডেনশিয়াল কমিট করবেন না ## অতিরিক্ত নোট ### লক্ষ্য শ্রোতা -- সম্পূর্ণ নবীনদের জন্য যারা ওয়েব ডেভেলপমেন্ট শুরু করছেন -- শিক্ষার্থী ও স্বশিক্ষার্থীরা -- শ্রেণিকক্ষে কারিকুলাম ব্যবহারকারী শিক্ষকরা -- প্রবেশগম্যতা এবং ধাপে ধাপে দক্ষতা অর্জনের জন্য ডিজাইন করা বিষয়বস্তু +- সম্পূর্ণ শুরু থেকে ওয়েব ডেভেলপমেন্ট শিখতে ইচ্ছুক +- ছাত্র ও স্ব-শিক্ষার্থী +- শ্রেণিকক্ষে পাঠক্রম ব্যবহারকারী শিক্ষকগণ +- বিষয়বস্তুটি অ্যাক্সেসিবিলিটি এবং ধাপে ধাপে দক্ষতা গড়ে তোলার জন্য ডিজাইন করা হয়েছে -### শিক্ষাদর্শন +### শিক্ষামূলক দার্শনিকতা -- প্রকল্প-ভিত্তিক শেখার পদ্ধতি -- ঘন ঘন জ্ঞান যাচাই (কুইজ) -- হাতে-কলমে কোডিং অনুশীলন -- বাস্তব জীবনের প্রয়োগের উদাহরণ -- ফ্রেমওয়ার্কের আগে মৌলিক বিষয়গুলোর উপর কেন্দ্রিত +- প্রজেক্ট-ভিত্তিক শিক্ষা পদ্ধতি +- নিয়মিত জ্ঞান যাচাই (কুইজ) +- হাতে কোডিং অনুশীলন +- বাস্তব-জগতের প্রয়োগ উদাহরণ +- ফ্রেমওয়ার্কের আগে মৌলিক বিষয়গুলিতে ফোকাস -### রিপোজিটরি রক্ষণাবেক্ষণ +### রেপোজিটরি রক্ষণাবেক্ষণ -- সক্রিয় শিক্ষার্থী এবং অবদানকারীদের কমিউনিটি -- ডিপেন্ডেন্সি ও বিষয়বস্তু নিয়মিত আপডেট হয় -- ইস্যু ও আলোচনা মেইনটেনার দ্বারা পর্যবেক্ষণ করা হয় -- অনুবাদ আপডেটগুলো GitHub Actions দ্বারা স্বয়ংক্রিয় +- সক্রিয় শিক্ষার্থী ও অবদানকারীদের কমিউনিটি +- নির্ভরশীলতা ও বিষয়বস্তু নিয়মিত আপডেট +- রক্ষণাবেক্ষক দ্বারা সমস্যা ও আলোচনা মনিটর করা হয় +- অনুবাদের আপডেট স্বয়ংক্রিয়ভাবে GitHub Actions ব্যবহার করে -### সম্পর্কিত রিসোর্স +### সংশ্লিষ্ট রিসোর্স -- [Microsoft Learn modules](https://docs.microsoft.com/learn/) -- [Student Hub resources](https://docs.microsoft.com/learn/student-hub/) -- শিক্ষার্থীদের জন্য সুপারিশকৃত [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) -- অতিরিক্ত কোর্সসমূহ: জেনারেটিভ AI, ডেটা সায়েন্স, এমএল, IoT কারিকুলাম উপলব্ধ +- [Microsoft Learn মডিউলস](https://docs.microsoft.com/learn/) +- [Student Hub রিসোর্স](https://docs.microsoft.com/learn/student-hub/) +- শিক্ষার্থীদের জন্য প্রস্তাবিত [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) +- অতিরিক্ত কোর্স: Generative AI, Data Science, ML, IoT পাঠক্রম উপলব্ধ -### নির্দিষ্ট প্রকল্পে কাজ করা +### নির্দিষ্ট প্রজেক্টের সাথে কাজ -বিভিন্ন প্রকল্পের বিস্তারিত নির্দেশনার জন্য সংশ্লিষ্ট README ফাইল দেখুন: -- `quiz-app/README.md` - Vue 3 কুইজ অ্যাপ্লিকেশন -- `7-bank-project/README.md` - অথেনটিকেশনসহ ব্যাংকিং অ্যাপ্লিকেশন +বিস্তারিত নির্দেশনার জন্য প্রতিটি প্রজেক্টের README ফাইল দেখুন: +- `quiz-app/README.md` - Vue 3 কুইজ অ্যাপ +- `7-bank-project/README.md` - প্রমাণীকরণসহ ব্যাংকিং অ্যাপ্লিকেশন - `5-browser-extension/README.md` - ব্রাউজার এক্সটেনশন ডেভেলপমেন্ট - `6-space-game/README.md` - ক্যানভাস-ভিত্তিক গেম ডেভেলপমেন্ট -- `9-chat-project/README.md` - AI চ্যাট সহকারী প্রকল্প +- `9-chat-project/README.md` - AI চ্যাট অ্যাসিস্ট্যান্ট প্রজেক্ট -### মনোরিপো কাঠামো +### মনোরেপো স্ট্রাকচার -যদিও এটি একটি প্রচলিত মনোরিপো নয়, এই রিপোজিটরিতে একাধিক স্বতন্ত্র প্রকল্প আছে: -- প্রতিটি পাঠ নিজস্ব সম্পূর্ণ -- প্রকল্পগুলো ডিপেন্ডেন্সি শেয়ার করে না -- একাধিক প্রকল্প একই সাথে প্রভাবিত না করে কাজ করা যায় -- পুরো কারিকুলামের জন্য রিপো সম্পূর্ণ ক্লোন করুন +এটি প্রচলিত মনোরেপো না হলেও, এই রেপোজিটরিতে একাধিক স্বাধীন প্রজেক্ট রয়েছে: +- প্রতিটি লেসন স্বতন্ত্র +- প্রজেক্টগুলি নির্ভরশীলতা শেয়ার করে না +- একক প্রজেক্টে কাজ করুন অন্যদের প্রভাব না ফেলেই +- সম্পূর্ণ পাঠক্রম অভিজ্ঞতার জন্য পুরো রেপো ক্লোন করুন --- -**অস্বীকৃতি**: -এই ডকুমেন্টটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতা বজায় রাখতে চেষ্টা করলেও, স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথি তার নিজস্ব ভাষায়ই প্রামাণিক উৎস হিসেবে বিবেচিত হওয়া উচিত। জরুরি বা গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে সৃষ্ট কোন ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। +**ডিসক্লেইমার**: +এই ডকুমেন্টটি এআই অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। যদিও আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে তা অনুগ্রহ করে বিবেচনা করুন। মুল নথিটি তার নিজস্ব ভাষায় সর্বসম্মতিকৃত উৎস হিসাবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানুষের করা অনুবাদের সুপারিশ করা হয়। এই অনুবাদের ব্যবহারে কোনও ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file diff --git a/translations/bn/README.md b/translations/bn/README.md index 3a48f7745..3c2d3d349 100644 --- a/translations/bn/README.md +++ b/translations/bn/README.md @@ -10,204 +10,210 @@ [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -# নবীনদের জন্য ওয়েব ডেভেলপমেন্ট - একটি পাঠ্যক্রম +# বেগিনার্সের জন্য ওয়েব ডেভেলপমেন্ট - একটি শিক্ষাক্রম -মাইক্রোসফট ক্লাউড অ্যাডভোকেটদের দ্বারা প্রণীত ১২-সপ্তাহের সমগ্র কোর্সের মাধ্যমে ওয়েব ডেভেলপমেন্টের মৌলিক বিষয়গুলি শিখুন। ২৪টি পাঠে জাভাস্ক্রিপ্ট, CSS, এবং HTML হাতেকলমে প্রকল্প যেমন টেরারিয়াম, ব্রাউজার এক্সটেনশান এবং স্পেস গেমের মাধ্যমে বিস্তারিত আলোচনা করা হয়েছে। কুইজ, আলোচনা এবং ব্যবহারিক নিয়োগ সংযুক্ত রয়েছে। আমাদের কার্যকর প্রকল্পভিত্তিক শেখার পদ্ধতির মাধ্যমে আপনার দক্ষতা বৃদ্ধি করুন এবং জ্ঞান ধারণ ক্ষমতা উন্নত করুন। আজই আপনার কোডিং যাত্রা শুরু করুন! +Microsoft Cloud Advocates দ্বারা পরিচালিত ১২ সপ্তাহের বিস্তৃত কোর্সের মাধ্যমে ওয়েব ডেভেলপমেন্টের মৌলিক বিষয় শিখুন। ২৪টি পাঠের প্রতিটির মধ্যে JavaScript, CSS, এবং HTML নিয়ে অন্তর্ভুক্ত রয়েছে হাতে-কলমে প্রকল্প যেমন টেরারিয়াম, ব্রাউজার এক্সটেনশন এবং স্পেস গেমস। কুইজ, আলোচনা, এবং ব্যবহারিক অ্যাসাইনমেন্টে অংশগ্রহণ করুন। আমাদের কার্যকর প্রকল্প-ভিত্তিক শিক্ষা পদ্ধতির মাধ্যমে দক্ষতা বাড়ান এবং আপনার জ্ঞানের ধারণক্ষমতা উন্নত করুন। আজই আপনার কোডিং যাত্রা শুরু করুন! Azure AI Foundry Discord কমিউনিটিতে যোগ দিন [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -এই সম্পদগুলি ব্যবহার শুরু করতে এই ধাপগুলি অনুসরণ করুন: -1. **রিপোজিটরি ফর্ক করুন**: ক্লিক করুন [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) +এনিয়ে কাজ শুরু করতে নিম্নলিখিত ধাপগুলি অনুসরণ করুন: +1. **রিপোজিটরি ফোর্ক করুন**: [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) এ ক্লিক করুন 2. **রিপোজিটরি ক্লোন করুন**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -3. [**Azure AI Foundry Discord এ যোগ দিন এবং বিশেষজ্ঞ ও সহকর্মী ডেভেলপারদের সাথে পরিচিত হন**](https://discord.com/invite/ByRwuEEgH4) +3. [**Azure AI Foundry Discord এ যোগ দিন এবং বিশেষজ্ঞ ও সহকর্মী ডেভেলপারদের সঙ্গে পরিচিত হন**](https://discord.com/invite/ByRwuEEgH4) -### 🌐 মাল্টি-ল্যাঙ্গুয়েজ সাপোর্ট +### 🌐 বহু-ভাষা সমর্থন -#### GitHub Action দ্বারা সমর্থিত (স্বয়ংক্রিয় এবং সর্বদা আপডেট থাকে) +#### GitHub Action দ্বারা সমর্থিত (স্বয়ংক্রিয় এবং সর্বদা আপ-টু-ডেট) [Arabic](../ar/README.md) | [Bengali](./README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md) -> **লোকালি ক্লোন করতে চান?** - -> এই রিপোজিটরিতে ৫০+ ভাষার অনুবাদ অন্তর্ভুক্ত যা ডাউনলোডের আকার অনেক বৃদ্ধি করে। অনুবাদ ছাড়া ক্লোন করতে sparse checkout ব্যবহার করুন: +> **লোকালিতে ক্লোন করতে ইচ্ছুক?** +> +> এই রিপোজিটরিটিতে ৫০+ ভাষায় অনুবাদ অন্তর্ভুক্ত রয়েছে যা ডাউনলোড সাইজ উল্লেখযোগ্যভাবে বৃদ্ধি করে। অনুবাদ ছাড়া ক্লোন করতে স্পার্স চেকআউট ব্যবহার করুন: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` -> এটি আপনাকে কোর্স সম্পন্ন করার জন্য যা প্রয়োজন তা দ্রুত ডাউনলোড সহ দেবে। +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> +> এভাবে আপনি খুব দ্রুত ডাউনলোডের মাধ্যমে পুরো কোর্স সম্পন্ন করতে যা যা প্রয়োজন তা পাবেন। -**আপনি যদি অতিরিক্ত ভাষার সমর্থন চান তবে সেগুলি [এখানে](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md) তালিকাভুক্ত।** +**আপনি যদি অতিরিক্ত অনুবাদ ভাষাসমূহ চাইতে চান, তারা [এখানে](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md) তালিকাভুক্ত আছে** [![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) -#### 🧑‍🎓 _আপনি কি একজন ছাত্র?_ +#### 🧑‍🎓 _আপনি কি ছাত্র?_ -[**Student Hub পেইজে যান**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) যেখানে আপনি নবীনদের জন্য সম্পদ, শিক্ষার্থী প্যাক এবং এমনকি একটি ফ্রি সার্টিফিকেট ভাউচারের উপায় পাবেন। এটি এমন একটি পৃষ্ঠা যা আপনি বুকমার্ক করে মাঝে মাঝে দেখতে পারেন কারণ আমরা প্রতি মাসে সামগ্রী পরিবর্তন করি। +[**Student Hub পেজে যান**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) যেখানে আপনি মূল বিষয়, ছাত্রদের জন্য প্যাক এবং এমনকি একটি ফ্রি সার্টিফিকেট ভাউচার পাওয়ার উপায় পাবেন। এটি এমন একটি পেজ যা আপনি বুকমার্ক করে মাঝে মাঝে দেখতে চাইবেন কারণ আমরা মাসিক ভিত্তিতে বিষয়বস্তু পরিবর্তন করি। -### 📣 ঘোষণা - নতুন GitHub Copilot Agent মোড চ্যালেঞ্জগুলি সম্পন্ন করার জন্য! +### 📣 ঘোষণা - নতুন GitHub Copilot Agent মোড চ্যালেঞ্জ সম্পূর্ণ করুন! -নতুন চ্যালেঞ্জ যুক্ত হয়েছে, বেশিরভাগ অধ্যায়ে "GitHub Copilot Agent Challenge 🚀" দেখুন। এটি GitHub Copilot এবং Agent মোড ব্যবহার করে সম্পন্ন করার জন্য একটি নতুন চ্যালেঞ্জ। আপনি যদি আগে Agent মোড ব্যবহার না করে থাকেন, এটি শুধুমাত্র টেক্সট তৈরি করে না, ফাইল তৈরি ও সম্পাদনা, কমান্ড চালাতে এবং আরও অনেক কাজ করতে সক্ষম। +নতুন চ্যালেঞ্জ যুক্ত হয়েছে, বেশিরভাগ অধ্যায়ে "GitHub Copilot Agent Challenge 🚀" খুঁজুন। এটি আপনাদের জন্য GitHub Copilot এবং Agent মোড ব্যবহার করে নতুন একটি চ্যালেঞ্জ। যদি আগে Agent মোড ব্যবহার না করে থাকেন, এটি কেবল টেক্সট তৈরি করে না, এছাড়াও ফাইল তৈরি ও সম্পাদনা করতে, কমান্ড রান করতে এবং আরও অনেক কিছু করতে সক্ষম। -### 📣 ঘোষণা - _Generative AI ব্যবহার করে নতুন প্রকল্প তৈরি_ +### 📣 ঘোষণা - _Generative AI ব্যবহার করে নতুন প্রকল্প তৈরি করুন_ -নতুন AI Assistant প্রকল্প যুক্ত হয়েছে, এটি দেখুন [প্রকল্প](./9-chat-project/README.md) +নতুন AI অ্যাসিস্ট্যান্ট প্রকল্প যোগ করা হয়েছে, দেখে নিন [প্রকল্প](./9-chat-project/README.md) -### 📣 ঘোষণা - _Generative AI এর জন্য নতুন কোর্স_ সম্প্রতি প্রকাশিত হয়েছে +### 📣 ঘোষণা - _Generative AI_ জন্য জাভাস্ক্রিপ্টের নতুন শিক্ষাক্রম প্রকাশিত হয়েছে -আমাদের নতুন Generative AI কোর্স মিস করবেন না! +আমাদের নতুন Generative AI শিক্ষাক্রম মিস করবেন না! -শুরু করতে ভিজিট করুন [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) ! +শুরু করতে যান [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) ![Background](../../translated_images/bn/background.148a8d43afde5730.webp) -- মৌলিক থেকে RAG পর্যন্ত সবকিছুর পাঠ। -- GenAI এবং আমাদের সহচর অ্যাপ ব্যবহার করে ঐতিহাসিক চরিত্রদের সাথে ইন্টারঅ্যাক্ট করুন। -- মজার এবং আকর্ষণীয় বর্ণনা, আপনি সময় ভ্রমণ করবেন! +- বেসিক থেকে RAG পর্যন্ত সবকিছু কভার করে লেসন। +- GenAI এবং আমাদের কম্পানিয়ন অ্যাপ ব্যবহার করে ঐতিহাসিক চরিত্রদের সঙ্গে যোগাযোগ করুন। +- মজার এবং আকর্ষণীয় বর্ণনা, আপনি টাইম ট্রাভেল করবেন! ![character](../../translated_images/bn/character.5c0dd8e067ffd693.webp) -প্রতিটি পাঠে একটি অ্যাসাইনমেন্ট, একটি জ্ঞান যাচাই এবং একটি চ্যালেঞ্জ অন্তর্ভুক্ত রয়েছে যা আপনাকে শেখার বিষয়গুলিতে গাইড করবে যেমন: -- প্রম্পটিং এবং প্রম্পট ইঞ্জিনিয়ারিং -- টেক্সট এবং ইমেজ অ্যাপ জেনারেশন +প্রতিটি লেসনে থাকে একটি অ্যাসাইনমেন্ট, একটি জ্ঞান যাচাইকরণ এবং একটি চ্যালেঞ্জ যা আপনাকে এই বিষয়গুলো শেখার জন্য গাইড করবে: +- প্রোম্পটিং এবং প্রোম্পট ইঞ্জিনিয়ারিং +- টেক্সট এবং চিত্র অ্যাপ তৈরী - সার্চ অ্যাপস -শুরু করতে [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) এ যান! +শুরু করতে যান [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) ## 🌱 শুরু করা -> **শিক্ষকবৃন্দ**, আমরা [কিছু পরামর্শ যোগ করেছি](for-teachers.md) কীভাবে এই পাঠ্যক্রম ব্যবহার করবেন তা নিয়ে। আপনার মতামত আমরা অবশ্যই চাই [আমাদের আলোচনা ফোরামে](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)। +> **শিক্ষকবৃন্দ**, আমরা [কিছু সুপারিশ](for-teachers.md) অন্তর্ভুক্ত করেছি কিভাবে এই শিক্ষাক্রম ব্যবহার করবেন। আপনার মতামত দিতে অনুগ্রহ করে আমাদের [আলোচনা ফোরামে](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner) যোগ দিন! -**[শিক্ষার্থী](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, প্রতিটি পাঠের জন্য, একটি প্রি-লেকচার কুইজ দিয়ে শুরু করুন এবং লেকচার ম্যাটিরিয়াল পড়ুন, বিভিন্ন কার্যকলাপ সম্পন্ন করুন এবং পোস্ট-লেকচার কুইজ দিয়ে আপনার বোঝাপড়া পরীক্ষা করুন। +**[শিক্ষানবিসগণ](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, প্রতিটি লেসনের জন্য, একটি প্রি-লেকচার কুইজ দিয়ে শুরু করুন এবং পড়ুন লেকচারের উপকরণ, নানা কার্যক্রম সম্পন্ন করুন এবং পোস্ট-লেকচার কুইজের মাধ্যমে আপনার বোঝাপড়া যাচাই করুন। -আপনার শেখার অভিজ্ঞতা বাড়াতে, আপনার সহপাঠীদের সাথে একসাথে প্রকল্পগুলো নিয়ে কাজ করতে সংযুক্ত হোন! আলোচনা করার জন্য আমাদের [আলোচনা ফোরাম](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) এ উৎসাহিত করা হয় যেখানে আমাদের মডারেটর টিম আপনার প্রশ্নের উত্তর দিতে থাকবে। +আপনার শেখার অভিজ্ঞতা উন্নত করতে, আপনার সহপাঠীদের সঙ্গে সংযুক্ত হোন এবং একসাথে প্রকল্পে কাজ করুন! আমাদের [আলোচনা ফোরামে](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) আলোচনা উৎসাহিত করা হয় যেখানে আমাদের মধ্যস্থতাকারীদের একটি দল থাকবে যারা আপনার প্রশ্নের উত্তর দেবেন। -আপনার শিক্ষাকে আরো বাড়ানোর জন্য, আমরা অত্যন্ত সুপারিশ করি [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) এ অতিরিক্ত অধ্যয়ন সামগ্রী অন্বেষণ করতে। +আপনার শিক্ষাকে আরো বাড়াতে, আমরা অত্যন্ত সুপারিশ করছি [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) পর্যালোচনা করার জন্য অতিরিক্ত অধ্যয়ন উপকরণ। ### 📋 আপনার পরিবেশ সেটআপ করা -এই পাঠ্যক্রমের একটি ডেভেলপমেন্ট পরিবেশ প্রস্তুত রয়েছে! আপনি শুরু করার সময় আপনি এই পাঠ্যক্রম [Codespace](https://github.com/features/codespaces/) (_একটি ব্রাউজার-ভিত্তিক, কোনও ইনস্টলেশন ছাড়াই পরিবেশ_) বা আপনার কম্পিউটারে [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) এর মত একটি টেক্সট এডিটর ব্যবহার করে চালাতে পারেন। +এই শিক্ষাক্রমের জন্য একটি ডেভেলপমেন্ট পরিবেশ প্রস্তুত আছে! আপনি শুরু করার সময় আপনি অবশ্যই [Codespace](https://github.com/features/codespaces/) (_ব্রাউজার ভিত্তিক, ইনস্টলেশন ছাড়াই পরিবেশ_), অথবা আপনার নিজের কম্পিউটারে একটি টেক্সট এডিটর যেমন [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) ব্যবহার করে চালাতে পারেন। #### আপনার রিপোজিটরি তৈরি করুন -আপনার কাজ সহজে সংরক্ষণ করার জন্য, আপনার নিজস্ব একটি কপি এই রিপোজিটরির তৈরি করা সুপারিশ করা হয়। এটি করতে আপনি পৃষ্ঠার উপরের দিকের **Use this template** বোতামে ক্লিক করতে পারেন। এতে আপনার GitHub অ্যাকাউন্টে পাঠ্যক্রমের একটি অনুলিপি সহ নতুন রিপোজিটরি তৈরি হবে। +আপনার কাজ সহজে সংরক্ষণের জন্য, এটি সুপারিশ করা হয় যে আপনি এই রিপোজিটরির একটি কপি তৈরি করুন। এটি করতে পারেন পেইজের উপরের দিকের **Use this template** বাটনে ক্লিক করে। এটি আপনার GitHub অ্যাকাউন্টে শিক্ষাক্রমের একটি কপি সহ একটি নতুন রিপোজিটরি তৈরি করবে। -এই ধাপগুলি অনুসরণ করুন: -1. **রিপোজিটরি ফর্ক করুন**: এই পৃষ্ঠার উপরের ডানদিকে কোণে "Fork" বোতামে ক্লিক করুন। +নিম্নলিখিত ধাপ অনুসরণ করুন: +1. **রিপোজিটরি ফোর্ক করুন**: পেইজের উপরের-ডান কোণে "Fork" বাটনে ক্লিক করুন। 2. **রিপোজিটরি ক্লোন করুন**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -#### Codespace এ পাঠ্যক্রম চালানো +#### Codespace এ শিক্ষাক্রম চালানো -আপনি যে রিপোজিটরির কপি তৈরি করেছেন সেখানে **Code** বোতামে ক্লিক করুন এবং **Open with Codespaces** নির্বাচন করুন। এটি আপনার কাজের জন্য একটি নতুন Codespace তৈরি করবে। +আপনি যে কপি তৈরি করেছেন সেখান থেকে **Code** বাটনে ক্লিক করুন এবং **Open with Codespaces** নির্বাচন করুন। এটি আপনার কাজের জন্য একটি নতুন Codespace তৈরি করবে। ![Codespace](../../translated_images/bn/createcodespace.0238bbf4d7a8d955.webp) -#### আপনার কম্পিউটারে লোকালি পাঠ্যক্রম চালানো +#### আপনার কম্পিউটারে লোকালি শিক্ষাক্রম চালানো -আপনার কম্পিউটারে লোকালি পাঠ্যক্রম চালাতে, আপনার একটি টেক্সট এডিটর, একটি ব্রাউজার এবং একটি কমান্ড লাইন টুল প্রয়োজন। আমাদের প্রথম পাঠ, [Introduction to Programming Languages and Tools of the Trade](../../1-getting-started-lessons/1-intro-to-programming-languages), আপনাকে প্রতিটি সরঞ্জামের বিভিন্ন অপশন সম্পর্কে পথ দেখাবে যেন আপনি নিজের জন্য সেরা নির্বাচন করতে পারেন। +আপনার কম্পিউটারে লোকালি শিক্ষাক্রম চালানোর জন্য একটি টেক্সট এডিটর, একটি ব্রাউজার এবং একটি কমান্ড লাইন টুল দরকার। আমাদের প্রথম লেসন, [প্রোগ্রামিং ভাষা ও ট্রেডের সরঞ্জাম পরিচিতি](../../1-getting-started-lessons/1-intro-to-programming-languages), আপনাকে বিভিন্ন বিকল্প নিয়ে গাইড করবে যাতে আপনি যা সবচেয়ে ভালো মনে করেন তা নির্বাচন করতে পারবেন। -আমাদের সুপারিশ হল [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) ব্যবহার করা, যেটিতে একটি অন্তর্নির্মিত [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) রয়েছে। আপনি Visual Studio Code [এখানে](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) থেকে ডাউনলোড করতে পারেন। - - -1. আপনার রিপোজিটরিটি আপনার কম্পিউটারে ক্লোন করুন। এটি করতে আপনি **Code** বোতামে ক্লিক করে URL কপি করতে পারেন: +আমাদের সুপারিশ হলো [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) ব্যবহার করা, যা একটি বিল্ট-ইন [টার্মিনাল](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) অফার করে। Visual Studio Code ডাউনলোড করতে পারেন [এখানে](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)। +1. আপনার রিপোজিটরি আপনার কম্পিউটারে ক্লোন করুন। আপনি এটি করতে পারেন **Code** বোতামে ক্লিক করে এবং URL কপি করে: [CodeSpace](./images/createcodespace.png) -তাহলে, [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) এর ভিতরে [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) খুলুন এবং নিম্নলিখিত কমান্ডটি চালান, যেখানে `` আপনি যেই URLটি কপি করেছেন সেটির সাথে প্রতিস্থাপন করবেন: + + তারপর, [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) এর ভিতরে [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) খুলুন এবং নিম্নলিখিত কমান্ডটি চালান, `` এর জায়গায় আপনি যেই URL কপি করেছেন তা বসান: ```bash git clone ``` -2. Visual Studio Code এ ফোল্ডারটি খুলুন। আপনি এটি করতে পারেন **File** > **Open Folder** ক্লিক করে এবং আপনি যেই ফোল্ডারটি ক্লোন করেছেন সেটি নির্বাচন করে। - +2. Visual Studio Code এ ফোল্ডারটি খুলুন। আপনি এটি করতে পারেন **File** > **Open Folder** ক্লিক করে এবং যেই ফোল্ডারটি আপনি ক্লোন করেছেন তা নির্বাচন করে। -> সুপারিশকৃত Visual Studio Code এক্সটেনশনসমূহ: +> নির্দেশিত Visual Studio Code এক্সটেনশনসমূহ: > -> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - Visual Studio Code এর ভিতরে HTML পেজের পূর্বরূপ দেখতে -> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - দ্রুত কোড লেখার জন্য সাহায্য করতে +> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - Visual Studio Code এর ভিতরে HTML পেজ প্রিভিউ করতে +> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - কোড লেখার গতি বাড়াতে সাহায্য করার জন্য ## 📂 প্রতিটি পাঠ অন্তর্ভুক্ত করে: - ঐচ্ছিক স্কেচনোট -- ঐচ্ছিক সহায়ক ভিডিও -- পাঠের আগে ওয়ার্মআপ কুইজ +- ঐচ্ছিক পরিপূরক ভিডিও +- পূর্ব-পাঠ ওয়ার্মআপ কুইজ - লিখিত পাঠ -- প্রকল্প-ভিত্তিক পাঠগুলোর জন্য, প্রকল্প নির্মাণের ধাপে ধাপে নির্দেশিকা -- জ্ঞান পরীক্ষা +- প্রকল্প-ভিত্তিক পাঠের জন্য, ধাপে ধাপে গাইড যে প্রকল্পটি কীভাবে তৈরি করতে হয় +- জ্ঞান যাচাই - একটি চ্যালেঞ্জ -- সহায়ক পাঠ্য -- নিয়োগ -- [পাঠোত্তপর কুইজ](https://ff-quizzes.netlify.app/web/) +- পরিপূরক পাঠ +- অ্যাসাইনমেন্ট +- [পোস্ট-পাঠ কুইজ](https://ff-quizzes.netlify.app/web/) -> **কুইজ সম্পর্কিত একটি নোট**: সমস্ত কুইজ Quiz-app ফোল্ডারে রয়েছে, মোট ৪৮টি কুইজ প্রতিটিতে তিনটি প্রশ্ন। সেগুলি পাওয়া যাবে [এখানে](https://ff-quizzes.netlify.app/web/), কুইজ অ্যাপটি স্থানীয়ভাবে চালানো যায় অথবা Azure এ ডিপ্লয় করা যায়; এর জন্য `quiz-app` ফোল্ডারে নির্দেশিকা অনুসরণ করুন। +> **কুইজ সম্পর্কে একটি নোট**: সব কুইজ `Quiz-app` ফোল্ডারে আছে, মোট ৪৮টি কুইজ যাদের প্রত্যেকটি তিনটি প্রশ্ন নিয়ে গঠিত। এগুলো [এখানে](https://ff-quizzes.netlify.app/web/) পাওয়া যায় এবং কুইজ অ্যাপটি লোকালি চালানো যেতে পারে অথবা Azure তে ডেপ্লয় করা যেতে পারে; `quiz-app` ফোল্ডারের মধ্যে নির্দেশনা অনুসরণ করুন। ## 🗃️ পাঠসমূহ -| | প্রকল্পের নাম | শেখানো বিষয়সমূহ | শেখার উদ্দেশ্য | সংশ্লিষ্ট পাঠ | লেখক | -| :-: | :------------------------------------------------------: | :--------------------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------ | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | -| 01 | শুরু করা হচ্ছে | প্রোগ্রামিং পরিচিতি এবং সরঞ্জামের আলোচনা | অধিকাংশ প্রোগ্রামিং ভাষার মৌলিক ভিত্তি এবং পেশাদার ডেভেলপারদের কাজ সহজ করতে ব্যবহৃত সফটওয়্যার সম্পর্কে শেখা | [Intro to Programming Languages and Tools of the Trade](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | -| 02 | শুরু করা হচ্ছে | গিটহাবের বুনিয়াদি, টিমের সাথে কাজ করা অন্তর্ভুক্ত | আপনার প্রকল্পে গিটহাব ব্যবহার করা, কীভাবে কোডবেইজে অন্যদের সাথে সহযোগিতা করবেন শেখা | [Intro to GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | -| 03 | শুরু করা হচ্ছে | প্রবেশযোগ্যতা | ওয়েব প্রবেশযোগ্যতার মৌলিক বিষয়গুলি শেখা | [Accessibility Fundamentals](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | -| 04 | JS বেসিকস | JavaScript ডেটা টাইপসমূহ | JavaScript ডেটা টাইপের মৌলিক বিষয়গুলি | [Data Types](./2-js-basics/1-data-types/README.md) | Jasmine | -| 05 | JS বেসিকস | ফাংশন এবং মেথডসমূহ | একটি অ্যাপ্লিকেশনের লজিক ফ্লো পরিচালনার জন্য ফাংশন এবং মেথড সম্পর্কে শেখা | [Functions and Methods](./2-js-basics/2-functions-methods/README.md) | Jasmine এবং Christopher | -| 06 | JS বেসিকস | JS দিয়ে সিদ্ধান্ত নেওয়া | কিভাবে আপনার কোডে শর্ত তৈরি করবেন সিদ্ধান্ত গ্রহণ পদ্ধতি ব্যবহার করে শেখা | [Making Decisions](./2-js-basics/3-making-decisions/README.md) | Jasmine | -| 07 | JS বেসিকস | অ্যারে এবং লুপ | JavaScript এ অ্যারে এবং লুপ ব্যবহার করে ডেটার সাথে কাজ করা | [Arrays and Loops](./2-js-basics/4-arrays-loops/README.md) | Jasmine | -| 08 | [টেরারিয়াম](./3-terrarium/solution/README.md) | HTML অনুশীলনে | অনলাইন টেরারিয়াম তৈরির জন্য HTML নির্মাণ, বিন্যাস নির্মাণে গুরুত্ব দেওয়া | [Introduction to HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | -| 09 | [টেরারিয়াম](./3-terrarium/solution/README.md) | CSS অনুশীলনে | অনলাইন টেরারিয়ামের স্টাইল করার জন্য CSS তৈরি, CSS এর মৌলিক বিষয় এবং পেজ রেসপনসিভ করা শেখা | [Introduction to CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | -| 10 | [টেরারিয়াম](./3-terrarium/solution/README.md) | JavaScript ক্লোজার, DOM ম্যানিপুলেশন | টেরারিয়ামকে ড্র্যাগ/ড্রপ ইন্টারফেস হিসেবে কাজ করানোর জন্য JavaScript নির্মাণ, ক্লোজার এবং DOM ম্যানিপুলেশনে গুরুত্ব দেওয়া | [JavaScript Closures, DOM manipulation](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | -| 11 | [টাইপিং গেম](./4-typing-game/solution/README.md) | একটি টাইপিং গেম তৈরি | কিবোর্ড ইভেন্ট ব্যবহার করে কিভাবে আপনার JavaScript অ্যাপের লজিক চালানো হয় শিখুন | [Event-Driven Programming](./4-typing-game/typing-game/README.md) | Christopher | -| 12 | [গ্রিন ব্রাউজার এক্সটেনশন](./5-browser-extension/solution/README.md) | ব্রাউজারের সাথে কাজ | ব্রাউজার কিভাবে কাজ করে, তার ইতিহাস এবং ব্রাউজার এক্সটেনশনের প্রথম উপাদান তৈরি করা শেখা | [About Browsers](./5-browser-extension/1-about-browsers/README.md) | Jen | -| 13 | [গ্রিন ব্রাউজার এক্সটেনশন](./5-browser-extension/solution/README.md) | ফর্ম তৈরি, API কল এবং স্থানীয় স্টোরেজে ভেরিয়েবল সংরক্ষণ | API কল করার জন্য আপনার ব্রাউজার এক্সটেনশনের JavaScript উপাদান তৈরি করুন, স্থানীয় স্টোরেজে সংরক্ষিত ভেরিয়েবল ব্যবহার করে | [APIs, Forms, and Local Storage](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | -| 14 | [গ্রিন ব্রাউজার এক্সটেনশন](./5-browser-extension/solution/README.md) | ব্রাউজারের ব্যাকগ্রাউন্ড প্রসেস, ওয়েব পারফরমেন্স | এক্সটেনশনের আইকন পরিচালনার জন্য ব্রাউজারের ব্যাকগ্রাউন্ড প্রসেস ব্যবহার করুন; ওয়েব পারফরমেন্স এবং কিছু অপ্টিমাইজেশন সম্পর্কে শেখা | [Background Tasks and Performance](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | -| 15 | [স্পেস গেম](./6-space-game/solution/README.md) | JavaScript দিয়ে আরও উন্নত গেম ডেভেলপমেন্ট | ক্লাস এবং কম্পোজিশন উভয় ব্যবহার করে ইনহেরিটেন্স এবং পাব/সাব প্যাটার্ন শেখা, একটি গেম নির্মাণের জন্য প্রস্তুতি | [Introduction to Advanced Game Development](./6-space-game/1-introduction/README.md) | Chris | -| 16 | [স্পেস গেম](./6-space-game/solution/README.md) | ক্যানভাসে ড্রয়িং | স্ক্রীনে এলিমেন্ট আঁকার জন্য ব্যবহৃত Canvas API সম্পর্কে শেখা | [Drawing to Canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | -| 17 | [স্পেস গেম](./6-space-game/solution/README.md) | স্ক্রীনের চারপাশে এলিমেন্ট সরানো | কিভাবে কার্তেসিয়ান কোঅর্ডিনেট এবং Canvas API ব্যবহার করে এলিমেন্টগুলোকে মুভ করানো যায় শেখা | [Moving Elements Around](./6-space-game/3-moving-elements-around/README.md) | Chris | -| 18 | [স্পেস গেম](./6-space-game/solution/README.md) | সংঘর্ষ শনাক্তকরণ | কীপ্রেস ব্যবহার করে এলিমেন্টগুলোকে সংঘর্ষ করানো এবং একে অপরের প্রতি প্রতিক্রিয়া দেখানো; গেমের পারফরমেন্স নিশ্চিত করতে কুলডাউন ফাংশন ব্যবহার করা | [Collision Detection](./6-space-game/4-collision-detection/README.md) | Chris | -| 19 | [স্পেস গেম](./6-space-game/solution/README.md) | স্কোর রাখা | গেমের পরিস্থিতি ও পারফরমেন্সের ওপর ভিত্তি করে গণিতের হিসাব-নিকাশ করা | [Keeping Score](./6-space-game/5-keeping-score/README.md) | Chris | -| 20 | [স্পেস গেম](./6-space-game/solution/README.md) | গেম শেষ করা এবং পুনরায় শুরু করা | গেম শেষ করা এবং পুনরায় শুরু করার বিষয়ে শেখা, সম্পদ পরিষ্কার করা এবং ভেরিয়েবলের মান রিসেট করা | [The Ending Condition](./6-space-game/6-end-condition/README.md) | Chris | -| 21 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | ওয়েব অ্যাপে HTML টেমপ্লেট এবং রাউটসমূহ | মাল্টিপেজ ওয়েবসাইট আর্কিটেকচারের স্ক্যাফোল্ড তৈরি করা শিখুন রাউটিং এবং HTML টেমপ্লেট ব্যবহার করে | [HTML Templates and Routes](./7-bank-project/1-template-route/README.md) | Yohan | -| 22 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | লগইন এবং রেজিস্ট্রেশন ফর্ম তৈরি | ফর্ম তৈরি এবং যাচাইকরণ পদ্ধতি সম্পর্কে শেখা | [Forms](./7-bank-project/2-forms/README.md) | Yohan | -| 23 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | ডেটা সংগ্রহ এবং ব্যবহারের পদ্ধতি | আপনার অ্যাপের ভিতরে ও বাইরে ডেটার প্রবাহ, কিভাবে তা সংগ্রহ, সংরক্ষণ এবং মুছে ফেলা যায় শিখুন | [Data](./7-bank-project/3-data/README.md) | Yohan | -| 24 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | স্টেট ম্যানেজমেন্ট ধারণা | আপনার অ্যাপ কিভাবে অবস্থা ধরে রাখে এবং প্রোগ্রাম্যাটিকভাবে তা কিভাবে পরিচালনা করবেন শেখা | [State Management](./7-bank-project/4-state-management/README.md) | Yohan | -| 25 | [ব্রাউজার/VScode কোড](../../8-code-editor) | VScode এর সাথে কাজ করা | কোড এডিটর ব্যবহার শিখুন | [Use VScode Code Editor](./8-code-editor/1-using-a-code-editor/README.md) | Chris | -| 26 | [AI সহকারী](./9-chat-project/README.md) | AI এর সাথে কাজ করা | নিজের AI সহকারী তৈরি শেখা | [AI Assistant project](./9-chat-project/README.md) | Chris | - -## 🏫 শিক্ষণশাস্ত্র - -আমাদের পাঠ্যক্রম দুইটি মূল শিক্ষণ নীতির ভিত্তিতে ডিজাইন করা হয়েছে: -* প্রকল্প-ভিত্তিক শিক্ষা -* ঘন ঘন কুইজ পরীক্ষা - -এই প্রোগ্রামটি JavaScript, HTML এবং CSS এর মৌলিক বিষয় শেখায়, পাশাপাশি বর্তমান ওয়েব ডেভেলপাররা যেসব সরঞ্জাম ও প্রযুক্তি ব্যবহার করে তা শেখায়। ছাত্ররা টাইপিং গেম, ভার্চুয়াল টেরারিয়াম, পরিবেশবান্ধব ব্রাউজার এক্সটেনশন, স্পেস ইনভেডার ধরণের গেম এবং ব্যবসার জন্য একটি ব্যাংকিং অ্যাপ তৈরি করে হাতে কলমে অভিজ্ঞতা অর্জনের সুযোগ পাবে। সিরিজের শেষে, শিক্ষার্থীরা ওয়েব ডেভেলপমেন্ট সম্পর্কে একটি শক্তিশালী ধারণা লাভ করবে। - -> 🎓 আপনি এই পাঠ্যক্রমের প্রথম কয়েকটি পাঠ Microsoft Learn এ একটি [Learn Path](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) হিসেবে নিতে পারেন! - -বিষয়বস্তু প্রকল্পের সাথে সামঞ্জস্যপূর্ণ করার মাধ্যমে, শিক্ষার্থীদের জন্য প্রক্রিয়াটি আরও আকর্ষণীয় হয় এবং ধারণাগুলোর স্মরণীয়তা বৃদ্ধি পায়। আমরা JavaScript বেসিকসের কয়েকটি প্রাথমিক পাঠও লিখেছি ধারণাগুলো পরিচয় করানোর জন্য, "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" ভিডিও টিউটোরিয়াল সংগ্রহ থেকে একটি ভিডিওসহ, যাদের মধ্যে কিছু লেখক এই পাঠ্যক্রমে অবদান রেখেছেন। - -তদুপরি, একটি ক্লাসের আগে হালকা স্তরের কুইজ শিক্ষার্থীর শেখার প্রতিশ্রুতি স্থাপন করে, এবং ক্লাসের পর একটি দ্বিতীয় কুইজ আরও স্মরণীয়তা নিশ্চিত করে। এই পাঠ্যক্রমটি নমনীয় এবং মজাদার করার জন্য ডিজাইন করা হয়েছে এবং সম্পূর্ণ অথবা আংশিক অংশগ্রহণ করা যায়। প্রকল্পগুলো ছোট থেকে শুরু করে ১২ সপ্তাহের চক্র শেষে ক্রমশ জটিল হয়ে ওঠে। - -যেহেতু আমরা সচেতনভাবে JavaScript ফ্রেমওয়ার্ক পরিচিতি এড়িয়েছি যাতে ওয়েব ডেভেলপার হিসেবে মৌলিক দক্ষতা অর্জনে মনোযোগ দিতে পারি ফ্রেমওয়ার্ক গৃহীত করার আগে, তাই এই পাঠ্যক্রম শেষ করার পর পরবর্তী ভালো পদক্ষেপ হতে পারে Node.js সম্পর্কে শেখা, অন্য একটি ভিডিও সংগ্রহের মাধ্যমে: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". - -> আমাদের [আচরণবিধি](CODE_OF_CONDUCT.md) এবং [অবদান](CONTRIBUTING.md) নির্দেশিকা দেখুন। আমরা আপনার গঠনমূলক প্রতিক্রিয়াকে স্বাগত জানাই! - +| | প্রকল্পের নাম | শেখানো ধারণাসমূহ | শেখার উদ্দেশ্য | লিঙ্ক করা পাঠ | লেখক | +| :-: | :------------------------------------------------------: | :--------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :-------------------: | +| 01 | শুরু করা | প্রোগ্রামিং এবং ট্রেড টুলসের পরিচিতি | অধিকাংশ প্রোগ্রামিং ভাষার মৌলিক ধারণা এবং সফটওয়্যার সম্পর্কে জানুন যা পেশাদার ডেভেলপারদের কাজে সাহায্য করে | [Intro to Programming Languages and Tools of the Trade](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | +| 02 | শুরু করা | GitHub এর মৌলিক বিষয়, একটি টিমের সাথে কাজ করা | GitHub আপনার প্রকল্পে কীভাবে ব্যবহার করবেন, এবং কিভাবে অন্যদের সাথে কোড বেসে সহযোগিতা করবেন | [Intro to GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | +| 03 | শুরু করা | অ্যাকসেসিবিলিটি | ওয়েব অ্যাক্সেসিবিলিটির মৌলিক বিষয় শিখুন | [Accessibility Fundamentals](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | +| 04 | JS মৌলিক | JavaScript ডেটা টাইপ | JavaScript ডেটা টাইপের মৌলিক বিষয় | [Data Types](./2-js-basics/1-data-types/README.md) | Jasmine | +| 05 | JS মৌলিক | ফাংশন এবং মেথড | অ্যাপ্লিকেশনের লজিক নিয়ন্ত্রণ করার জন্য ফাংশন এবং মেথড সম্পর্কে শিখুন | [Functions and Methods](./2-js-basics/2-functions-methods/README.md) | Jasmine and Christopher | +| 06 | JS মৌলিক | JS দিয়ে সিদ্ধান্ত গ্রহণ | কোডে শর্ত তৈরি করার জন্য সিদ্ধান্ত গ্রহণ পদ্ধতি সম্পর্কে শিখুন | [Making Decisions](./2-js-basics/3-making-decisions/README.md) | Jasmine | +| 07 | JS মৌলিক | অ্যারে এবং লুপস | JavaScript এ অ্যারে এবং লুপ ব্যবহার করে ডেটার উপর কাজ করুন | [Arrays and Loops](./2-js-basics/4-arrays-loops/README.md) | Jasmine | +| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML অনুশীলন | একটি অনলাইন টেরারিয়াম তৈরি করতে HTML তৈরি করুন, মূলত লেআউট তৈরি করার উপর ফোকাস করুন | [Introduction to HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | +| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS অনুশীলন | অনলাইন টেরারিয়ামের CSS তৈরি করুন, CSS এর মৌলিক বিষয় এবং পেজকে রেসপন্সিভ করার উপরে ফোকাস করুন | [Introduction to CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | +| 10 | [Terrarium](./3-terrarium/solution/README.md) | JavaScript ক্লোজার, DOM ম্যানিপুলেশন | টেরারিয়ামকে ড্র্যাগ/ড্রপ ইন্টারফেস হিসেবে কাজ করানোর জন্য JavaScript তৈরি করুন, ক্লোজার এবং DOM ম্যানিপুলেশনের উপর ফোকাস করুন | [JavaScript Closures, DOM manipulation](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | +| 11 | [টাইপিং গেম](./4-typing-game/solution/README.md) | টাইপিং গেম তৈরি | কী-বোর্ড ইভেন্ট ব্যবহার করে JavaScript অ্যাপের লজিক ড্রাইভ করা শিখুন | [Event-Driven Programming](./4-typing-game/typing-game/README.md) | Christopher | +| 12 | [গ্রিন ব্রাউজার এক্সটেনশন](./5-browser-extension/solution/README.md) | ব্রাউজারের কাজ | ব্রাউজার কিভাবে কাজ করে, এর ইতিহাস এবং ব্রাউজার এক্সটেনশনের প্রথম উপাদানগুলো স্ক্যাফোল্ড করা শিখুন | [About Browsers](./5-browser-extension/1-about-browsers/README.md) | Jen | +| 13 | [গ্রিন ব্রাউজার এক্সটেনশন](./5-browser-extension/solution/README.md) | ফর্ম তৈরি, API কল এবং লোকাল স্টোরেজে ভেরিয়েবল সংরক্ষণ | API কল করার জন্য ব্রাউজার এক্সটেনশনের JavaScript উপাদান তৈরি করুন যা লোকাল স্টোরেজে সঞ্চিত ভেরিয়েবল ব্যবহার করে | [APIs, Forms, and Local Storage](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | +| 14 | [গ্রিন ব্রাউজার এক্সটেনশন](./5-browser-extension/solution/README.md) | ব্রাউজারের ব্যাকগ্রাউন্ড প্রসেস, ওয়েব পারফরম্যান্স | এক্সটেনশনের আইকন ম্যানেজ করার জন্য ব্রাউজারের ব্যাকগ্রাউন্ড প্রসেস ব্যবহার করুন; ওয়েব পারফরম্যান্স এবং কিছু অপ্টিমাইজেশন শিখুন | [Background Tasks and Performance](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | +| 15 | [স্পেস গেম](./6-space-game/solution/README.md) | জাভাস্ক্রিপ্ট দিয়ে উন্নত গেম ডেভেলপমেন্ট | ক্লাস এবং কম্পোজিশন ব্যবহার করে ইনহেরিটেন্স এবং পাব/সাব প্যাটার্ন সম্পর্কে শিখুন, গেম তৈরির প্রস্তুতিতে | [Introduction to Advanced Game Development](./6-space-game/1-introduction/README.md) | Chris | +| 16 | [স্পেস গেম](./6-space-game/solution/README.md) | ক্যানভাসে আঁকা | ক্যানভাস API সম্পর্কে জানুন, যা স্ক্রিনে এলিমেন্ট আঁকার জন্য ব্যবহৃত হয় | [Drawing to Canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | +| 17 | [স্পেস গেম](./6-space-game/solution/README.md) | স্ক্রিনে এলিমেন্টগুলি সরানো | কিভাবে কার্টেসিয়ান কোঅর্ডিনেট এবং ক্যানভাস API ব্যবহার করে এলিমেন্টগুলি গতি লাভ করতে পারে তা আবিষ্কার করুন | [Moving Elements Around](./6-space-game/3-moving-elements-around/README.md) | Chris | +| 18 | [স্পেস গেম](./6-space-game/solution/README.md) | সংঘর্ষ সনাক্তকরণ | কীপ্রেস ব্যবহার করে এলিমেন্টগুলিকে সংঘর্ষ করতে এবং একে অপরের সাথে প্রতিক্রিয়া করতে দিন এবং গেমের পারফরম্যান্স নিশ্চিত করতে কুলডাউন ফাংশন দিন | [Collision Detection](./6-space-game/4-collision-detection/README.md) | Chris | +| 19 | [স্পেস গেম](./6-space-game/solution/README.md) | স্কোর রাখা | গেমের অবস্থা এবং পারফরম্যান্সের উপর ভিত্তি করে গাণিতিক হিসাব নির্ণয় করুন | [Keeping Score](./6-space-game/5-keeping-score/README.md) | Chris | +| 20 | [স্পেস গেম](./6-space-game/solution/README.md) | গেম শেষ করা এবং পুনরায় শুরু করা | গেম শেষ করা এবং পুনরায় শুরু করার সম্পর্কে শিখুন, যার মধ্যে রয়েছে অ্যাসেট পরিষ্কার করা এবং ভেরিয়েবল মান রিসেট করা | [The Ending Condition](./6-space-game/6-end-condition/README.md) | Chris | +| 21 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | ওয়েব অ্যাপে HTML টেমপ্লেট এবং রাউট | রাউটিং এবং HTML টেমপ্লেট ব্যবহার করে একটি মাল্টিপেজ ওয়েবসাইটের স্থাপত্য তৈরি করতে শিখুন | [HTML Templates and Routes](./7-bank-project/1-template-route/README.md) | Yohan | +| 22 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | লগইন এবং রেজিস্ট্রেশন ফর্ম তৈরি | ফর্ম তৈরি এবং ভ্যালিডেশন রুটিন হ্যান্ডল করার ব্যাপারে শিখুন | [Forms](./7-bank-project/2-forms/README.md) | Yohan | +| 23 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | ডেটা পাওয়া এবং ব্যবহার করার পদ্ধতি | অ্যাপে কীভাবে ডেটা প্রবাহিত হয়, কীভাবে এটি আনা, সংরক্ষণ এবং নিষ্কাশন করা হয় সে সম্পর্কে জানুন | [Data](./7-bank-project/3-data/README.md) | Yohan | +| 24 | [ব্যাংকিং অ্যাপ](./7-bank-project/solution/README.md) | স্টেট ম্যানেজমেন্টের ধারণা | কীভাবে আপনার অ্যাপ স্টেট ধরে রাখে এবং কীভাবে প্রোগ্রাম্যাটিকভাবে তা নিয়ন্ত্রণ করে সে সম্পর্কে শিখুন | [State Management](./7-bank-project/4-state-management/README.md) | Yohan | +| 25 | [Browser/VScode Code](../../8-code-editor) | VScode এর সাথে কাজ করা | একটি কোড এডিটর ব্যবহার করা শিখুন| [Use VScode Code Editor](./8-code-editor/1-using-a-code-editor/README.md) | Chris | +| 26 | [AI Assistants](./9-chat-project/README.md) | AI এর সাথে কাজ করা | আপনার নিজস্ব AI সহকারী তৈরি করা শিখুন | [AI Assistant project](./9-chat-project/README.md) | Chris | + +## 🏫 পেডাগজি + +আমাদের কারিকুলাম দুটি মূল শিক্ষাগত নীতির উপর ভিত্তি করে ডিজাইন করা হয়েছে: +* প্রকল্প-ভিত্তিক শেখা +* ঘন ঘন কুইজ + +এই প্রোগ্রামটি JavaScript, HTML, এবং CSS এর মৌলিক বিষয়গুলি শেখায়, পাশাপাশি আজকের ওয়েব ডেভেলপারদের ব্যবহৃত সর্বশেষ টুল এবং প্রযুক্তি। শিক্ষার্থীরা একটি টাইপিং গেম, ভার্চুয়াল টেরারিয়াম, ইকো-ফ্রেন্ডলি ব্রাউজার এক্সটেনশন, স্পেস-ইনভেডার-স্টাইল গেম এবং ব্যবসায়ের জন্য একটি ব্যাংকিং অ্যাপ তৈরি করে হাতে কলমে অভিজ্ঞতা অর্জনের সুযোগ পাবে। সিরিজের শেষে শিক্ষার্থীরা ওয়েব ডেভেলপমেন্টের একটি দৃঢ় ধারণা অর্জন করবে। + +> 🎓 আপনি এই কারিকুলামের প্রথম কিছু পাঠ Microsoft Learn এ একটি [Learn Path](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) হিসেবে নিতে পারেন! + +কন্টেন্ট প্রকল্পের সাথে সামঞ্জস্যপূর্ণ করার মাধ্যমে, প্রক্রিয়াটি শিক্ষার্থীদের জন্য আরও আকর্ষণীয় হয় এবং ধারণাগুলোর ধারণক্ষমতা বাড়ে। আমরা JavaScript এর মৌলিক বিষয়গুলিতে কয়েকটি স্টার্টার পাঠ লিখেছি ধারণাগুলো পরিচয় করানোর জন্য, একটি ভিডিও "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" কালেকশনের সাথে জোড়া দিয়েছি, যার কিছু লেখক এই কারিকুলামেও অবদান রেখেছেন। + +অতিরিক্তভাবে, একটি ক্লাসের আগে একটি নিম্ন-দাবি কুইজ শিক্ষার্থীর শেখার উদ্দেশ্য স্থির করে, আর ক্লাসের পরে দ্বিতীয় কুইজ আরও ভালো ধারণার অধিকার নিশ্চিত করে। এই কারিকুলামটি নমনীয় এবং মজাদার হওয়ার জন্য ডিজাইন করা হয়েছে এবং পুরো বা আংশিকভাবে নেওয়া যেতে পারে। প্রকল্পসমূহ ছোট থেকে শুরু করে ১২-সপ্তাহের চক্র শেষে ক্রমশ জটিল হবে। + +আমরা ইচ্ছাকৃতভাবে JavaScript ফ্রেমওয়ার্কগুলো প্রবর্তন করা থেকে বিরত রয়েছি যাতে ওয়েব ডেভেলপার হিসেবে মৌলিক দক্ষতা অর্জনের প্রতি ফোকাস রাখা যায়, পরে একটি ভালো পরবর্তী ধাপ হবে Node.js সম্পর্কে শেখা "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)" ভিডিও কালেকশনের মাধ্যমে। + +> আমাদের [আচারসংহিতা](CODE_OF_CONDUCT.md) এবং [অবদান Guidelines](CONTRIBUTING.md) দেখুন। আপনার গঠনমূলক প্রতিক্রিয়া আমরা স্বাগত জানাই! ## 🧭 অফলাইন অ্যাক্সেস -[Docsify](https://docsify.js.org/#/) ব্যবহার করে আপনি এই ডকুমেন্টেশনটি অফলাইনে চালাতে পারবেন। এই রিপোজিটরিটি ফর্ক করুন, [Docsify ইনস্টল করুন](https://docsify.js.org/#/quickstart) আপনার লোকাল মেশিনে, তারপর এই রিপোজিটরির মূল ফোল্ডারে যান এবং টাইপ করুন `docsify serve`। ওয়েবসাইটটি আপনার লোকালহোস্টে ৩০০০ পোর্টে সার্ভ হবে: `localhost:3000`। +আপনি [Docsify](https://docsify.js.org/#/) ব্যবহার করে এই ডকুমেন্টেশন অফলাইনে চালাতে পারেন। এই রিপোটি Fork করুন, আপনার লোকাল মেশিনে [Docsify ইনস্টল করুন](https://docsify.js.org/#/quickstart), তারপর এই রিপোর রুট ফোল্ডারে `docsify serve` টাইপ করুন। ওয়েবসাইটটি আপনার লোকালহোস্টের ৩০০০ পোর্টে চালিত হবে: `localhost:3000`। ## 📘 পিডিএফ - -সমস্ত পাঠের একটি পিডিএফ [এখানে](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf) পাওয়া যাবে। - +সমস্ত পাঠের একটি পিডিএফ এখানে পাওয়া যেতে পারে [here](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf)। ## 🎒 অন্যান্য কোর্সসমূহ -আমাদের দল অন্যান্য কোর্স তৈরি করে! দেখুন: + +আমাদের দল অন্যান্য কোর্সও তৈরি করে! দেখে নিন: ### LangChain @@ -232,7 +238,7 @@ Azure AI Foundry Discord কমিউনিটিতে যোগ দিন --- -### Core Learning +### মূল শিক্ষা [![ML for Beginners](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) [![Data Science for Beginners](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) [![AI for Beginners](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) @@ -243,7 +249,7 @@ Azure AI Foundry Discord কমিউনিটিতে যোগ দিন --- -### Copilot Series +### কপিলট সিরিজ [![Copilot for AI Paired Programming](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) [![Copilot for C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) [![Copilot Adventure](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) @@ -251,21 +257,21 @@ Azure AI Foundry Discord কমিউনিটিতে যোগ দিন ## সাহায্য নেওয়া -যদি আপনি আটকে যান বা AI অ্যাপ নির্মাণ সম্পর্কে কোনো প্রশ্ন থাকে। MCP নিয়ে আলোচনা করতে সহশিক্ষার্থী এবং অভিজ্ঞ ডেভেলপারদের সাথে যোগ দিন। এটি একটি সহায়ক সম্প্রদায় যেখানে প্রশ্ন歓迎 এবং জ্ঞান বিনামূল্যে ভাগ করা হয়। +যদি আপনি আটকে যান বা AI অ্যাপ তৈরি করার বিষয়ে কোনো প্রশ্ন থাকে। MCP সম্পর্কে আলোচনা করতে সহকর্মী শিক্ষার্থী ও অভিজ্ঞ ডেভেলপারদের সাথে যোগ দিন। এটি একটি সহায়ক সম্প্রদায় যেখানে প্রশ্ন গ্রহণযোগ্য এবং জ্ঞান বিনিময় করা হয়। [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -যদি আপনার পণ্যের প্রতিক্রিয়া বা ত্রুটি থাকে নির্মাণের সময় নিম্নলিখিত লিঙ্কে যান: +যদি আপনার পণ্য প্রতিক্রিয়া বা নির্মাণের সময় কোনো ত্রুটি থাকে, তাহলে দেখুন: [![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum) ## লাইসেন্স -এই রিপজিটরি MIT লাইসেন্সের অধীনে লাইসেন্সকৃত। আরও তথ্যের জন্য দেখুন [LICENSE](../../LICENSE) ফাইল। +এই রেপোজিটরিটি MIT লাইসেন্সের অধীনে অনুমোদিত। আরও তথ্যের জন্য দেখুন [LICENSE](../../LICENSE) ফাইল। --- -**দায়িত্ব সীমা**: -এই নথিটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে कृপয়া মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা ভুল থাকতে পারে। মূল নথিটি তার নিজ ভাষায় সর্বাধিক গ্রহণযোগ্য উৎস হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ পরামর্শ দেওয়া হয়। এই অনুবাদের ব্যবহার থেকে উদ্ভূত কোনও ভুল বোঝাবুঝি বা ভ্রান্তির জন্য আমরা দায়ী নই। +**অস্বীকারোক্তি**: +এই ডকুমেন্টটি AI অনুবাদ সেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনূদিত হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবুও দয়া করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল নথি তার স্বতন্ত্র ভাষায়ই কর্তৃপক্ষসুত্র হিসেবে বিবেচিত হওয়া উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদের পরামর্শ দেওয়া হয়। এই অনুবাদের ব্যবহারে সৃষ্ট কোনো ভুলবোঝা বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file diff --git a/translations/cs/.co-op-translator.json b/translations/cs/.co-op-translator.json index 7cf1f1959..8036606ae 100644 --- a/translations/cs/.co-op-translator.json +++ b/translations/cs/.co-op-translator.json @@ -1,7 +1,7 @@ { "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { - "original_hash": "d45ddcc54eb9232a76d08328b09d792e", - "translation_date": "2026-01-07T04:12:06+00:00", + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T16:02:36+00:00", "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", "language_code": "cs" }, @@ -493,7 +493,7 @@ }, "AGENTS.md": { "original_hash": "a362efd06d64d4134a0cfe8515a86d34", - "translation_date": "2026-02-06T18:18:33+00:00", + "translation_date": "2026-03-06T16:06:41+00:00", "source_file": "AGENTS.md", "language_code": "cs" }, @@ -516,8 +516,8 @@ "language_code": "cs" }, "README.md": { - "original_hash": "6d6385fd098088cb2d690fb0a6cdaedc", - "translation_date": "2026-02-06T18:11:29+00:00", + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T15:57:56+00:00", "source_file": "README.md", "language_code": "cs" }, diff --git a/translations/cs/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/cs/1-getting-started-lessons/1-intro-to-programming-languages/README.md index ef6610bae..ff6c763f5 100644 --- a/translations/cs/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/cs/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,98 +1,98 @@ -# Úvod do programovacích jazyků a moderních vývojářských nástrojů - -Ahoj, budoucí vývojáři! 👋 Můžu vám něco říct, co mi dělá husí kůži každý den? Chystáte se objevovat, že programování není jen o počítačích – je to skutečná superschopnost přivést vaše nejdivočejší nápady k životu! +# Úvod do programovacích jazyků a moderních nástrojů pro vývojáře -Znám ten moment, kdy používáte svoji oblíbenou aplikaci a všechno do sebe perfektně zapadne? Když kliknete na tlačítko a stane se něco naprosto magického, co vás přiměje říct „wow, jak to DĚLALI?“ No, někdo přesně jako vy – pravděpodobně sedící ve své oblíbené kavárně ve 2 ráno s třetím espressem – napsal kód, který tu magii vytvořil. A teď vás čeká něco, co vám úplně vyrazí dech: na konci této lekce nejen pochopíte, jak to udělali, ale budete přímo chtít to vyzkoušet sami! +Ahoj, budoucí vývojáři! 👋 Můžu ti říct něco, co mi pokaždé cestou mrazí v zádech? Právě se chystáš objevit, že programování není jen o počítačích – je to o tom mít skutečné superschopnosti přivést k životu své nejdivočejší nápady! -Podívejte, chápu, že programování může být zatím zastrašující. Když jsem začínal já, upřímně jsem si myslel, že musíte být nějací matematičtí géniové nebo kódovat už od pěti let. Ale co mi úplně změnilo pohled: programování je přesně jako naučit se konverzovat v novém jazyce. Začnete „ahoj“ a „děkuji“, pak si objednáváte kávu a než se nadějete, vedete hluboké filozofické debaty! Akorát v tomto případě konverzujete s počítači a upřímně? Jsou to ti nejtrpělivější konverzační partneři na světě – nikdy vás nekritizují za chyby a vždycky jsou nadšení to zkusit znovu! +Znáš ten moment, kdy používáš svoji oblíbenou aplikaci a vše na sebe perfektně navazuje? Když ťukneš na tlačítko a stane se něco naprosto kouzelného, co tě nechá říct „wow, jak to udělali?“ No, někdo přesně jako ty – pravděpodobně sedí ve své oblíbené kavárně ve 2 ráno u třetího espressa – napsal kód, který to kouzlo stvořil. A teď přijde to, co ti rozum vyrazí: na konci této lekce nejen pochopíš, jak to udělali, ale už nebudeš moct dočkat, až to zkusíš sám! -Dnes si prozkoumáme úžasné nástroje, které činí moderní webový vývoj nejen možným, ale doopravdy návykovým. Mluvím o stejných editorech, prohlížečích a pracovních postupech, které používají vývojáři ve Netflixu, Spotify a ve vašem oblíbeném indie studiu každý den. A tady je část, která vás nadchne: většina těchto profesionálních, průmyslových standardů je úplně zdarma! +Vidíš, chápu, že programování může teď působit zastrašujícím dojmem. Když jsem začínal, opravdu jsem si myslel, že musíš být nějaký matematik nebo programovat už od pěti let. Ale tohle mi úplně změnilo pohled: programování je přesně jako učení se mluvit v novém jazyce. Začínáš „ahoj“ a „děkuju“, pak se učíš objednat kávu a než se naděješ, vedeš hluboké filozofické diskuse! Jenže v tomto případě vedeš rozhovory s počítači, a upřímně? Jsou to nejtrpělivější konverzační partneři, jaké budeš mít – nikdy netrestají tvoje chyby a vždy se těší, že to zkusíš znovu! + +Dnes prozkoumáme úžasné nástroje, díky kterým není moderní webový vývoj jen možný, ale taky skutečně návykový. Mluvím o přesně těch editorech, prohlížečích a pracovních postupech, které denně používají vývojáři v Netflixu, Spotify a tvém oblíbeném nezávislém app studiu. A tady je část, která tě rozesměje radostí: většina těchto profesionálních, průmyslově standardních nástrojů je úplně zdarma! ![Intro Programming](../../../../translated_images/cs/webdev101-programming.d6e3f98e61ac4bff.webp) > Sketchnote od [Tomomi Imura](https://twitter.com/girlie_mac) ```mermaid journey - title Vaše dnešní cesta programováním + title Vaše programátorská cesta dnes section Objevování Co je programování: 5: You Programovací jazyky: 4: You Přehled nástrojů: 5: You - section Prozkoumávání + section Prozkoumat Editory kódu: 4: You - Prohlížeče a DevTools: 5: You + Prohlížeče a vývojářské nástroje: 5: You Příkazový řádek: 3: You section Procvičování - Detektiv jazyků: 4: You - Průzkum nástrojů: 5: You + Jazykový detektiv: 4: You + Prozkoumání nástrojů: 5: You Spojení s komunitou: 5: You ``` -## Podíváme se, co už umíte! +## Podívejme se, co už víš! -Než se pustíme do zábavy, jsem zvědavý – co už o světě programování víte? A pokud při pohledu na tyto otázky myslíte „nemám o tom absolutně žádné ponětí,“ vůbec nevadí, je to perfektní! To znamená, že jste na přesně správném místě. Považujte tento kvíz za rozcvičku před tréninkem – jen prostě rozehříváme mozkové svaly! +Než se pustíme do zábavy, zajímá mě – co už o programování víš? A poslouchej, pokud na tyto otázky koukáš a myslíš si „nemám o tom vůbec žádnou představu,“ to není jen v pořádku, to je perfektní! To znamená, že jsi přesně tam, kde máš být. Považuj tento kvíz za rozcvičku před cvičením – jen zahříváme mozkové svaly! -[Vyplňte předběžný kvíz](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) +[Vyplň si kvíz před lekcí](https://ff-quizzes.netlify.app/web/) -## Dobrodružství, na které se společně vydáme +## Dobrodružství, na které se spolu vydáme -Dobře, upřímně jsem celý nadšený z toho, co dnes budeme objevovat! Fakt, rád bych viděl vaši tvář, až vám některé z těchto konceptů začnou dávat smysl. Tady je neuvěřitelná cesta, na kterou se společně vydáme: +Dobře, skutečně se nemohu dočkat, co dnes prozkoumáme! Opravdu, přál bych si vidět tvůj výraz, až ti některé z těch konceptů dojdou. Tady je ta úžasná cesta, na kterou se spolu vydáme: -- **Co programování vlastně je (a proč je to ta nejúžasnější věc!)** – Objevíme, jak kód je doslova neviditelná magie, která pohání vše kolem vás, od budíku, který nějak ví, že je pondělí ráno, až po algoritmus, který perfektně vybírá vaše doporučení na Netflixu -- **Programovací jazyky a jejich úžasné osobnosti** – Představte si párty, kde každý má úplně jiné superschopnosti a způsoby řešení problémů. Takový je svět programovacích jazyků – a vy se s nimi budete rádi seznamovat! -- **Základní stavební kameny, které vytvářejí digitální magii** – Představte si to jako ultimátní kreativní LEGO sadu. Jakmile pochopíte, jak tyto kousky do sebe zapadají, uvědomíte si, že můžete skutečně postavit cokoli, co vám přijde na mysl -- **Profesionální nástroje, díky kterým se budete cítit, jako byste právě dostali kouzelnickou hůlku** – Nezveličuji – tyto nástroje vám skutečně dají pocit superhrdiny a ta nejlepší část? Jsou to ty stejné, které používají profíci! +- **Co vlastně programování je (a proč je to ta nejvíc cool věc vůbec!)** – Objistíme si, jak je kód doslova neviditelné kouzlo pohánějící všechno kolem tebe, od budíku, který nějak ví, že je pondělí ráno, až po algoritmus, který perfektně vyladí tvoje Netflix doporučení +- **Programovací jazyky a jejich úžasné osobnosti** – Představ si, že přijdeš na párty, kde každý má úplně jiné superschopnosti a způsoby řešení problémů. Takový je svět programovacích jazyků a ty si je zamiluješ! +- **Základní stavební kameny, které dělají digitální magii** – Považuj je za ultimátní kreativní LEGO sadu. Jakmile pochopíš, jak tyto části zapadají, uvědomíš si, že můžeš doslova postavit cokoli, co si vymyslíš +- **Profesionální nástroje, které tě nechají cítit, jako bys dostal kouzelnickou hůlku** – Ne, to není přehánění – tyto nástroje tě opravdu donutí cítit se jako mág, a ta nejlepší část? Jsou to ty samé, které používají profíci! -> 💡 **Tady je věc**: ani nepřemýšlejte o tom, že byste si to dnes všechno měli zapamatovat! Teď chci, abyste pocítili ten jiskřivý zájem o to, co je možné. Detaily vám zůstávají přirozeně, když budeme spolu cvičit – takto se skutečně učíte! +> 💡 **Něco k zapamatování:** Nemysli si, že dnes musíš všechno naučit nazpaměť! Teď chci, aby sis jen zapálil tu jiskru vzrušení z toho, co je možné. Detaily ti budou přirozeně ulehávat do paměti při společném praktickém procvičování – takhle skutečné učení funguje! -> Tuto lekci si můžete projít i na [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! +> Tuto lekci můžeš absolvovat i na [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! -## Co vlastně *je* programování? +## Tak co to vlastně *je* programování? -Dobře, pojďme na tu zásadní otázku: co je programování doopravdy? +Dobře, pojďme se podívat na otázku za milion dolarů: co je to programování, opravdu? -Povím vám příběh, který mi úplně změnil pohled na to. Minulý týden jsem se snažil vysvětlit mámě, jak používat náš nový dálkový ovladač od chytré televize. Přistihl jsem se, jak říkám věci jako „Stiskni červené tlačítko, ale ne to velké červené, to malé vlevo... ne, vaši druhou levou... dobře, drž ho dvě vteřiny, ne jednu, ne tři...“ Zní to povědomě? 😅 +Dám ti příběh, který mi úplně změnil, jak o tom přemýšlím. Minulý týden jsem se snažil vysvětlit mamince, jak používat dálkový ovladač na naší nové chytré televizi. Přistihl jsem se, jak říkám věci jako „Stiskni červené tlačítko, ale ne to velké červené, malé červené vlevo... ne, tvoje druhá levá... dobrá, teď drž dvě sekundy, ne jednu, ne tři...“ Zní to povědomě? 😅 -To je programování! Je to umění dávat velmi detailní, krok za krokem instrukce něčemu, co je mocné, ale potřebuje všechno přesně vyspecifikované. Akorát místo toho, abyste vysvětlovali mámě (která může zeptat „které červené tlačítko?!“), vysvětlujete počítači (který prostě udělá přesně to, co mu řeknete, i když to není úplně, co jste mysleli). +Tohle je programování! Je to umění dávat opravdu detailní, krok za krokem instrukce něčemu, co je velmi výkonné, ale potřebuje, aby všechno bylo přesně vysvětleno. Jenže místo toho, abys to vysvětloval mamince (která může říct „které červené tlačítko?!“), vysvětluješ to počítači (který prostě dělá přesně to, co mu řekneš, i když to není úplně to, co jsi myslel). -Co mě nadchlo, když jsem tohle poprvé pochopil: počítače jsou vlastně na základní úrovni docela jednoduché. Rozumí doslova jen dvěma věcem – 1 a 0, což je v podstatě „ano“ a „ne“ nebo „zapnuto“ a „vypnuto.“ To je vše! Ale tady nastává ta magie – nemusíme mluvit v jedničkách a nulách, jako v Matrixu. To jsou **programovací jazyky**, které nám pomáhají. Jsou jako nejlepší překladatel světa, který vezme vaše úplně normální lidské myšlenky a převede je do počítačového jazyka. +Když jsem to poprvé pochopil, úplně mi to zmátlo hlavu: počítače jsou ve své podstatě vlastně docela jednoduché. Rozumí jen dvěma věcem – 1 a 0, což je v podstatě „ano“ a „ne“ nebo „zapnuto“ a „vypnuto.“ To je všechno! Ale tady přichází kouzlo – nemusíme mluvit v 1 a 0 jako bychom byli ve filmu Matrix. Právě proto tu jsou **programovací jazyky**. Jsou jako nejlepší překladatel světa, který vezme tvoje úplně normální lidské myšlenky a převede je do počítačové řeči. -A tady je něco, co mi dělá husí kůži každé ráno, když se probouzím: doslova *všechno* digitální ve vašem životě začalo u někoho přesně jako jste vy, pravděpodobně sedícího v pyžamu s šálkem kávy a píšícího kód na notebooku. Ten Instagram filtr, který vás nechá vypadat dokonale? Někdo napsal ten kód. Doporučení, které vás zavedlo k vaší nové oblíbené písničce? Vývojář vytvořil ten algoritmus. Aplikace, která pomáhá rozdělit účet za večeři s přáteli? Jo, někdo si řekl „tohle je otravné, to zkusím opravit“ a... udělal to! +A teď přijde něco, co mi každý den ráno skutečně dává husí kůži: doslova *všechno* digitální v tvém životě začalo někým přesně jako jsi ty, pravděpodobně v pyžamu s šálkem kávy, který píše kód na svém notebooku. Ten Instagram filtr, který tě dělá dokonalým? Někdo ho naprogramoval. Doporučení, které tě dovedlo k nové oblíbené písničce? Vývojář vytvořil ten algoritmus. Aplikace, která ti pomáhá rozdělit účet za večeři s přáteli? Jo, někdo si řekl „to je otravné, tohle opravím“ a pak… taky udělal! -Když se naučíte programovat, neosvojujete si jen novou dovednost – stáváte se součástí úžasné komunity řešitelů problémů, kteří každý den přemýšlejí: „Co kdybych mohl postavit něco, co někomu zlepší den alespoň trochu?“ Opravdu, existuje něco lepšího? +Když se naučíš programovat, nezískáš jen novou dovednost – stáváš se součástí úžasné komunity řešitelů problémů, kteří denně přemýšlejí: „Co kdybych mohl postavit něco, co někomu zlepší den alespoň trochu?“ Upřímně, je něco lepšího než tohle? -✅ **Zajímavý úkol**: Najděte si, kdo myslíte, že byl první programátor na světě? Dám vám nápovědu: možná to není ten, koho čekáte! Příběh této osoby je naprosto fascinující a ukazuje, že programování vždycky bylo o kreativním hledání řešení a přemýšlení mimo zaběhnuté šablony. +✅ **Zábavná fakta:** Když budeš mít chvilku, mrkni na tohle – kdo byl podle tebe první programátor na světě? Mám nápovědu: nemusí to být ten, koho očekáváš! Příběh této osoby je fascinující a ukazuje, že programování vždycky bylo o kreativním řešení problémů a myšlení mimo zaběhnuté cesty. -### 🧠 **Jak se cítíte?** +### 🧠 **Jak se nyní cítíš?** -**Chvilku se zamyslete:** -- Dává vám teď smysl představa „dávat počítačům instrukce“? -- Umíte si představit denní úkol, který byste chtěli automatizovat pomocí programování? -- Jaké otázky se vám honí hlavou ohledně celého toho programování? +**Zastav se a zamysli:** +- Dává ti teď smysl představa „dávání pokynů počítačům“? +- Napadá tě nějaký každodenní úkol, který bys chtěl pomocí programování automatizovat? +- Jaké otázky tě ohledně programování napadají? -> **Pamatujte**: Je naprosto normální, pokud některé koncepty zatím nejsou úplně jasné. Učení programování je jako učení nového jazyka – mozek potřebuje čas na vybudování nových neuronových spojů. Děláte to skvěle! +> **Pamatuj:** Je naprosto normální, pokud ti něco teď připadá matoucí. Učení programování je jako učení nového jazyka – trvá, než si mozek vybuduje nové spojení. Děláš to skvěle! -## Programovací jazyky jsou jako různé druhy magie +## Programovací jazyky jsou jako různé druhy kouzel -Dobře, tohle možná bude znít divně, ale vydržte se mnou – programovací jazyky jsou hodně jako různé hudební styly. Přemýšlejte o tom: máte jazz, který je hladký a improvizační, rock, který je silný a přímý, klasiku, co je elegantní a strukturovaná, a hip-hop, který je kreativní a expresivní. Každý styl má svou atmosféru, svoji komunitu nadšených fanoušků a každý je perfektní pro jiné nálady a příležitosti. +Dobře, zní to asi divně, ale vydrž – programovací jazyky jsou hodně podobné různým hudebním žánrům. Přemýšlej: máš jazz, který je hladký a improvizační, rock, který je silný a přímý, klasiku, která je elegantní a strukturovaná, a hip-hop, který je kreativní a expresivní. Každý styl má svoji atmosféru, svoji komunitu zapálených fanoušků a každý je perfektní pro různé nálady a příležitosti. -Programovací jazyky fungují stejně! Nechtěli byste používat stejný jazyk na tvorbu zábavné mobilní hry jako na zpracování obřího množství klimatických dat, stejně jako byste nehráli death metal při józe (no aspoň většinou ne! 😄). +Programovací jazyky fungují přesně stejně! Nepoužil bys stejný jazyk na vývoj zábavné mobilní hry, jaký bys použil na zpracování obrovského množství klimatických dat, stejně jako bys nehrál death metal na hodině jógy (no, většinou ne! 😄). -Ale to, co mi pořád vyrazí dech, je tohle: ty jazyky jsou jako mít po boku nejtrpělivějšího a nejbystřejšího tlumočníka na světě. Můžete vyjádřit své myšlenky způsobem, který je přirozený vaší lidské mysli, a on zvládne veškerou neuvěřitelně složitou práci s překladem do jedniček a nul, které počítače skutečně „mluví“. Je to jako mít kamaráda, který dokonale ovládá oba jazyky – „lidskou kreativitu“ i „počítačovou logiku“ – a nikdy se neunaví, nepotřebuje pauzu na kávu a nikdy se na vás nezlobí, když se ptáte stejnou otázku dvakrát! +Ale co mi absolutně vždycky vyrazí dech: tyto jazyky jsou jako nejtrpělivější, nejbystřejší tlumočník na světě, který sedí vedle tebe. Můžeš vyjádřit své myšlenky způsobem, který je pro tvůj lidský mozek přirozený, a oni zvládnou všechno to neuvěřitelně složité přeložení do jedniček a nul, které počítače skutečně „mluví“. Je to jako mít přítele, který perfektně ovládá „lidskou kreativitu“ i „počítačovou logiku“ – a nikdy se neunaví, nikdy nepotřebuje přestávky na kafe a nikdy tě neodsoudí za to, že se ptáš dvakrát! ### Oblíbené programovací jazyky a jejich použití ```mermaid mindmap root((Programovací jazyky)) - Vývoj webu + Webový vývoj JavaScript Frontendová magie Interaktivní webové stránky TypeScript JavaScript + typy Podnikové aplikace - Data a AI + Data & AI Python Datová věda Strojové učení @@ -113,7 +113,7 @@ mindmap Systémy a výkon C++ Hry - Kritický výkon + Výkonová kritická Rust Bezpečnost paměti Systémové programování @@ -123,37 +123,37 @@ mindmap ``` | Jazyk | Nejlepší pro | Proč je populární | |----------|----------|------------------| -| **JavaScript** | Webový vývoj, uživatelská rozhraní | Běží v prohlížečích a pohání interaktivní weby | -| **Python** | Data science, automatizace, AI | Snadné čtení a učení, silné knihovny | -| **Java** | Podnikové aplikace, Android aplikace | Platformně nezávislý, robustní pro velké systémy | -| **C#** | Windows aplikace, vývoj her | Silná podpora Microsoft ekosystému | -| **Go** | Cloudové služby, backend systémy | Rychlý, jednoduchý, navržený pro moderní výpočty | +| **JavaScript** | Vývoj webu, uživatelská rozhraní | Funguje v prohlížečích a pohání interaktivní weby | +| **Python** | Data science, automatizace, AI | Snadno čitelný a učenlivý, silné knihovny | +| **Java** | Podnikové aplikace, Android aplikace | Nezávislý na platformě, robustní pro velké systémy | +| **C#** | Windows aplikace, vývoj her | Silná podpora v Microsoft ekosystému | +| **Go** | Cloudové služby, backend systémy | Rychlý, jednoduchý, navržený pro moderní výpočetní prostředí | -### Jazyky na vysoké úrovni vs. nízké úrovni +### Vyšší vs. nižší úroveň jazyků -Dobře, tohle byl opravdu koncept, který mě úplně zmátl na začátku, tak sdílím analogii, která to konečně rozsvítila i mě – doufám, že pomůže i vám! +Dobře, upřímně to byl koncept, který mi úplně rozbil mozek, když jsem začínal, tak ti povím analogii, která mi to konečně otevřela – doufám, že ti taky pomůže! -Představte si, že jste v cizí zemi, kde neumíte jazyk, a zoufale hledáte nejbližší záchod (to jsme všichni zažili, že? 😅): +Představ si, že cestuješ do země, kde neumíš jazyk, a zoufale potřebuješ najít nejbližší záchod (to jsme všichni zažili, že jo? 😅): -- **Programování nízké úrovně** je jako naučit se místní dialekt tak dobře, že si můžete povídat s babičkou prodávající ovoce na rohu pomocí kulturních narážek, místní slangu a vtipů, kterým rozumí jen někdo, kdo tam vyrostl. Super impresivní a neuvěřitelně efektivní… pokud jste fluent! Ale dost náročné, když jen chcete najít záchod. +- **Programování na nízké úrovni** je jako naučit se místní dialekt tak dobře, že můžeš mluvit s babičkou prodávající ovoce na rohu, používat kulturní odkazy, místní slang a vtipy, kterým rozumí jen místní. Super působivé a nesmírně efektivní... pokud jsi plynulý! Ale docela matoucí, když se prostě snažíš najít záchod. -- **Programování vysoké úrovně** je jako mít úžasného místního kamaráda, který vás prostě chápe. Můžete říct „Opravdu potřebuji najít toaletu“ v obyčejné angličtině a on zařídí celý kulturní překlad a dá vám instrukce tak, že jim rozumí i vaše netypická hlava. +- **Programování na vysoké úrovni** je jako mít úžasného místního přítele, který ti rozumí. Můžeš říct „Potřebuju opravdu najít toaletu“ jednoduše v angličtině a on překládá všechny kulturní nuance a dává ti směrovky srozumitelné pro tvůj ne-místní mozek. -V programovacích termínech: -- **Jazyky nízké úrovně** (například Assembly nebo C) vám umožní mít neuvěřitelně detailní rozhovor s fyzickým hardwarem počítače, ale musíte myslet jako stroj, což je… no, řekněme, že to je pořádná změna myšlení! -- **Jazyky vysoké úrovně** (jako JavaScript, Python nebo C#) vám dovolí myslet jako člověk, zatímco ony se starají o veškerou strojovou řeč v pozadí. Navíc mají úžasné přívětivé komunity plné lidí, kteří si pamatují, jaké to bylo být nováčky, a skutečně chtějí pomoci! +Ve světě programování: +- **Jazyky na nízké úrovni** (jako Assembly nebo C) ti umožňují mluvit velmi detailně přímo s hardwarem počítače, ale musíš myslet jako stroj, což... no, řekněme, že je to velká změna myšlení! +- **Jazyky na vysoké úrovni** (jako JavaScript, Python nebo C#) ti umožní myslet jako člověk a ony se postarají o veškerý strojový kód za oponou. Navíc mají nesmírně přívětivé komunity plné lidí, kteří si pamatují, jaké to je být nováček, a skutečně chtějí pomáhat! -Hádejte, které vám doporučím začít? 😉 Jazyky vysoké úrovně jsou jako pomocná kolečka na kole, která nikdy nechcete sundat, protože celý zážitek je díky nim mnohem příjemnější! +Hádej, které ti navrhnu začít používat? 😉 Jazyky na vysoké úrovni jsou jako pomocná kolečka na kole, která vlastně nikdy nechceš sundat, protože ti celý zážitek tolik usnadní! ```mermaid flowchart TB - A["👤 Lidská myšlenka:
'Chci vypočítat Fibonacciho čísla'"] --> B{Vyberte úroveň jazyka} + A["👤 Lidská myšlenka:
'Chci spočítat Fibonacciho čísla'"] --> B{Vybrat úroveň jazyka} B -->|Vyšší úroveň| C["🌟 JavaScript/Python
Snadné čtení a psaní"] - B -->|Nižší úroveň| D["⚙️ Assembly/C
Přímá kontrola hardwaru"] + B -->|Nižší úroveň| D["⚙️ Assembler/C
Přímá kontrola hardwaru"] - C --> E["📝 Napište: fibonacci(10)"] - D --> F["📝 Napište: mov r0,#00
sub r0,r0,#01"] + C --> E["📝 Napiš: fibonacci(10)"] + D --> F["📝 Napiš: mov r0,#00
sub r0,r0,#01"] E --> G["🤖 Porozumění počítače:
Překladač řeší složitost"] F --> G @@ -164,15 +164,15 @@ flowchart TB style D fill:#fff3e0 style H fill:#e8f5e8 ``` -### Ukážu vám, proč jsou jazyky vysoké úrovně tak přátelské +### Ukážu ti, proč jsou jazyky na vysoké úrovni tak přátelské -Dobře, chystám se vám ukázat něco, co perfektně demonstruje, proč jsem si zamiloval jazyky vysoké úrovně, ale nejdřív – potřebuji, abyste mi něco slíbili. Když uvidíte první ukázku kódu, nezpanikařte! Má vypadat trochu zastrašujícím dojmem. To je přesně ten bod, který chci zdůraznit! +Dobře, ukážu ti něco, co perfektně ukazuje, proč jsem si zamiloval jazyky na vysoké úrovni, ale nejdřív – slib mi něco. Až uvidíš ten první kódový příklad, nepanikař! Má vypadat zastrašujícím dojmem. To je přesně ten bod, který chci ukázat! -Podíváme se na stejný úkol napsaný ve dvou úplně odlišných stylech. Oba vytvoří tzv. Fibonacciho posloupnost – nádherný matematický vzor, kde je každé číslo součtem dvou předchozích: 0, 1, 1, 2, 3, 5, 8, 13... (Zajímavost: tenhle vzor najdete doslova všude v přírodě – spirály slunečnicových semen, vzory šišek, dokonce i v tom, jak se tvoří galaxie!) +Podíváme se na úplně stejný úkol napsaný ve dvou úplně odlišných stylech. Oba vytvářejí tzv. Fibonacciho posloupnost – je to krásný matematický vzor, kde každé číslo je součtem dvou předchozích: 0, 1, 1, 2, 3, 5, 8, 13... (Zábavná poznámka: tento vzor najdeš doslova všude v přírodě – spirály na semenech slunečnice, vzory šišek, dokonce i ve formování galaxií!) -Připraveni vidět rozdíl? Jdeme na to! +Připraven na rozdíl? Jdeme na to! -**Jazyk vysoké úrovně (JavaScript) – přátelský k lidem:** +**Jazyk na vysoké úrovni (JavaScript) – Přátelský pro člověka:** ```javascript // Krok 1: Základní nastavení Fibonacciho posloupnosti @@ -184,28 +184,28 @@ console.log('Fibonacci sequence:'); ``` **Co tento kód dělá:** -- **Deklaruje** konstantu určující, kolik Fibonacciho čísel chceme vygenerovat -- **Inicializuje** dvě proměnné pro sledování současného a dalšího čísla v posloupnosti -- **Nastavuje** počáteční hodnoty (0 a 1), které definují Fibonacciho vzor -- **Zobrazuje** hlavičku pro identifikaci našeho výstupu +- **Deklaruje** konstantu, která určuje, kolik Fibonacciho čísel chceme vygenerovat +- **Inicializuje** dvě proměnné pro sledování aktuálního a dalšího čísla v posloupnosti +- **Nastaví** počáteční hodnoty (0 a 1), které definují Fibonacciho vzor +- **Zobrazí** nadpis, aby identifikoval naši výstupní zprávu ```javascript -// Krok 2: Vygenerujte posloupnost pomocí smyčky +// Krok 2: Vygenerujte sekvenci pomocí smyčky for (let i = 0; i < fibonacciCount; i++) { console.log(`Position ${i + 1}: ${current}`); - // Vypočítejte další číslo v posloupnosti + // Vypočítejte další číslo v sekvenci const sum = current + next; current = next; next = sum; } ``` -**Co se zde děje podrobněji:** +**Rozbor, co se zde děje:** - **Prochází** každou pozici v posloupnosti pomocí cyklu `for` -- **Zobrazuje** každé číslo s jeho pozicí využitím formátování šablonových řetězců -- **Vypočítává** další Fibonacciho číslo sčítáním současné a další hodnoty -- **Aktualizuje** sledovací proměnné pro přechod na další iteraci +- **Zobrazuje** každé číslo s jeho pozicí pomocí formátování šablony +- **Vypočítá** další Fibonacciho číslo sčítáním aktuálního a dalšího čísla +- **Aktualizuje** sledovací proměnné pro přechod k další iteraci ```javascript // Krok 3: Moderní funkcionální přístup @@ -225,12 +225,12 @@ console.log(fibSequence); ``` **Výše jsme:** -- **Vytvořili** znovupoužitelnou funkci pomocí moderní syntaxi šipek (arrow function) -- **Sestavili** pole pro uložení celé posloupnosti místo zobrazení po jednom -- **Použili** indexování pole pro výpočet každého nového čísla ze starších -- **Vrátili** celou posloupnost pro flexibilní použití v dalších částech programu +- **Vytvořili** znovupoužitelnou funkci pomocí moderní syntaxe šipkových funkcí +- **Postavili** pole pro uložení celé posloupnosti místo zobrazení po jednom +- **Použili** indexování pole k výpočtu každého nového čísla z předchozích hodnot +- **Vrátili** celou posloupnost pro flexibilní použití v jiných částech programu -**Jazyk nízké úrovně (ARM Assembly) – přátelský k počítači:** +**Jazyk na nízké úrovni (ARM Assembly) – Přátelský pro počítač:** ```assembly area ascen,code,readonly @@ -257,59 +257,60 @@ back add r0,r1 end ``` -Všimněte si, jak verze v JavaScriptu čte téměř jako instrukce v angličtině, zatímco verze v Assembly používá záhadné příkazy, které přímo řídí procesor počítače. Oba úkoly splní stejný úkol, ale jazyk vysoké úrovně je pro lidi mnohem snadněji pochopitelný, psaný a udržovatelný. +Všimni si, jak verze v JavaScriptu čte téměř jako anglické pokyny, zatímco Assembly verze používá záhadné příkazy, které přímo ovládají procesor počítače. Oba provádějí přesně ten samý úkol, ale jazyk na vysoké úrovni je mnohem snazší pro lidi pochopit, napsat i udržovat. -**Klíčové rozdíly, které si všimnete:** -- **Čitelnost**: JavaScript používá popisné názvy jako `fibonacciCount`, zatímco Assembly používá nesrozumitelné označení jako `r0`, `r1` -- **Komentáře**: Vysokoúrovňové jazyky podporují vysvětlující komentáře, které činí kód samodokumentujícím +**Klíčové rozdíly, které si všimneš:** +- **Čitelnost**: JavaScript používá popisné názvy jako `fibonacciCount`, zatímco Assembly používá kryptické označení jako `r0`, `r1` +- **Komentáře**: Vyšší programovací jazyky podporují vysvětlující komentáře, které činí kód samo-dokumentujícím - **Struktura**: Logický tok JavaScriptu odpovídá tomu, jak lidé přemýšlejí o problémech krok za krokem -- **Údržba**: Aktualizace verze JavaScriptu pro různé požadavky je přímá a jasná +- **Údržba**: Aktualizace verze v JavaScriptu pro různé požadavky je jednoduchá a přehledná + +✅ **O Fibonacciho posloupnosti**: Tento naprosto nádherný číselný vzorec (kde každé číslo je součtem dvou předchozích: 0, 1, 1, 2, 3, 5, 8...) se objevuje doslova *všude* v přírodě! Najdete ho ve spirálách slunečnic, ve vzorech šišek, v křivkách ulit chobotnic a dokonce i ve způsobu růstu větví stromů. Je opravdu ohromující, jak nám matematika a kód mohou pomoci pochopit a znovu vytvořit vzory, které příroda používá k tvoření krásy! -✅ **O Fibonacciho posloupnosti**: Tento naprosto nádherný číselný vzorec (kde každé číslo se rovná součtu dvou předchozích: 0, 1, 1, 2, 3, 5, 8...) se doslova *vyskytuje všude* v přírodě! Najdete ho ve spirálách slunečnic, vzorcích šišek, způsobu, jak křivky ulit náutila a dokonce i ve způsobu růstu větví stromů. Je to docela úžasné, jak nám matematika a kód mohou pomoci pochopit a znovu vytvořit vzory, které příroda používá k tvorbě krásy! -## Základní stavební kameny, které vytvářejí kouzlo +## Základní stavební kameny magie -Dobře, teď když jste viděli, jak programovací jazyky vypadají v akci, pojďme rozložit základní kousky, které tvoří doslova každý program, který kdy byl napsán. Považujte je za základní ingredience ve vašem oblíbeném receptu – jakmile pochopíte, co každý dělá, budete schopni číst a psát kód téměř v jakémkoli jazyce! +Dobře, nyní když jste viděli, jak vypadají programovací jazyky v akci, pojďme rozložit základní části, které tvoří doslova každý napsaný program. Představte si tyto části jako základní ingredience ve vašem oblíbeném receptu – jakmile pochopíte, co každá z nich dělá, budete schopni číst a psát kód prakticky v jakémkoli jazyce! -Je to něco jako učení se gramatice programování. Pamatujete si, jak jste se ve škole učili o podstatných jménech, slovesech a jak skládat věty dohromady? Programování má svou vlastní verzi gramatiky a upřímně je mnohem logičtější a shovívavější než anglická gramatika byla! 😄 +Je to trochu jako naučit se gramatiku programování. Pamatujete si ze školy, jak jste se učili o podstatných jménech, slovesech a jak tvořit věty? Programování má svou vlastní verzi gramatiky, a upřímně, je mnohem logičtější a shovívavější než anglická gramatika! 😄 -### Příkazy: Krok za krokem pokyny +### Příkazy: Pokyny krok za krokem -Začněme s **příkazy** – ty jsou jako jednotlivé věty v konverzaci s vaším počítačem. Každý příkaz říká počítači, aby udělal jednu konkrétní věc, podobně jako když dáváte směrování: „Zahni tady vlevo,“ „Zastav na červenou,“ „Zaparkuj na tom místě.“ +Začněme s **příkazy** – ty jsou jako jednotlivé věty v konverzaci s vaším počítačem. Každý příkaz říká počítači, aby udělal jednu konkrétní věc, podobně jako dávání pokynů: „Zahněte tady vlevo,“ „Zastavte na červené,“ „Zaparkujte na tomto místě.“ -Co mám na příkazech rád, je to, jak jsou obvykle čitelné. Podívejte se na to: +Co na příkazech miluji, je jejich obvykle vysoká čitelnost. Podívejte se na to: ```javascript -// Základní příkazy, které vykonávají jednotlivé akce +// Základní příkazy, které provádějí jednotlivé akce const userName = "Alex"; console.log("Hello, world!"); const sum = 5 + 3; ``` -**Toto kód dělá:** +**Co tento kód dělá:** - **Deklaruje** konstantní proměnnou pro uložení jména uživatele -- **Zobrazí** uvítací zprávu do konzole -- **Spočítá** a uloží výsledek matematické operace +- **Zobrazuje** uvítací zprávu v konzoli +- **Vypočítá** a uloží výsledek matematické operace ```javascript -// Výrazy, které interagují s webovými stránkami +// Příkazy, které interagují s webovými stránkami document.title = "My Awesome Website"; document.body.style.backgroundColor = "lightblue"; ``` -**Krok za krokem se děje toto:** -- **Upraví** titulek webové stránky, který se zobrazuje na kartě v prohlížeči -- **Změní** barvu pozadí celého těla stránky +**Krok za krokem, co se děje:** +- **Upravuje** titul webové stránky, který se zobrazuje na záložce prohlížeče +- **Mění** barvu pozadí celého těla stránky ### Proměnné: Paměťový systém vašeho programu -Dobře, **proměnné** jsou upřímně jeden z mých nejoblíbenějších konceptů učit, protože jsou tak podobné věcem, které už každý den používáte! +Dobře, **proměnné** jsou upřímně jedno z mých absolutně nejoblíbenějších pojmů k výuce, protože jsou tak podobné věcem, které každý den používáte! -Zamyslete se na chvíli nad seznamem kontaktů ve vašem telefonu. Nezapamatujete si čísla na všechny – místo toho uložíte „Maminka,“ „Nejlepší přítel“ nebo „Pizzerie, která rozváží do 2 ráno“ a necháte telefon pamatovat si ta skutečná čísla. Proměnné fungují úplně stejně! Jsou to jako označené kontejnery, kde váš program může uložit informace a později je vyhledat pomocí smysluplného jména. +Přemýšlejte o kontaktu ve svém telefonu. Nepamatujete si všechny telefonní čísla – místo toho uložíte „Máma“, „Nejlepší kamarád“ nebo „Pizza, co rozváží do 2 ráno“ a necháte telefon zapamatovat si ta čísla. Proměnné fungují úplně stejně! Jsou jako označené nádoby, kam může váš program uložit informace a později je získat pomocí názvu, který opravdu dává smysl. -Co je opravdu skvělé: proměnné se mohou měnit, zatímco váš program běží (odtud název „proměnlivé“ – vidíte, co udělali?). Stejně jako můžete aktualizovat ten kontakt na pizzerii, když objevíte něco lepšího, proměnné se mohou změnit, když váš program získá nové informace nebo když se situace změní! +To, co je opravdu skvělé: proměnné se mohou měnit, zatímco váš program běží (odtud název „proměnná“ – vidíte, co udělali?). Stejně jako můžete aktualizovat kontakt na pizzérii, když najdete lepší místo, proměnné lze aktualizovat, jak se program učí nové informace nebo situace se mění! -Ukážu vám, jak to může být krásně jednoduché: +Ukážu vám, jak krásně jednoduché to může být: ```javascript // Krok 1: Vytváření základních proměnných @@ -320,10 +321,10 @@ let isRaining = false; ``` **Pochopení těchto konceptů:** -- **Uložení** neměnných hodnot do `const` proměnných (například název stránky) -- **Použití** `let` pro hodnoty, které se mohou během programu měnit -- **Přiřazení** různých datových typů: řetězce (text), čísla a booleany (true/false) -- **Výběr** popisných názvů, které vysvětlují, co každá proměnná obsahuje +- **Ukládejte** neměnné hodnoty do `const` proměnných (např. název webu) +- **Používejte** `let` pro hodnoty, které se mohou měnit během běhu programu +- **Přiřazujte** různé datové typy: řetězce (text), čísla, a booleovské hodnoty (true/false) +- **Vyberte** popisné názvy, které vysvětlují, co každá proměnná obsahuje ```javascript // Krok 2: Práce s objekty pro seskupení souvisejících dat @@ -334,47 +335,47 @@ const weatherData = { }; ``` -**Výše jsme:** +**V předchozím příkladu jsme:** - **Vytvořili** objekt pro seskupení souvisejících informací o počasí -- **Organizovali** více dat pod jedno jméno proměnné -- **Použili** klíč-hodnota páry k jasnému označení každé informace +- **Uspořádali** více dat pod jedním názvem proměnné +- **Použili** páry klíč-hodnota pro jasné pojmenování každé informace ```javascript // Krok 3: Používání a aktualizace proměnných console.log(`${siteName}: Today is ${currentWeather} and ${temperature}°F`); console.log(`Wind speed: ${weatherData.windSpeed} mph`); -// Aktualizace změnitelných proměnných +// Aktualizace proměnných, které lze měnit currentWeather = "cloudy"; temperature = 68; ``` -**Pojďme porozumět každé části:** -- **Zobrazit** informace pomocí šablonových literálů se syntaxí `${}` -- **Přistupovat** k vlastnostem objektu pomocí tečkové notace (`weatherData.windSpeed`) -- **Aktualizovat** proměnné deklarované s `let` pro odrážení měnících se podmínek -- **Kombinovat** více proměnných k vytvoření smysluplných zpráv +**Pojďme si vysvětlit jednotlivé části:** +- **Zobrazujeme** informace pomocí šablonových literálů s `${}` syntaxí +- **Přistupujeme** ke vlastnostem objektu pomocí tečkové notace (`weatherData.windSpeed`) +- **Aktualizujeme** proměnné deklarované pomocí `let`, aby odrážely měnící se podmínky +- **Kombinujeme** více proměnných pro vytvoření smysluplných zpráv ```javascript -// Krok 4: Moderní destrukturalizace pro čistější kód +// Krok 4: Moderní destrukturalizace pro čistší kód const { location, humidity } = weatherData; console.log(`${location} humidity: ${humidity}%`); ``` -**Co musíte vědět:** -- **Extrahovat** specifické vlastnosti z objektů pomocí destrukturalizace přiřazení -- **Vytvářet** nové proměnné automaticky se stejnými názvy jako klíče objektu -- **Zjednodušit** kód vyhnutím se opakované tečkové notaci +**Co je potřeba vědět:** +- **Extrahujte** specifické vlastnosti z objektů pomocí destrukturace +- **Vytvářejte** nové proměnné automaticky se stejnými názvy jako klíče objektu +- **Zjednodušte** kód vyhýbáním se opakovanému používání tečkové notace -### Řízení toku: Naučte svůj program myslet +### Řízení toku: Učíte svůj program myslet -Dobře, tady programování začne být naprosto ohromující! **Řízení toku** je v podstatě učení vašeho programu, jak dělat chytrá rozhodnutí, přesně jako to děláte vy každý den bez přemýšlení. +Dobře, tady to programování začíná být naprosto ohromující! **Řízení toku** znamená naučit svůj program dělat chytrá rozhodnutí, přesně jako vy sami každý den bez přemýšlení. -Představte si toto: dnes ráno jste asi šli něčím jako „Když prší, vezmu si deštník. Když je zima, obléknu si bundu. Když jdu pozdě, vynechám snídani a vezmu si kávu cestou.“ Váš mozek přirozeně sleduje tuto logiku pokud-pak desítkykrát denně! +Představte si, že dnes ráno jste asi prošli něčím jako „Pokud prší, vezmu si deštník. Pokud je zima, obléknu si bundu. Pokud jdu pozdě, přeskočím snídani a vezmu si kávu na cestu.“ Váš mozek přirozeně následuje tuto logiku "jestliže-pak" desítkykrát denně! -Toto dělá programy inteligentními a živými místo toho, aby jen následovaly nudný, předvídatelný scénář. Mohou skutečně pohledět na situaci, vyhodnotit, co se děje, a reagovat vhodně. Je to jako dát programu mozek, který se dokáže přizpůsobit a vybírat si! +To dělá programy chytřejší a živější místo toho, aby jen následovaly nudný, předvídatelný scénář. Skutečně mohou situaci posoudit, vyhodnotit, co se děje, a reagovat vhodným způsobem. Je to jako dát programu mozek, který se dokáže přizpůsobit a dělat volby! -Chcete vidět, jak krásně to funguje? Ukážu vám to: +Chcete vidět, jak to krásně funguje? Ukážu vám to: ```javascript // Krok 1: Základní podmíněná logika @@ -388,11 +389,11 @@ if (userAge >= 18) { } ``` -**Tento kód dělá:** -- **Zkontroluje**, zda uživatel dosáhl věku pro hlasování -- **Provede** různé bloky kódu podle výsledku podmínky -- **Spočítá** a zobrazí, jak dlouho ještě do způsobilosti k volbám, pokud je pod 18 -- **Poskytne** specifickou, užitečnou zpětnou vazbu pro každou situaci +**Co tento kód dělá:** +- **Kontroluje**, zda uživatel splňuje věkový limit pro hlasování +- **Spouští** různé bloky kódu podle výsledku podmínky +- **Vypočítává** a zobrazuje, za jak dlouho bude možné hlasovat, pokud je uživatel mladší 18 let +- **Poskytuje** konkrétní a užitečnou zpětnou vazbu pro každou situaci ```javascript // Krok 2: Více podmínek s logickými operátory @@ -408,25 +409,25 @@ if (userAge >= 18 && hasPermission) { } ``` -**Rozbor, co se tu děje:** -- **Spojíme** více podmínek pomocí operátoru `&&` (a) -- **Vytvoříme** hierarchii podmínek pomocí `else if` pro více scénářů -- **Zpracujeme** všechny možné případy pomocí konečného `else` -- **Poskytujeme** jasnou a praktickou zpětnou vazbu pro každou situaci +**Co se zde děje:** +- **Kombinuje** více podmínek pomocí operátoru `&&` (a) +- **Vytváří** hierarchii podmínek pomocí `else if` pro více scénářů +- **Zpracovává** všechny možné případy pomocí závěrečného příkazu `else` +- **Poskytuje** jasnou a srozumitelnou zpětnou vazbu pro každou situaci ```javascript -// Krok 3: Stručná podmínka s ternárním operátorem +// Krok 3: Srozumitelná podmínka s ternárním operátorem const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; console.log(`Status: ${votingStatus}`); ``` -**Na co si pamatovat:** -- **Použijte** ternární operátor (`? :`) pro jednoduché dvou-variantní podmínky -- **Napište** podmínku první, následovanou `?`, pak pravdivý výsledek, pak `:`, a nakonec nepravdivý výsledek -- **Použijte** tento vzor, když potřebujete přiřadit hodnoty podle podmínek +**Co si zapamatovat:** +- **Používejte** ternární operátor (`? :`) pro jednoduché dvou možnostní podmínky +- **Napište** nejdříve podmínku, pak `?`, následuje hodnota pro pravdu, pak `:`, a nakonec hodnota pro nepravdu +- **Použijte** tento vzor, když potřebujete přiřadit hodnoty na základě podmínek ```javascript -// Krok 4: Řešení více konkrétních případů +// Krok 4: Zpracování více konkrétních případů const dayOfWeek = "Tuesday"; switch (dayOfWeek) { @@ -446,23 +447,23 @@ switch (dayOfWeek) { } ``` -**Tento kód dokáže následující:** -- **Porovná** hodnotu proměnné s více specifickými případy -- **Seskupí** podobné případy dohromady (pracovní dny vs. víkendy) -- **Spustí** odpovídající blok kódu, když najde shodu +**Tento kód plní následující:** +- **Porovnává** hodnotu proměnné s více specifickými případy +- **Skupinuje** podobné případy dohromady (pracovní dny vs. víkendy) +- **Spouští** odpovídající blok kódu, když najde shodu - **Zahrnuje** `default` případ pro neočekávané hodnoty -- **Používá** příkazy `break`, aby zabránil pokračování kódu v dalším případě +- **Používá** příkazy `break` k zabránění pokračování kódu do dalšího případu -> 💡 **Skutečná analogie**: Myslete na řízení toku jako na nejtrpělivější GPS na světě, která vám dává pokyny. Může říct „Pokud je na Main Street provoz, jeďte raději po dálnici. Pokud je dálnice zablokovaná stavbou, zkuste malebnou cestu.“ Programy používají stejný druh podmíněné logiky, aby inteligentně reagovaly na různé situace a vždy poskytly uživatelům nejlepší možný zážitek. +> 💡 **Reálná analogie**: Řízení toku si představte jako nejtrpělivější GPS na světě, která vám dává pokyny. Může říct „Pokud je na Main Street dopravní zácpa, jeďte dálnicí. Pokud je dálnice zablokovaná stavbou, zvolte panoramatickou cestu.“ Programy používají přesně tento typ podmíněné logiky, aby chytře reagovaly na různé situace a vždy uživatelům poskytly co nejlepší zážitek. -### 🎯 **Ověření konceptů: Mistrovství stavebních kamenů** +### 🎯 **Kontrola porozumění: Ovládnutí základních stavebních prvků** -**Podívejme se, jak na tom jste se základy:** -- Dokážete vysvětlit rozdíl mezi proměnnou a příkazem svými slovy? -- Zamyslete se nad reálnou situací, kdy byste použili rozhodnutí typu pokud-pak (například náš příklad s hlasováním) -- Co vás na programovací logice nejvíc překvapilo? +**Podívejme se, jak rozumíte základům:** +- Dokážete vlastními slovy vysvětlit rozdíl mezi proměnnou a příkazem? +- Vymyslete reálný příklad, kde byste použili rozhodovací konstrukci if-then (jako náš příklad s hlasováním) +- Co vás v logice programování nejvíce překvapilo? -**Rychlý posilovač sebevědomí:** +**Rychlé povzbuzení:** ```mermaid flowchart LR A["📝 Příkazy
(Instrukce)"] --> B["📦 Proměnné
(Úložiště)"] --> C["🔀 Řízení toku
(Rozhodnutí)"] --> D["🎉 Fungující program!"] @@ -472,27 +473,27 @@ flowchart LR style C fill:#2196f3 style D fill:#ff4081 ``` -✅ **Co bude dál**: Budeme mít absolutní zábavu, když se do těchto konceptů ponoříme hlouběji na naší úžasné cestě spolu! Teď se jen soustřeďte na pocit vzrušení z těch všech úžasných možností před vámi. Konkrétní dovednosti a techniky přirozeně přijdou, jak budeme společně procvičovat – slibuji, že to bude mnohem zábavnější, než možná očekáváte! +✅ **Co přijde dál**: Budeme mít absolutní radost, když se společně ponoříme hlouběji do těchto konceptů! Teď se jen soustřeďte na pocit vzrušení z nekonečných možností před vámi. Konkrétní dovednosti a techniky přijdou přirozeně, když budeme společně trénovat – slibuji, že to bude zábava, jakou jste nečekali! ## Nástroje řemesla -Dobře, tady se upřímně začínám tak těšit, že se sotva udržím! 🚀 Půjdeme mluvit o neuvěřitelných nástrojích, které vám dají pocit, jako byste právě dostali klíče od digitální vesmírné lodi. +Dobře, tady se opravdu nemohu ubránit nadšení! 🚀 Brzy si povíme o úžasných nástrojích, které vás přenesou do role, kdy budete mít klíče k digitálnímu vesmírnému plavidlu. -Víte, jak má kuchař ty dokonale vyvážené nože, které jsou prodloužením jeho rukou? Nebo jak má hudebník tu jedinou kytaru, která jakmile se jí dotkne, jako by zpívala? No, vývojáři mají svoji vlastní verzi těchto magických nástrojů a tady je něco, co vás opravdu ohromí – většina z nich je úplně zdarma! +Víte, jak má kuchař perfektně vyvážené nože, které jsou jako pokračování jeho rukou? Nebo jak má muzikant tu jednu kytaru, která zní, jakmile se jí dotkne? Vývojáři mají své vlastní verze těchto magických nástrojů, a teď přijde část, která vás opravdu ohromí – většina z nich je úplně zdarma! -Skoro skáču na židli s nadšením, že vám je můžu ukázat, protože úplně změnily způsob, jak stavíme software. Mluvíme o asistentech pro psaní kódu poháněných umělou inteligencí (nemyslím si to!), cloudových prostředích, kde můžete stavět celé aplikace doslova odkudkoli s Wi-Fi, a ladicích nástrojích tak sofistikovaných, že jsou jako rentgenové vidění pro vaše programy. +Těším se, že vám je ukážu, protože zcela změnily způsob, jak stavíme software. Mluvíme o asistentech pro psaní kódu poháněných umělou inteligencí (to vážně myslím!), cloudových prostředích, kde můžete tvořit celé aplikace z prakticky kdekoli s Wi-Fi, a ladicích nástrojích tak sofistikovaných, že jsou jako rentgenové vidění pro vaše programy. -A tady je část, která mi stále dává husí kůži: nejsou to „nástroje pro začátečníky“, které rychle přerostete. Jsou to úplně stejné profesionální nástroje, které používají vývojáři ve Google, Netflixu a v tom indie vývojářském studiu, které máte rádi, právě teď. Budete se při jejich používání cítit jako fakt profíci! +A teď část, která mě stále dojímá: to nejsou nástroje pro začátečníky, ze kterých vyrostete. Jsou to přesně ty profesionální nástroje, které používají vývojáři ve firmách jako Google, Netflix a ta nezávislá vývojářská studio, která máte rádi právě teď. S nimi se budete cítit jako opravdový profík! ```mermaid graph TD - A["💡 Váš nápad"] --> B["⌨️ Editor kódu
(VS Code)"] - B --> C["🌐 DevTools prohlížeče
(Testování a ladění)"] + A["💡 Váš nápad"] --> B["⌨️ Kódový editor
(VS Code)"] + B --> C["🌐 Nástroje prohlížeče
(Testování a ladění)"] C --> D["⚡ Příkazový řádek
(Automatizace a nástroje)"] D --> E["📚 Dokumentace
(Učení a reference)"] - E --> F["🚀 Úžasná webová aplikace!"] + E --> F["🚀 Skvělá webová aplikace!"] - B -.-> G["🤖 AI Asistent
(GitHub Copilot)"] + B -.-> G["🤖 AI asistent
(GitHub Copilot)"] C -.-> H["📱 Testování zařízení
(Responzivní design)"] D -.-> I["📦 Správci balíčků
(npm, yarn)"] E -.-> J["👥 Komunita
(Stack Overflow)"] @@ -506,103 +507,104 @@ graph TD ``` ### Editory kódu a IDE: Vaši noví digitální nejlepší přátelé -Pojďme mluvit o editorech kódu – ty se vážně chystají stát vašimi novými oblíbenými místy! Považujte je za své osobní útočiště programování, kde strávíte většinu času tvorbou a zdokonalováním svých digitálních výtvorů. +Povíme si něco o editorech kódu – ty se brzy stanou vaším nejoblíbenějším místem na práci! Představte si je jako osobní svatyni programování, kde strávíte většinu času tvořením a vylepšováním svých digitálních výtvorů. -Ale to, co je na moderních editorech naprosto kouzelné, je, že nejsou jen obyčejné textové editory. Jsou jako mít nejchytřejšího a nejpodpůrnějšího mentora programování, který sedí přímo vedle vás 24/7. Chytají vaše překlepy dřív, než je vůbec zaregistrujete, navrhují vylepšení, která vás nechají vypadat jako géniové, pomáhají vám pochopit, co každý kousek kódu dělá, a některé dokonce předpovídají, co chcete napsat, a nabídnou vám dokončit vaše myšlenky! +A teď přijde to kouzlo moderních editorů: nejsou to jen fancy textové editory. Jsou to jako mít po boku nejbystřejšího, nejpodporujícího mentora programování nonstop. Chytí vaše překlepy dříve, než si jich všimnete, navrhnou vylepšení, která vás udělají za génia, pomohou vám pochopit, co každý kousek kódu dělá, a některé dokonce dokážou předpovědět, co budete chtít napsat, a nabídnout dokončení! -Pamatuji si, když jsem poprvé objevil automatické doplňování – doslova jsem měl pocit, že žiju v budoucnosti. Začnete něco psát a editor vám řekne: „Hej, nemyslel jsi na tuto funkci, která dělá přesně to, co potřebuješ?“ Je to jako mít mentálního čtecího kamaráda při kódování! +Pamatuji si, když jsem poprvé objevila automatické doplňování – měl jsem pocit, že žiju v budoucnosti. Začnete něco psát a editor říká: „Měl jsi na mysli tuhle funkci, která přesně dělá, co potřebuješ?“ Je to jako mít telepatického parťáka pro kódování! **Co dělá tyto editory tak úžasnými?** -Moderní editory kódu nabízejí působivé spektrum funkcí navržených pro zvýšení vaší produktivity: +Moderní editory kódu nabízejí širokou škálu funkcí, které zvyšují vaši produktivitu: | Funkce | Co dělá | Proč pomáhá | |---------|--------------|--------------| -| **Zvýraznění syntaxe** | Barevně odlišuje různé části kódu | Usnadňuje čtení kódu a hledání chyb | -| **Automatické doplňování** | Navrhuje kód při psaní | Zrychluje psaní kódu a snižuje překlepy | -| **Nástroje ladění** | Pomáhají najít a opravit chyby | Šetří hodiny času při hledání problémů | -| **Rozšíření** | Přidávají specializované funkce | Přizpůsobí editor jakékoli technologii | -| **Asistenti AI** | Navrhují kód a vysvětlení | Zrychlují učení a produktivitu | +| **Zvýraznění syntaxe** | Barevně odliší části kódu | Usnadňuje čtení kódu a hledání chyb | +| **Automatické doplňování** | Nabízí kód při psaní | Urychluje psaní a snižuje překlepy | +| **Nástroje pro ladění** | Pomáhá najít a opravit chyby | Šetří hodiny hledání závad | +| **Rozšíření** | Přidává specializované funkce | Přizpůsobí editor jakékoli technologii | +| **AI asistenti** | Nabízejí kód a vysvětlení | Urychlují učení a produktivitu | -> 🎥 **Video zdroj**: Chcete vidět tyto nástroje v akci? Podívejte se na toto [Tools of the Trade video](https://youtube.com/watch?v=69WJeXGBdxg) pro komplexní přehled. +> 🎥 **Video zdroj**: Chcete vidět tyto nástroje v akci? Podívejte se na toto video [Tools of the Trade video](https://youtube.com/watch?v=69WJeXGBdxg) pro komplexní přehled. #### Doporučené editory pro webový vývoj -**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (zdarma) -- Nejoblíbenější mezi webovými vývojáři -- Vynikající ekosystém rozšíření -- Vestavěný terminál a integrace s Gitem -- **Nezbytná rozšíření**: - - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI-poháněné návrhy kódu - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Spolupráce v reálném čase - - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - Automatické formátování kódu - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Odhalování překlepů v kódu - -**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (placené, zdarma pro studenty) -- Pokročilé nástroje pro ladění a testování -- Inteligentní dokončování kódu -- Vestavěná správa verzí - -**Cloudová IDE** (různá cenová politika) -- [GitHub Codespaces](https://github.com/features/codespaces) - Plnohodnotný VS Code v prohlížeči -- [Replit](https://replit.com/) - Skvělé pro učení a sdílení kódu -- [StackBlitz](https://stackblitz.com/) - Okamžitý full-stack webový vývoj +**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (zdarma) +- Nejoblíbenější mezi webovými vývojáři +- Skvělý ekosystém rozšíření +- Integrovaný terminál a Git +- **Nutná rozšíření**: + - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) – AI navrhování kódu + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) – Spolupráce v reálném čase + - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) – Automatické formátování kódu + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) – Kontrola překlepů v kódu + +**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (placené, zdarma pro studenty) +- Pokročilé nástroje pro ladění a testování +- Inteligentní dokončování kódu +- Integrovaná správa verzí + +**Cloudová IDE** (různé ceny) +- [GitHub Codespaces](https://github.com/features/codespaces) – Plný VS Code v prohlížeči +- [Replit](https://replit.com/) – Skvělé pro učení a sdílení kódu +- [StackBlitz](https://stackblitz.com/) – Okamžitý full-stack webový vývoj > 💡 **Tip na začátek**: Začněte s Visual Studio Code – je zdarma, široce používaný v oboru a má obrovskou komunitu vytvářející užitečné návody a rozšíření. + ### Webové prohlížeče: Vaše tajná vývojářská laboratoř -Dobře, připravte se, že vám to úplně vyrazí dech! Víte, jak jste používali prohlížeče k prohlížení sociálních sítí a sledování videí? Ukázalo se, že celý čas skrývají tuto neuvěřitelnou tajnou vývojářskou laboratoř, která čeká, až ji objevíte! +Dobře, připravte se, že vám to úplně vyrazí dech! Víš, jak používáš prohlížeče k procházení sociálních sítí a sledování videí? Ukazuje se, že celý čas skrývaly tu úžasnou tajnou laboratoř pro vývojáře, která čekala, až ji objevíš! -Pokaždé, když kliknete pravým tlačítkem na webovou stránku a vyberete „Prozkoumat prvek,“ otevírá se vám skrytý svět vývojářských nástrojů, které jsou upřímně silnější než některé drahé programy, za které jsem kdysi platil stovky dolarů. Je to jako objevit, že vaše obyčejná domácí kuchyně skrývá profesionální kuchařskou laboratoř za tajným panelem! -Poprvé, když mi někdo ukázal nástroje pro vývojáře v prohlížeči, strávil jsem asi tři hodiny jen klikáním a říkal si: „POČKEJ, TO MŮŽE DĚLAT I TO?“ Doslova můžete upravovat jakoukoli webovou stránku v reálném čase, přesně vidět, jak rychle se všechno načítá, testovat, jak vaše stránka vypadá na různých zařízeních, a dokonce ladit JavaScript jako opravdový profík. Je to naprosto úžasné! +Pokaždé, když kliknete pravým tlačítkem na webovou stránku a vyberete „Prozkoumat prvek“, otevíráte skrytý svět vývojářských nástrojů, které jsou upřímně mocnější než některé drahé programy, za které jsem dřív platila stovky dolarů. Je to jako objevit, že vaše stará kuchyň skrývá profesionální kuchařskou laboratoř za tajným panelem! +Poprvé, když mi někdo ukázal DevTools v prohlížeči, strávil jsem asi tři hodiny jen klikáním a říkáním „POČKEJ, TO UMÍ I TOHLE?!“ Doslova můžete upravovat jakoukoli webovou stránku v reálném čase, přesně vidět, jak rychle se vše načítá, testovat, jak vypadá vaše stránka na různých zařízeních, a dokonce ladit JavaScript jako naprostý profík. Je to naprosto ohromující! -**Tady je důvod, proč jsou prohlížeče vaším tajným zbraněm:** +**Tady je důvod, proč jsou prohlížeče vaším tajným trikem:** -Když vytváříte webovou stránku nebo webovou aplikaci, potřebujete vidět, jak vypadá a chová se v reálném světě. Prohlížeče nejen zobrazují vaši práci, ale také poskytují podrobné informace o výkonu, přístupnosti a možných problémech. +Když vytváříte web nebo webovou aplikaci, potřebujete vidět, jak vypadá a jak se chová v reálném světě. Prohlížeče nejen zobrazují vaši práci, ale také poskytují podrobnou zpětnou vazbu o výkonu, přístupnosti a potenciálních problémech. -#### Nástroje pro vývojáře v prohlížeči (DevTools) +#### Vývojářské nástroje prohlížeče (DevTools) -Moderní prohlížeče obsahují komplexní sady nástrojů pro vývoj: +Moderní prohlížeče obsahují komplexní vývojové nástroje: | Kategorie nástroje | Co dělá | Příklad použití | -|---------------|--------------|------------------| -| **Inspektor elementů** | Zobrazení a úprava HTML/CSS v reálném čase | Úprava stylu pro okamžité výsledky | -| **Konzole** | Zobrazení chybových zpráv a testování JavaScriptu | Ladění problémů a experimentování s kódem | -| **Monitor sítě** | Sledování načítání zdrojů | Optimalizace výkonu a doby načítání | -| **Kontrola přístupnosti** | Testování inkluzivního designu | Zajištění funkčnosti webu pro všechny uživatele | -| **Simulátor zařízení** | Náhled na různých velikostech obrazovek | Testování responzivního designu bez více zařízení | +|-------------------|---------|-----------------| +| **Inspektor prvků** | Zobrazí a upraví HTML/CSS v reálném čase | Úprava stylů pro okamžité výsledky | +| **Konzole** | Zobrazí chybové zprávy a testuje JavaScript | Ladění problémů a experimentování s kódem | +| **Monitor sítě** | Sleduje načítání zdrojů | Optimalizace výkonu a doby načítání | +| **Kontrola přístupnosti** | Testuje inkluzivní design | Zajištění funkčnosti pro všechny uživatele | +| **Simulátor zařízení** | Náhled na různých velikostech obrazovky | Testování responzivního designu bez více zařízení | #### Doporučené prohlížeče pro vývoj -- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - Průmyslový standard DevTools s rozsáhlou dokumentací -- **[Firefox](https://developer.mozilla.org/docs/Tools)** - Skvělé nástroje pro CSS Grid a přístupnost -- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Postavený na Chromium s vývojářskými zdroji od Microsoftu +- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** – Průmyslový standard DevTools s rozsáhlou dokumentací +- **[Firefox](https://developer.mozilla.org/docs/Tools)** – Výborné nástroje pro CSS Grid a přístupnost +- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** – Postavený na Chromium s vývojářskými zdroji od Microsoftu -> ⚠️ **Důležitý tip pro testování**: Vždy testujte své weby v několika prohlížečích! To, co funguje perfektně v Chromu, může vypadat jinak v Safari nebo Firefoxu. Profesionální vývojáři testují ve všech hlavních prohlížečích, aby zajistili konzistentní uživatelský zážitek. +> ⚠️ **Důležitý tip pro testování**: Vždy testujte své weby ve více prohlížečích! To, co funguje perfektně v Chromu, může vypadat odlišně v Safari nebo Firefoxu. Profesionální vývojáři testují napříč všemi hlavními prohlížeči, aby zajistili konzistentní uživatelský zážitek. -### Nástroje příkazové řádky: Vaše brána do supermocí vývojáře +### Nástroje příkazové řádky: vaše brána k vývojářským supermocím -Dobře, pojďme mít teď upřímný moment ohledně příkazové řádky, protože chci, abyste to slyšeli od někoho, kdo tomu skutečně rozumí. Když jsem ji poprvé viděl – jen tu strašidelnou černou obrazovku s blikajícím textem – doslova jsem si pomyslel: „Ne, rozhodně ne! To vypadá jako něco z hackerského filmu z 80. let a já na to opravdu nejsem dost chytrý!“ 😅 +Dobře, pojďme si upřímně promluvit o příkazové řádce, protože chci, abyste to slyšeli od někoho, kdo jí opravdu rozumí. Když jsem ji poprvé viděl – jen tu děsivou černou obrazovku s blikajícím textem – doslova jsem si pomyslel: „Ne, to rozhodně ne! Vypadá to jako něco z hackerovského filmu z 80. let a já na to rozhodně nejsem dost chytrý!“ 😅 -Ale tady je to, co bych si přál, aby mi tehdy někdo řekl, a co říkám vám teď: příkazová řádka není strašidelná – je to vlastně jako mít přímý rozhovor s vaším počítačem. Představte si to jako rozdíl mezi objednávkou jídla přes stylovou aplikaci s obrázky a menu (což je hezké a snadné) oproti vstupu do vaší oblíbené místní restaurace, kde kuchař přesně zná, co máte rád, a umí vytvořit něco perfektního jen proto, že řeknete „překvap mě něčím úžasným.“ +Ale tady je, co bych si přál, aby mi někdo tehdy řekl, a co vám říkám teď: příkazová řádka není děsivá – je to vlastně jako mít přímou konverzaci s počítačem. Myslete na to jako na rozdíl mezi objednávkou jídla přes hezkou aplikaci s obrázky a menu (což je fajn a snadné) versus osobní návštěvou vaší oblíbené místní restaurace, kde kuchař přesně ví, co máte rádi, a dokáže uvařit něco perfektního jen proto, že řeknete „překvap mě něčím úžasným“. -Příkazová řádka je místo, kam chodí vývojáři, aby se cítili jako opravdoví kouzelníci. Napíšete pár zdánlivě magických slov (dobře, jsou to jen příkazy, ale mají magický nádech!), stisknete enter a BUM – vytvořili jste celé struktury projektů, nainstalovali výkonné nástroje z celého světa, nebo nasadili svou aplikaci na internet, aby ji mohly vidět miliony lidí. Jakmile ochutnáte tu moc, je to opravdu návykové! +Na příkazovou řádku chodí vývojáři, aby se cítili jako úplní kouzelníci. Napíšete pár na první pohled magických slov (dobře, jsou to jen příkazy, ale působí magicky!), stisknete enter a HOP – vytvořili jste celé struktury projektů, nainstalovali výkonné nástroje z celého světa, nebo nasadili svou aplikaci na internet milionům lidí. Jakmile okusíte tu sílu, je to fakt návykové! **Proč se příkazová řádka stane vaším oblíbeným nástrojem:** -I když jsou grafická rozhraní skvělá pro mnoho úkolů, příkazová řádka vyniká v automatizaci, přesnosti a rychlosti. Mnoho vývojářských nástrojů funguje primárně přes příkazové rozhraní a naučit se je efektivně používat může výrazně zlepšit vaši produktivitu. +I když jsou grafická rozhraní skvělá pro mnoho úkolů, příkazová řádka vyniká v automatizaci, přesnosti a rychlosti. Mnoho vývojových nástrojů funguje hlavně přes příkazovou řádku a naučit se je efektivně používat může výrazně zlepšit vaši produktivitu. ```bash -# Krok 1: Vytvořte adresář projektu a přejděte do něj +# Krok 1: Vytvořte a přejděte do adresáře projektu mkdir my-awesome-website cd my-awesome-website ``` -**Co tento kód dělá:** -- **Vytvoří** nový adresář s názvem "my-awesome-website" pro váš projekt -- **Přejde** do nově vytvořeného adresáře, aby mohl začít pracovat +**Tento kód dělá toto:** +- **Vytvoří** novou složku nazvanou „my-awesome-website“ pro váš projekt +- **Přejde** do nově vytvořené složky, aby mohl začít pracovat ```bash # Krok 2: Inicializujte projekt s package.json @@ -614,10 +616,10 @@ npm install --save-dev @eslint/js ``` **Krok za krokem, co se děje:** -- **Inicializuje** nový Node.js projekt s výchozími nastaveními pomocí `npm init -y` +- **Inicializuje** nový projekt Node.js s výchozím nastavením pomocí `npm init -y` - **Nainstaluje** Vite jako moderní nástroj pro rychlý vývoj a produkční sestavení -- **Přidá** Prettier pro automatické formátování kódu a ESLint pro kontrolu kvality -- **Použije** přepínač `--save-dev`, aby tyto závislosti byly jen pro vývoj +- **Přidá** Prettier pro automatické formátování kódu a ESLint pro kontrolu kvality kódu +- **Používá** přepínač `--save-dev` k označení těchto závislostí jako pouze pro vývoj ```bash # Krok 3: Vytvořte strukturu projektu a soubory @@ -628,156 +630,156 @@ echo 'My Site

Hello Wo npx vite ``` -**Ve výše uvedeném jsme:** -- **Uspořádali** náš projekt vytvořením samostatných složek pro zdrojový kód a assety +**Výše uvedeným jsme:** +- **Uspořádali** náš projekt vytvořením samostatných složek pro zdrojový kód a zdroje - **Vygenerovali** základní HTML soubor s správnou strukturou dokumentu -- **Spustili** vývojový server Vite pro živé aktualizace a horkou náhradu modulů +- **Spustili** Vite vývojový server pro živé aktualizace a hot module replacement -#### Základní nástroje příkazové řádky pro webový vývoj +#### Nezbytné nástroje příkazové řádky pro webový vývoj | Nástroj | Účel | Proč ho potřebujete | -|------|---------|-----------------| -| **[Git](https://git-scm.com/)** | Správa verzí | Sledování změn, spolupráce s ostatními, zálohování práce | -| **[Node.js & npm](https://nodejs.org/)** | JavaScript runtime & správa balíčků | Spouštění JavaScriptu mimo prohlížeče, instalace moderních vývojových nástrojů | -| **[Vite](https://vitejs.dev/)** | Nástroj pro sestavení & dev server | Bleskový vývoj s horkou náhradou modulů | -| **[ESLint](https://eslint.org/)** | Kvalita kódu | Automatické nalezení a oprava problémů v JavaScriptu | -| **[Prettier](https://prettier.io/)** | Formátování kódu | Udržování kódu konzistentně formátovaného a čitelného | +|---------|-------|--------------------| +| **[Git](https://git-scm.com/)** | Správa verzí | Sleduje změny, umožňuje spolupráci a zálohy práce | +| **[Node.js & npm](https://nodejs.org/)** | JavaScript runtime a správa balíčků | Spouští JavaScript mimo prohlížeče, instaluje moderní vývojové nástroje | +| **[Vite](https://vitejs.dev/)** | Nástroj pro sestavení a dev server | Bleskově rychlý vývoj s hot module replacement | +| **[ESLint](https://eslint.org/)** | Kvalita kódu | Automaticky najde a opraví problémy v JavaScriptu | +| **[Prettier](https://prettier.io/)** | Formátování kódu | Udržuje kód konzistentně formátovaný a přehledný | -#### Platformně specifické možnosti +#### Platformově specifické možnosti **Windows:** -- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Moderní, plně vybavený terminál -- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Výkonné skriptovací prostředí -- **[Příkazový řádek](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Tradiční Windows příkazová řádka +- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** – Moderní a funkčně bohatý terminál +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 – Výkonné skriptovací prostředí +- **[Příkazový řádek](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 – Tradiční Windows příkazová řádka **macOS:** -- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - Vestavěná terminálová aplikace -- **[iTerm2](https://iterm2.com/)** - Vylepšený terminál s pokročilými funkcemi +- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 – Vestavěná terminálová aplikace +- **[iTerm2](https://iterm2.com/)** – Vylepšený terminál s pokročilými funkcemi **Linux:** -- **[Bash](https://www.gnu.org/software/bash/)** 💻 - Standardní linuxová shell -- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - Pokročilý terminálový emulátor +- **[Bash](https://www.gnu.org/software/bash/)** 💻 – Standardní shell na Linuxu +- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** – Pokročilý terminálový emulátor > 💻 = Předinstalováno v operačním systému -> 🎯 **Cesta učení**: Začněte se základními příkazy jako `cd` (změna adresáře), `ls` nebo `dir` (výpis souborů) a `mkdir` (vytvoření složky). Procvičujte moderní pracovní příkazy jako `npm install`, `git status` a `code .` (otevře současný adresář ve VS Code). Jakmile si zvyknete, přirozeně osvojíte více pokročilých příkazů a automatizačních technik. +> 🎯 **Cesta učení**: Začněte s základními příkazy jako `cd` (změna složky), `ls` nebo `dir` (výpis souborů) a `mkdir` (vytvoření složky). Procvičujte moderní pracovní příkazy jako `npm install`, `git status` a `code .` (otevření aktuální složky ve VS Code). Jakmile získáte jistotu, přirozeně se naučíte pokročilejší příkazy a automatizační techniky. -### Dokumentace: Váš vždy dostupný učitel a mentor +### Dokumentace: váš vždy dostupný učitel -Dobře, prozradím vám malý tajemství, které vám pomůže cítit se mnohem lépe jako začátečník: i ti nejzkušenější vývojáři stráví obrovskou část svého času čtením dokumentace. A není to proto, že by nevěděli, co dělají – to je vlastně známka moudrosti! +Dobře, prozradím vám malé tajemství, které vám pomůže cítit se mnohem lépe jako začátečník: i ti nejzkušenější vývojáři tráví obrovskou část svého času čtením dokumentace. A není to proto, že by nevěděli, co dělají – je to vlastně znamení moudrosti! -Představte si dokumentaci jako přístup k nejtrpělivějším, nejvzdělanějším učitelům světa, kteří jsou k dispozici 24/7. Zasekli jste se na problému ve 2 ráno? Dokumentace je tam s teplým virtuálním objetím a přesně vám podá odpověď, kterou potřebujete. Chcete se naučit o nějaké skvělé nové funkci, o které všichni mluví? Dokumentace to má připravené s příklady krok za krokem. Snažíte se pochopit, proč něco funguje tak, jak to funguje? Hádejte co – dokumentace je připravená vám to vysvětlit způsobem, který vám to konečně rozsvítí! +Považujte dokumentaci za přístup k nejtrpělivějším a nejzkušenějším učitelům na světě, kteří jsou k dispozici 24/7. Máte problém v 2 ráno? Dokumentace je tu s virtuálním teplým objetím a přesně tou odpovědí, kterou potřebujete. Chcete se naučit o nějaké skvělé nové funkci, o které všechny mluví? Dokumentace vás provede krok za krokem s příklady. Snažíte se pochopit, proč něco funguje tak, jak to funguje? Tušíte správně – dokumentace vám to vysvětlí způsobem, který vám konečně dá smysl! -Tady je něco, co úplně změnilo můj pohled: svět webového vývoje se hýbe neuvěřitelně rychle a nikdo (mám na mysli opravdu nikdo!) nemá všechno v paměti. Viděl jsem zkušené vývojáře s 15+ lety praxe, jak vyhledávají základní syntaxi, a víte co? To není trapné – to je chytré! Není to o perfektní paměti; je to o tom vědět, kde rychle najít spolehlivé odpovědi a umět je správně použít. +Něco, co mi úplně změnilo pohled: svět webového vývoje se pohybuje neuvěřitelně rychle a nikdo (myslím naprosto nikdo!) nemá všechno v paměti. Viděl jsem zkušené vývojáře s 15+ lety praxe hledat základní syntaxi, a víte co? Není to trapné – je to chytré! Nejde o perfektní paměť, ale o vědění, kde rychle najít spolehlivé odpovědi a jak je aplikovat. -**Tady se odehrává ta opravdová magie:** +**Tady se děje ta opravdová magie:** -Profesionální vývojáři tráví výraznou část svého času čtením dokumentace – ne proto, že by nevěděli, co dělají, ale protože oblast webového vývoje se tak rychle vyvíjí, že udržet krok vyžaduje neustálé učení. Skvělá dokumentace vám pomůže pochopit nejen *jak* něco používat, ale také *proč* a *kdy* to použít. +Profesionální vývojáři tráví významnou část svého času čtením dokumentace – ne proto, že nevědí, co dělají, ale protože svět webového vývoje se rychle mění a udržet krok znamená se nepřetržitě učit. Skvělá dokumentace vám pomůže pochopit nejen *jak* něco používat, ale *proč* a *kdy* to použít. #### Základní zdroje dokumentace **[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** -- Zlatý standard dokumentace webových technologií -- Obsáhlé průvodce pro HTML, CSS a JavaScript -- Zahrnuje informace o kompatibilitě prohlížečů -- Obsahuje praktické příklady a interaktivní ukázky +- Zlatý standard pro dokumentaci webových technologií +- Komplexní návody pro HTML, CSS a JavaScript +- Obsahuje informace o kompatibilitě v prohlížečích +- Nabízí praktické příklady a interaktivní ukázky -**[Web.dev](https://web.dev)** (od Google) -- Moderní doporučené postupy ve webovém vývoji +**[Web.dev](https://web.dev)** (Google) +- Nejlepší moderní praktiky webového vývoje - Průvodce optimalizací výkonu - Principy přístupnosti a inkluzivního designu - Případové studie z reálných projektů **[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** -- Vývojářské zdroje pro prohlížeč Edge -- Průvodce pro progresivní webové aplikace -- Přehled multiplatformního vývoje +- Zdroje pro vývoj v prohlížeči Edge +- Průvodci pro progresivní webové aplikace +- Pohledy na multiplatformní vývoj **[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** -- Strukturované výukové plány -- Videokurzy od expertů z oboru -- Praktické cvičení s kódováním +- Strukturované kurikulum +- Video kurzy od odborníků z praxe +- Praktická cvičení s kódováním -> 📚 **Strategie studia**: Nesnažte se dokumentaci memorovat – místo toho se naučte, jak ji efektivně procházet. Přidejte si do záložek často používané reference a trénujte využívání vyhledávání pro rychlé nalezení konkrétních informací. +> 📚 **Studijní strategie**: Nesnažte se dokumentaci memorovat – místo toho se naučte, jak se v ní efektivně orientovat. Přidejte si do záložek často používané odkazy a procvičujte, jak používat vyhledávání k rychlému nalezení konkrétních informací. -### 🔧 **Otestujte své mistrovství s nástroji: Co na vás nejvíc zapůsobilo?** +### 🔧 **Ověření ovládání nástrojů: Co na vás nejvíc zapůsobilo?** -**Zastavte se na chvíli a zamyslete se:** -- Který nástroj si chcete vyzkoušet jako první? (Žádná špatná odpověď!) -- Stále je pro vás příkazová řádka zastrašující nebo vás to láká ji poznat? -- Dokážete si představit, že byste používali nástroje pro vývojáře v prohlížeči k nahlédnutí pod pokličku svých oblíbených webů? +**Chvilku se zamyslete:** +- Který nástroj chcete zkusit jako první? (Špatná odpověď neexistuje!) +- Stále je pro vás příkazová řádka děsivá, nebo vás zajímá? +- Dokážete si představit, že použijete DevTools prohlížeče a nahlédnete pod pokličku svých oblíbených webů? ```mermaid pie title "Čas vývojáře strávený s nástroji" - "Kódový editor" : 40 + "Editor kódu" : 40 "Testování v prohlížeči" : 25 "Příkazový řádek" : 15 "Čtení dokumentace" : 15 "Ladění" : 5 ``` -> **Zajímavost**: Většina vývojářů tráví asi 40 % času v editoru kódu, ale všimněte si, kolik času jde na testování, učení a řešení problémů. Programování není jen psaní kódu – je to vytváření zážitků! +> **Zajímavost**: Většina vývojářů tráví asi 40 % času ve svém kódovacím editoru, ale všimněte si, kolik času jde na testování, učení a řešení problémů. Programování není jen psaní kódu – je to tvorba zážitků! -✅ **K zamyšlení**: Tady je něco zajímavého k přemýšlení – jak myslíte, že se nástroje pro tvorbu webů (vývoj) liší od nástrojů pro návrh vzhledu (design)? Je to jako rozdíl mezi architektem, který navrhuje krásný dům, a stavebním dodavatelem, který ho skutečně postaví. Obě role jsou klíčové, ale vyžadují odlišnou sadu nástrojů! Takové myšlení vám opravdu pomůže vidět širší obraz, jak weby vznikají. +✅ **Zamyslete se**: Tady je zajímavá otázka – jak si myslíte, že se nástroje pro tvorbu webů (vývoj) liší od nástrojů na návrh jejich vzhledu (design)? Je to jako rozdíl mezi architektem, který navrhuje krásný dům, a dodavatelem, který ho skutečně staví. Oba jsou klíčoví, ale potřebují odlišné nástroje! Takové uvažování vám opravdu pomůže vidět širší obraz, jak weby vznikají. ## Výzva GitHub Copilot Agenta 🚀 Použijte režim Agenta k dokončení následující výzvy: -**Popis:** Prozkoumejte funkce moderního kódovacího editoru nebo IDE a ukažte, jak může zlepšit váš pracovní tok jako webový vývojář. +**Popis:** Prozkoumejte funkce moderního kódovacího editoru nebo IDE a ukažte, jak může zlepšit váš pracovní postup jako webového vývojáře. -**Zadání:** Vyberte si kódovací editor nebo IDE (například Visual Studio Code, WebStorm nebo cloudové IDE). Vyjmenujte tři funkce nebo rozšíření, které vám pomáhají psát, ladit nebo udržovat kód efektivněji. U každé krátce vysvětlete, jak zlepšuje váš pracovní proces. +**Zadání:** Vyberte si kódovací editor nebo IDE (např. Visual Studio Code, WebStorm nebo cloudové IDE). Uveďte tři funkce nebo rozšíření, které vám pomáhají efektivněji psát, ladit nebo udržovat kód. U každé krátce vysvětlete, jak vaši práci zlepšuje. --- ## 🚀 Výzva -**Tak dobře, detektive, jsi připraven na svůj první případ?** +**Tak šéfe, připraven na svůj první případ?** -Teď když máš tento skvělý základ, čeká tě dobrodružství, které ti pomůže vidět, jak neuvěřitelně různorodý a fascinující je svět programování. A poslouchej – není to o psaní kódu, takže žádný tlak! Představ si sám sebe jako detektiva programovacích jazyků na svém úplně prvním vzrušujícím případě! +Teď, když máte skvělé základy, mám pro vás dobrodružství, které vám pomůže vidět, jak neuvěřitelně rozmanitý a fascinující je svět programování. A pozor – tady nejde o psaní kódu, takže netlačte na pilu! Považujte se za detektiva programovacích jazyků na vašem úplně prvním vzrušujícím případu! -**Tvůj úkol, pokud se rozhodneš ho přijmout:** -1. **Staň se objevitelem jazyků**: Vyber tři programovací jazyky z úplně odlišných světů – třeba jeden pro tvorbu webů, jeden pro mobilní aplikace a jeden pro vědecká data. Najdi příklady stejného jednoduchého úkolu napsaného v každém jazyce. Slibuju, že tě překvapí, jak odlišně mohou vypadat, i když dělají úplně to samé! +**Vaše mise, pokud ji přijmete:** +1. **Staňte se průzkumníkem jazyků**: Vyberte tři programovací jazyky z úplně jiných světů – třeba jeden pro tvorbu webů, jeden pro mobilní aplikace a jeden pro vědecké zpracování dat. Najděte příklady stejného jednoduchého úkolu, napsané v každém jazyce. Slíbím vám, že budete naprosto ohromeni tím, jak mohou vypadat rozdílně, i když dělají úplně tu samou věc! -2. **Získej jejich příběhy vzniku**: Co dělá každý jazyk výjimečným? Tady je zajímavý fakt – každý programovací jazyk vznikl, protože někdo řekl: „Víš co? Musí existovat lepší způsob, jak vyřešit tento konkrétní problém.“ Můžeš zjistit, jaké problémy to byly? Některé z těch příběhů jsou opravdu fascinující! +2. **Objevte jejich příběhy vzniku**: Co dělá každý jazyk výjimečným? Tady je zajímavost – každý programovací jazyk vznikl, protože někdo řekl: „Víš co? Musí existovat lepší způsob, jak vyřešit tenhle konkrétní problém.“ Dokážete zjistit, jaké problémy to byly? Některé příběhy jsou opravdu fascinující! -3. **Poznej komunity**: Podívej se, jak vstřícná a zapálená je komunita kolem každého jazyka. Některé mají miliony vývojářů sdílejících znalosti a pomáhajících si, jiné jsou menší, ale neskutečně soudržné a podporující. Budeš rád vidět, jaké osobnosti tyto komunity mají! +3. **Poznejte komunity**: Prozkoumejte, jak vstřícná a zanícená je komunita každého jazyka. Některé mají miliony vývojářů, kteří si sdílejí znalosti a pomáhají si, jiné jsou menší, ale neuvěřitelně soudržné a podporující. Určitě vás nadchne, jaké různé osobnosti tyto komunity mají! -4. **Řiď se svým instinktem**: Který jazyk ti teď přijde nejsnazší? Neřeš, že bys měl udělat „perfektní“ volbu – jen naslouchej svému pocitu! Opravdu neexistuje špatná odpověď a vždy můžeš později prozkoumat další. +4. **Řiďte se svým instinktem**: Který jazyk vám teď připadá nejpřístupnější? Netrapte se tím, abyste vybrali „perfektní“ jazyk – prostě poslouchejte svůj vnitřní pocit! Není tady špatná volba a vždy můžete později vyzkoumat další. -**Bonusová detektivní práce**: Podívej se, které hlavní weby nebo aplikace jsou postavené s použitím každého jazyka. Zaručuji ti, že budeš šokovaný, až zjistíš, co pohání Instagram, Netflix nebo tu mobilní hru, kterou nemůžeš přestat hrát! +**Bonusová detektivní práce**: Zapátrejte, které velké weby nebo aplikace jsou postavené v každém z těchto jazyků. Zaručuji, že budete šokováni, co pohání Instagram, Netflix nebo tu mobilní hru, kterou nemůžete přestat hrát! -> 💡 **Pamatuj**: Dnes se nesnažíš stát expertem na žádný z těchto jazyků. Jen si pořádně prohlížíš sousedství, než se rozhodneš, kde chceš zakotvit. Dej si na čas, bav se a nech svou zvědavost vést! +> 💡 **Pamatujte**: Dnes se nesnažíte stát expertem na žádný z těchto jazyků. Jen se seznamujete s oblastí, než si vyberete, kde chcete začít. Dejte si na čas, užijte si to a nechte se vést zvědavostí! -## Oslavme, co jsi objevil! +## Oslavme, co jste objevili! -Páni, dnes jsi nasál tolik neuvěřitelných informací! Opravdu se těším, kolik toho z téhle úžasné cesty ti zůstalo. A pamatuj – není to test, kde musíš být perfektní. Je to spíš oslava všeho skvělého, co ses o tomto fascinujícím světě dozvěděl, do kterého se brzy ponoříš! +Ty jo, dnes jste nasáli tolik neuvěřitelných informací! Opravdu mě těší, kolik z té skvělé cesty vám zůstalo v paměti. A pamatujte – není to test, kde musíte mít vše perfektní. Je to oslava všeho toho úžasného, co jste se o tomto fascinujícím světě dozvěděli! -[Vyzkoušej si kvíz po lekci](https://ff-quizzes.netlify.app/web/) -## Revize a Samostudium +[Vyzkoušejte test po lekci](https://ff-quizzes.netlify.app/web/) -**Vezmi si čas na prozkoumání a bav se tím!** +## Přehled & Samostudium -Dnes jsi zvládl spoustu věcí, a to je něco, na co můžeš být hrdý! Teď přichází ta zábavná část – prozkoumání témat, která vzbudila tvou zvědavost. Pamatuj, že to není domácí úkol – je to dobrodružství! +**Vezměte si čas na objevování a zábavu!** +Pokryli jste dnes hodně témat, a to je něco, na co můžete být hrdí! Teď přichází ta zábavná část – prozkoumávání témat, která ve vás vzbudila zvědavost. Nezapomeňte, že to není domácí úkol – je to dobrodružství! -**Ponoř se hlouběji do toho, co tě nadchlo:** +**Ponořte se hlouběji do toho, co vás nadchlo:** -**Zapoj se prakticky do programovacích jazyků:** -- Navštiv oficiální webové stránky 2-3 jazyků, které tě zaujaly. Každý má svou osobnost a příběh! -- Vyzkoušej si online „coding playgroundy“ jako [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), nebo [Replit](https://replit.com/). Neboj se experimentovat – nic nezničíš! -- Přečti si, jak tvůj oblíbený jazyk vznikl. Vážně, některé z těchto příběhů jsou fascinující a pomohou ti pochopit, proč jazyky fungují tak, jak fungují. +**Zapojte se do programovacích jazyků:** +- Navštivte oficiální webové stránky 2-3 jazyků, které vám padly do oka. Každý z nich má svou osobnost a příběh! +- Vyzkoušejte si nějaká online programovací hřiště jako [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/) nebo [Replit](https://replit.com/). Nebojte se experimentovat – nic tím nezlomíte! +- Přečtěte si, jak váš oblíbený jazyk vznikl. Některé z těchto příběhů jsou opravdu fascinující a pomohou vám pochopit, proč jazyky fungují tak, jak fungují. -**Seznam se se svými novými nástroji:** -- Stáhni si Visual Studio Code, pokud ho ještě nemáš – je zdarma a bude se ti líbit! -- Strav pár minut prohlížením tržiště rozšíření. Je to jako obchod s aplikacemi pro tvůj kódovací editor! -- Otevři vývojářské nástroje v prohlížeči a jen tak klikaj po webu. Nemusíš tomu všemu rozumět – jen si zvykej, co tam je. +**Zvykněte si na své nové nástroje:** +- Stáhněte si Visual Studio Code, pokud ho ještě nemáte – je zdarma a budete ho milovat! +- Stravte pár minut prohlížením tržiště rozšíření. Je to jako obchod s aplikacemi pro váš kódový editor! +- Otevřete Vývojářské nástroje ve svém prohlížeči a jen si klikejte kolem. Nemusíte rozumět všemu – stačí, když si zvyknete, co tam je. -**Připoj se ke komunitě:** -- Sleduj vývojářské komunity na [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), nebo [GitHub](https://github.com/). Programátorská komunita je neuvěřitelně vstřícná k nováčkům! -- Sleduj na YouTube videa přátelská k začátečníkům. Je tam spousta skvělých tvůrců, kteří si pamatují, jaké to je začínat. -- Zvaž připojení k místním setkáním nebo online komunitám. Věř mi, vývojáři rádi pomáhají nováčkům! +**Připojte se ke komunitě:** +- Sledujte některé vývojářské komunity na [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/) nebo [GitHub](https://github.com/). Programátorská komunita je nesmírně vstřícná k nováčkům! +- Podívejte se na začátečnická videa o programování na YouTube. Je tam spousta skvělých tvůrců, kteří si pamatují, jaké to je začínat. +- Zvažte připojení k místním setkáním nebo online komunitám. Věřte mi, vývojáři rádi pomáhají nováčkům! -> 🎯 **Poslouchej, co ti chci říct**: Nečeká se od tebe, že se ze dne na den staneš kódovacím mágem! Právě teď se jen seznamuješ s tím úžasným světem, jehož součástí se chystáš stát. Vezmi si čas, užij si cestu a pamatuj – každý jeden vývojář, kterého obdivuješ, jednou seděl právě tam, kde jsi teď, cítil se nadšený a možná trochu zahlcený. To je úplně normální a znamená to, že to děláš správně! +> 🎯 **Poslouchejte, co chci, abyste si zapamatovali**: Neočekává se, že se z vás přes noc stane programovací čaroděj! Teď jen poznáváte tento úžasný nový svět, jehož součástí se brzy stanete. Vezměte si čas, užívejte si cestu a pamatujte – každý programátor, kterého obdivujete, seděl přesně tam, kde jste teď vy, plný nadšení a možná trochu zahlcený. To je naprosto normální a znamená to, že to děláte správně! @@ -785,70 +787,70 @@ Dnes jsi zvládl spoustu věcí, a to je něco, na co můžeš být hrdý! Teď [Reading the Docs](assignment.md) -> 💡 **Malé popostrčení pro tvé zadání**: Určitě bych rád viděl, jak prozkoumáš nějaké nástroje, které jsme zatím neprobírali! Vynech editory, prohlížeče a příkazové nástroje, o kterých jsme už mluvili – existuje celý tento neuvěřitelný vesmír skvělých vývojářských nástrojů, které čekají na objevení. Hledej takové, které jsou aktivně udržované a mají živé, nápomocné komunity (ty mají obvykle nejlepší tutoriály a nejpřátelštější lidi, když se zasekneš a potřebuješ pomocnou ruku). +> 💡 **Malé nakopnutí k vašemu úkolu**: Rád(a) bych vás viděl(a), jak zkoumáte nějaké nástroje, o kterých jsme ještě nemluvili! Přeskočte editory, prohlížeče a nástroje příkazové řádky, které jsme už probírali – je tu celý neuvěřitelný svět skvělých vývojářských nástrojů, které čekají na to, až je objevíte. Hledejte takové, které jsou aktivně udržované a mají živé, nápomocné komunity (ty obvykle mají nejlepší návody a nejvíc podpůrných lidí, pokud se zaseknete a budete potřebovat přátelskou pomoc). --- -## 🚀 Tvůj časový plán programátorské cesty - -### ⚡ **Co můžeš udělat během příštích 5 minut** -- [ ] Přidej si do záložek 2-3 weby programovacích jazyků, které tě zaujaly -- [ ] Stáhni si Visual Studio Code, pokud ho ještě nemáš -- [ ] Otevři ve svém prohlížeči DevTools (F12) a klikni si na jakémkoli webu -- [ ] Připoj se do jedné programátorské komunity (Dev.to, Reddit r/webdev, nebo Stack Overflow) - -### ⏰ **Co můžeš stihnout během hodiny** -- [ ] Dokonči kvíz po lekci a zamysli se nad svými odpověďmi -- [ ] Nastav VS Code s rozšířením GitHub Copilot -- [ ] Vyzkoušej příklad „Hello World“ ve 2 různých programovacích jazycích online -- [ ] Podívej se na video „Den v životě vývojáře“ na YouTube -- [ ] Začni s detektivní prací na svém zvoleném programovacím jazyku (z výzvy) - -### 📅 **Týdenní dobrodružství** -- [ ] Dokonči zadání a prozkoumej 3 nové vývojářské nástroje -- [ ] Sleduj 5 vývojářů nebo programátorských účtů na sociálních sítích -- [ ] Zkus postavit něco malého v CodePen nebo Replit (třeba jen „Hello, [Tvé jméno]!“) -- [ ] Přečti si jeden blogový příspěvek vývojáře o jeho kódovací cestě -- [ ] Připoj se k virtuálnímu setkání nebo se podívej na programátorskou přednášku -- [ ] Začni se učit svůj zvolený jazyk podle online tutoriálů - -### 🗓️ **Měsíční proměna** -- [ ] Postav svůj první malý projekt (i jednoduchá webová stránka se počítá!) -- [ ] Přispěj do open-source projektu (začni opravami dokumentace) -- [ ] Mentoruj někoho, kdo právě začíná s programováním -- [ ] Vytvoř si webovou stránku s portfolio vývojáře -- [ ] Spoj se s místními komunitami vývojářů nebo studijními skupinami -- [ ] Začni plánovat svůj další učební milník - -### 🎯 **Závěrečné zhodnocení** - -**Než budeš pokračovat dál, oslav tohle:** -- Co tě dnes na programování nejvíc nadchlo? -- Který nástroj nebo koncept chceš prozkoumat jako první? -- Jak se cítíš ohledně začátku této programátorské cesty? -- Jakou jednu otázku bys chtěl teď položit vývojáři? +## 🚀 Váš časový plán programátorské cesty + +### ⚡ **Co můžete udělat během příštích 5 minut** +- [ ] Přidejte si do záložek 2-3 webové stránky programovacích jazyků, které vás zaujaly +- [ ] Stáhněte si Visual Studio Code, pokud ho ještě nemáte +- [ ] Otevřete si Vývojářské nástroje prohlížeče (F12) a klikejte na jakékoliv webové stránce +- [ ] Připojte se k jedné programátorské komunitě (Dev.to, Reddit r/webdev nebo Stack Overflow) + +### ⏰ **Co můžete stihnout během této hodiny** +- [ ] Dokončete kvíz po lekci a zamyslete se nad svými odpověďmi +- [ ] Nastavte VS Code s rozšířením GitHub Copilot +- [ ] Vyzkoušejte si "Hello World" v 2 různých programovacích jazycích online +- [ ] Podívejte se na video „Den v životě vývojáře“ na YouTube +- [ ] Začněte pátrat po informacích o programovacích jazycích (z výzvy) + +### 📅 **Vaše týdenní dobrodružství** +- [ ] Splňte úkol a prozkoumejte 3 nové vývojářské nástroje +- [ ] Sledujte 5 vývojářů nebo programátorských účtů na sociálních sítích +- [ ] Zkuste postavit něco malého v CodePen nebo Replit (i jen „Hello, [Vaše jméno]!“) +- [ ] Přečtěte si jeden blogový příspěvek od vývojáře o jeho programátorské cestě +- [ ] Připojte se k virtuálnímu setkání nebo shlédněte přednášku o programování +- [ ] Začněte se učit vybraný jazyk pomocí online tutoriálů + +### 🗓️ **Vaše měsíční proměna** +- [ ] Postavte svůj první malý projekt (i jednoduchá webová stránka se počítá!) +- [ ] Přispějte k open-source projektu (začněte opravami dokumentace) +- [ ] Mentorujte někoho, kdo právě začíná svou programátorskou cestu +- [ ] Vytvořte si svůj vývojářský portfolio web +- [ ] Spojte se s místními vývojářskými komunitami nebo studijními skupinami +- [ ] Začněte plánovat svůj další učební milník + +### 🎯 **Konečné reflexní tachování** + +**Než půjdete dál, na chvíli se zastavte a oslavte:** +- Co vás dnes na programování nejvíc nadchlo? +- Který nástroj nebo koncept chcete prozkoumat jako první? +- Jak se cítíte při začátku této programátorské cesty? +- Jakou otázku byste chtěli teď položit nějakému vývojáři? ```mermaid journey - title Vaše cesta k budování sebedůvěry + title Tvoje cesta budování sebevědomí section Dnes - Curious: 3: Vy - Overwhelmed: 4: Vy - Excited: 5: Vy + Curious: 3: You + Overwhelmed: 4: You + Excited: 5: You section Tento týden - Exploring: 4: Vy - Learning: 5: Vy - Connecting: 4: Vy + Exploring: 4: You + Learning: 5: You + Connecting: 4: You section Příští měsíc - Building: 5: Vy - Confident: 5: Vy - Helping Others: 5: Vy + Building: 5: You + Confident: 5: You + Helping Others: 5: You ``` -> 🌟 **Pamatuj**: Každý expert byl jednou začátečník. Každý zkušený vývojář se kdysi cítil přesně tak, jako ty teď – nadšený, možná trochu zahlcený a rozhodně zvědavý na možnosti. Jsi v úžasné společnosti a tahle cesta bude neuvěřitelná. Vítej ve skvělém světě programování! 🎉 +> 🌟 **Pamatujte**: Každý expert byl jednou začátečník. Každý zkušený vývojář se někdy cítil přesně tak, jak se cítíte vy teď – nadšeně, možná trochu zahlceně a určitě zvědavě, co je možné. Jste v úžasné společnosti a tato cesta bude neuvěřitelná. Vítejte ve skvělém světě programování! 🎉 --- -**Prohlášení o vyloučení odpovědnosti**: -Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). I když usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Nejsme odpovědni za jakákoliv nedorozumění nebo špatné interpretace vzniklé z použití tohoto překladu. +**Vyloučení odpovědnosti**: +Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože usilujeme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Za jakékoliv nedorozumění nebo chybné výklady vyplývající z použití tohoto překladu neneseme odpovědnost. \ No newline at end of file diff --git a/translations/cs/AGENTS.md b/translations/cs/AGENTS.md index e099124ba..2b5e56fe5 100644 --- a/translations/cs/AGENTS.md +++ b/translations/cs/AGENTS.md @@ -2,29 +2,29 @@ ## Přehled projektu -Toto je vzdělávací repozitář učebního plánu pro výuku základů webového vývoje pro začátečníky. Kurikulum je komplexní 12týdenní kurz vyvinutý Microsoft Cloud Advocates, obsahující 24 praktických lekcí pokrývajících JavaScript, CSS a HTML. +Toto je vzdělávací repozitář pro výuku základů webového vývoje pro začátečníky. Kurikul je komplexní 12týdenní kurz vyvinutý Microsoft Cloud Advocates, obsahující 24 praktických lekcí pokrývajících JavaScript, CSS a HTML. -### Klíčové komponenty +### Klíčové prvky -- **Vzdělávací obsah**: 24 strukturovaných lekcí uspořádaných do modulů založených na projektech -- **Praktické projekty**: Terrarium, Hra na psaní, Rozšíření prohlížeče, Kosmická hra, Bankovní aplikace, Kódovací editor a AI chat asistent -- **Interaktivní kvízy**: 48 kvízů po 3 otázkách (před a po lekci) -- **Podpora vícejazyčnosti**: Automatizované překlady do více než 50 jazyků přes GitHub Actions +- **Vzdělávací obsah**: 24 strukturovaných lekcí organizovaných do modulů založených na projektech +- **Praktické projekty**: Terrárium, Hra na psaní, Rozšíření prohlížeče, Hra ve vesmíru, Bankovní aplikace, Editor kódu a AI chatovací asistent +- **Interaktivní kvízy**: 48 kvízů se 3 otázkami každý (hodnocení před a po lekci) +- **Podpora více jazyků**: Automatické překlady pro více než 50 jazyků pomocí GitHub Actions - **Technologie**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (pro AI projekty) ### Architektura -- Vzdělávací repozitář s strukturou založenou na lekcích -- Každá složka lekce obsahuje README, ukázky kódu a řešení -- Samostatné projekty v oddělených adresářích (quiz-app, různé projekty lekcí) +- Vzdělávací repozitář s lekční strukturou +- Každá složka lekce obsahuje README, příklady kódu a řešení +- Samostatné projekty v oddělených adresářích (quiz-app, různé lekční projekty) - Překladový systém využívající GitHub Actions (co-op-translator) -- Dokumentace poskytovaná přes Docsify a dostupná jako PDF +- Dokumentace podávána přes Docsify a dostupná jako PDF ## Příkazy pro nastavení -Tento repozitář je určen především ke konzumaci vzdělávacího obsahu. Pro práci s konkrétními projekty: +Tento repozitář je primárně určen pro konzumaci vzdělávacího obsahu. Pro práci s konkrétními projekty: -### Hlavní nastavení repozitáře +### Nastavení hlavního repozitáře ```bash git clone https://github.com/microsoft/Web-Dev-For-Beginners.git @@ -41,7 +41,7 @@ npm run build # Sestavit pro produkci npm run lint # Spustit ESLint ``` -### Bankovní projekt API (Node.js + Express) +### Bankovní API projekt (Node.js + Express) ```bash cd 7-bank-project/api @@ -56,10 +56,10 @@ npm run format # Formátovat pomocí Prettier ```bash cd 5-browser-extension/solution npm install -# Postupujte podle specifických pokynů pro načítání rozšíření v prohlížeči +# Postupujte podle pokynů pro načítání rozšíření specifických pro prohlížeč ``` -### Projekty Kosmické hry +### Projekty hry ve vesmíru ```bash cd 6-space-game/solution @@ -67,7 +67,7 @@ npm install # Otevřete index.html v prohlížeči nebo použijte Live Server ``` -### Chat projekt (Python backend) +### Chatovací projekt (Python backend) ```bash cd 9-chat-project/solution/backend/python @@ -80,183 +80,183 @@ python api.py ### Pro přispěvatele obsahu -1. **Vytvořte fork** repozitáře na svém GitHub účtu +1. **Rozvětvěte (fork) repozitář** do svého GitHub účtu 2. **Naklonujte svůj fork** lokálně 3. **Vytvořte novou větev** pro své změny -4. Proveďte změny v obsahu lekcí nebo ukázkách kódu -5. Otestujte případné změny kódu v příslušných adresářích projeků -6. Odešlete pull requesty podle pravidel přispívání +4. Proveďte změny v obsahu lekce nebo příkladech kódu +5. Testujte kódové změny v příslušných projektových složkách +6. Podávejte pull requesty podle pokynů pro přispění ### Pro studenty -1. Vytvořte fork nebo naklonujte repozitář -2. Procházejte adresáře lekcí postupně -3. Čtěte README soubory každé lekce -4. Vyplňte kvízy před lekcí na https://ff-quizzes.netlify.app/web/ -5. Propracujte se ukázkami kódu v adresářích lekcí +1. Rozvětvěte nebo naklonujte repozitář +2. Procházejte lekční složky postupně +3. Čtěte README soubory pro každou lekci +4. Dokončete předběžné kvízy na https://ff-quizzes.netlify.app/web/ +5. Procházejte příklady kódu v lekčních složkách 6. Dokončete úkoly a výzvy -7. Udělejte kvízy po lekci +7. Absolvujte kvízy po lekci ### Živý vývoj -- **Dokumentace**: Spusťte `docsify serve` v kořenovém adresáři (port 3000) -- **Quiz App**: Spusťte `npm run dev` v adresáři quiz-app -- **Projekty**: Používejte VS Code Live Server rozšíření pro HTML projekty -- **API projekty**: Spusťte `npm start` v odpovídajících API adresářích +- **Dokumentace**: Spusťte `docsify serve` v rootu (port 3000) +- **Quiz App**: Spusťte `npm run dev` ve složce quiz-app +- **Projekty**: Použijte VS Code Live Server rozšíření pro HTML projekty +- **API projekty**: Spusťte `npm start` v příslušných API složkách -## Instrukce pro testování +## Instrukce testování ### Testování Quiz App ```bash cd quiz-app npm run lint # Zkontrolujte problémy se stylem kódu -npm run build # Ověřte úspěšnost sestavení +npm run build # Ověřte, že kompilace proběhla úspěšně ``` ### Testování Bank API ```bash cd 7-bank-project/api -npm run lint # Zkontrolujte problémy se stylem kódu +npm run lint # Zkontrolujte problémy s stylem kódu node server.js # Ověřte, že server startuje bez chyb ``` ### Obecný přístup k testování -- Jedná se o vzdělávací repozitář bez rozsáhlých automatizovaných testů +- Toto je vzdělávací repozitář bez rozsáhlých automatizovaných testů - Manuální testování se zaměřuje na: - - Ukázky kódu bez chybového běhu - - Odkazy v dokumentaci fungují správně - - Projekty se úspěšně sestaví - - Ukázky dodržují osvědčené postupy + - Příklady kódu bez chyb při spuštění + - Funkčnost odkazů v dokumentaci + - Úspěšné sestavení projektů + - Příklady odpovídající nejlepší praxi -### Kontroly před odevzdáním +### Kontroly před odesláním -- Spusťte `npm run lint` v adresářích s package.json -- Ověřte validitu markdown odkazů -- Testujte ukázky kódu v prohlížeči nebo Node.js +- Spusťte `npm run lint` ve složkách s package.json +- Ověřte platnost odkazů v markdownu +- Testujte příklady kódu v prohlížeči nebo Node.js - Zkontrolujte, že překlady zachovávají správnou strukturu -## Pravidla stylu kódu +## Zásady stylu kódu ### JavaScript -- Používejte moderní ES6+ syntaxi -- Řiďte se standardními ESLint konfiguracemi v projektech -- Používejte popisné názvy proměnných a funkcí pro snadné pochopení +- Používejte moderní syntaxi ES6+ +- Dodržujte standardní ESLint konfigurace v projektech +- Používejte smysluplné názvy proměnných a funkcí pro vzdělávací přehlednost - Přidávejte komentáře vysvětlující koncepty pro studenty - Formátujte pomocí Prettier tam, kde je nastaveno ### HTML/CSS -- Používejte sémantické HTML5 elementy +- Sémantické HTML5 elementy - Principy responzivního designu - Jasné konvence pojmenování tříd - Komentáře vysvětlující CSS techniky pro studenty ### Python -- Dodržujte PEP 8 styl -- Jasné, vzdělávací ukázky kódu -- Používejte typové hinty tam, kde je to užitečné pro učení +- Dodržování PEP 8 stylu +- Jasné, vzdělávací příklady kódu +- Typové anotace tam, kde je to pro učení užitečné ### Markdown dokumentace - Jasná hierarchie nadpisů -- Kódové bloky s označením jazyka -- Odkazy na doplňková zdroje -- Snímky obrazovek a obrázky v adresářích `images/` -- Alt text pro obrázky pro přístupnost +- Kódové bloky s určením jazyka +- Odkazy na další zdroje +- Snímky obrazovky a obrázky ve složkách `images/` +- Alt texty pro obrázky pro přístupnost ### Organizace souborů -- Lekce číslovány sekvenčně (1-getting-started-lessons, 2-js-basics atd.) -- Každý projekt obsahuje adresáře `solution/` a často `start/` nebo `your-work/` -- Obrázky ukládány do specifických `images/` složek lekcí -- Překlady v adresářové struktuře `translations/{language-code}/` +- Lekce číslovány sekvenčně (1-getting-started-lessons, 2-js-basics, atd.) +- Každý projekt má složky `solution/` a často `start/` nebo `your-work/` +- Obrázky uložené v lekčně specifických složkách `images/` +- Překlady ve struktuře `translations/{jazykový-kód}/` ## Sestavení a nasazení ### Nasazení Quiz App (Azure Static Web Apps) -Quiz-app je nakonfigurována pro nasazení v Azure Static Web Apps: +Quiz-app je konfigurován pro nasazení na Azure Static Web Apps: ```bash cd quiz-app npm run build # Vytváří složku dist/ -# Nasazuje pomocí workflow GitHub Actions při push do hlavní větve +# Nasazuje pomocí GitHub Actions workflow při pushi do main ``` Konfigurace Azure Static Web Apps: - **Umístění aplikace**: `/quiz-app` -- **Výstupní umístění**: `dist` +- **Umístění výstupu**: `dist` - **Workflow**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` ### Generování PDF dokumentace ```bash npm install # Nainstalujte docsify-to-pdf -npm run convert # Vytvořit PDF z docs +npm run convert # Vygenerujte PDF z docs ``` -### Dokumentace Docsify +### Docsify dokumentace ```bash npm install -g docsify-cli # Nainstalujte Docsify globálně -docsify serve # Spusťte na localhost:3000 +docsify serve # Spustit na localhost:3000 ``` -### Projektově-specifické sestavení +### Sestavení specifická pro projekt -Každý projekt může mít vlastní proces sestavení: -- Vue projekty: `npm run build` vytvoří produkční balíčky -- Statické projekty: Žádný build krok, soubory se přímo servírují +Každý projekt může mít vlastní build proces: +- Vue projekty: `npm run build` vytváří produkční balíčky +- Statické projekty: žádný build krok, soubory se podávají přímo -## Pravidla pro pull requesty +## Pokyny pro pull requesty ### Formát názvu -Používejte jasné, popisné názvy s označením oblasti změny: +Používejte jasné, popisné názvy uvádějící oblast změn: - `[Quiz-app] Přidat nový kvíz pro lekci X` -- `[Lesson-3] Opravit překlep v terrarium projektu` +- `[Lesson-3] Opravit překlep v projektu terrária` - `[Translation] Přidat španělský překlad pro lekci 5` -- `[Docs] Aktualizovat instalační instrukce` +- `[Docs] Aktualizovat instrukce pro nastavení` ### Povinné kontroly Před odesláním PR: 1. **Kvalita kódu**: - - Spusťte `npm run lint` v příslušných projektových složkách + - Spusťte `npm run lint` v ovlivněných projektových složkách - Opravte všechny lintovací chyby a varování 2. **Ověření sestavení**: - - Spusťte `npm run build` pokud je to relevantní - - Zajistěte, že nejsou žádné chyby sestavení + - Spusťte `npm run build`, pokud je relevantní + - Zajistěte, že nejsou chyby sestavení -3. **Validace odkazů**: +3. **Ověření odkazů**: - Otestujte všechny markdown odkazy - - Ověřte fungování odkazů na obrázky + - Ověřte fungování referencí obrázků -4. **Revize obsahu**: - - Korektura pravopisu a gramatiky - - Ověřte, že ukázky kódu jsou správné a vzdělávací - - Zkontrolujte, že překlady zachovávají původní význam +4. **Kontrola obsahu**: + - Korektury pravopisu a gramatiky + - Ověření správnosti a vzdělávací hodnoty příkladů kódu + - Ověření, že překlady zachovávají původní význam -### Požadavky na přispívání +### Požadavky na přispění -- Souhlas s Microsoft CLA (automatická kontrola při prvním PR) -- Dodržování [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) -- Podrobné instrukce v [CONTRIBUTING.md](./CONTRIBUTING.md) -- Uvádějte čísla issues v popisu PR, pokud je to relevantní +- Souhlas se smlouvou Microsoft CLA (automatická kontrola při prvním PR) +- Dodržujte [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- Viz [CONTRIBUTING.md](./CONTRIBUTING.md) pro podrobné pokyny +- V případě potřeby odkazujte čísla issue v popisu PR ### Proces revize -- PR kontrolují maintainers a komunita -- Priorita jasnost vzdělávacího obsahu -- Ukázky kódu by měly dodržovat současné nejlepší praktiky -- Překlady jsou kontrolovány na přesnost a kulturní vhodnost +- PR kontrolují správci a komunita +- Prioritou je vzdělávací srozumitelnost +- Příklady kódu by měly odpovídat aktuálním nejlepším praktikám +- Překlady se kontrolují z hlediska přesnosti a kulturní vhodnosti ## Překladový systém @@ -265,14 +265,14 @@ Před odesláním PR: - Používá GitHub Actions s workflow co-op-translator - Automaticky překládá do více než 50 jazyků - Zdrojové soubory v hlavních adresářích -- Přeložené soubory v adresářích `translations/{language-code}/` +- Přeložené soubory v adresářích `translations/{jazykový-kód}/` -### Přidávání ručních vylepšení překladů +### Přidávání manuálních úprav překladů -1. Najděte soubor v `translations/{language-code}/` -2. Proveďte úpravy při zachování struktury -3. Ujistěte se, že ukázky kódu zůstávají funkční -4. Otestujte lokalizovaný obsah kvízů +1. Najděte soubor v `translations/{jazykový-kód}/` +2. Proveďte úpravy s zachováním struktury +3. Ověřte, že příklady kódu zůstávají funkční +4. Testujte lokalizovaný obsah kvízů ### Metadata překladu @@ -291,54 +291,54 @@ CO_OP_TRANSLATOR_METADATA: ## Ladění a řešení problémů -### Časté problémy +### Běžné problémy -**Quiz aplikace nenaběhne**: +**Quiz app se nespustí**: - Zkontrolujte verzi Node.js (doporučeno v14+) -- Odstraňte `node_modules` a `package-lock.json`, spusťte `npm install` znovu +- Smažte `node_modules` a `package-lock.json`, spusťte znovu `npm install` - Zkontrolujte konflikty portů (výchozí: Vite používá port 5173) -**API server nenaběhne**: -- Ověřte verzi Node.js (minimálně node >=10) -- Zkontrolujte, zda port není obsazený -- Ujistěte se, že jsou nainstalované všechny závislosti příkazem `npm install` +**API server se nespustí**: +- Ověřte, že verze Node.js splňuje minimální požadavky (node >=10) +- Zkontrolujte, zda port není již obsazen +- Ujistěte se, že jsou nainstalovány všechny závislosti `npm install` -**Rozšíření prohlížeče se nenačítá**: +**Rozšíření prohlížeče se nenačte**: - Ověřte správné formátování manifest.json -- Kontrola chyb v konzoli prohlížeče -- Postupujte podle instrukcí specifických pro prohlížeč +- Zkontrolujte prohlížečovou konzoli na chyby +- Postupujte podle návodů k instalaci rozšíření specifických pro prohlížeč **Problémy s Python chat projektem**: -- Ujistěte se, že je nainstalován balíček OpenAI: `pip install openai` -- Ověřte, že je nastavena proměnná prostředí GITHUB_TOKEN -- Zkontrolujte oprávnění přístupu k GitHub modelům +- Ujistěte se, že balíček OpenAI je nainstalován: `pip install openai` +- Ověřte nastavení proměnné prostředí GITHUB_TOKEN +- Zkontrolujte oprávnění k přístupu k GitHub Models -**Docsify neservíruje dokumentaci**: -- Globálně nainstalujte docsify-cli: `npm install -g docsify-cli` -- Spusťte v kořenovém adresáři repozitáře -- Ověřte, že existuje `docs/_sidebar.md` +**Docsify neposkytuje dokumentaci**: +- Nainstalujte docsify-cli globálně: `npm install -g docsify-cli` +- Spusťte z kořenového adresáře repozitáře +- Ověřte existenci `docs/_sidebar.md` ### Tipy pro vývojové prostředí - Používejte VS Code s rozšířením Live Server pro HTML projekty -- Nainstalujte ESLint a Prettier rozšíření pro jednotné formátování -- K debugu JavaScriptu používejte DevTools v prohlížeči -- Pro Vue projekty nainstalujte Vue DevTools rozšíření prohlížeče +- Nainstalujte rozšíření ESLint a Prettier pro konzistentní formátování +- Použijte DevTools v prohlížeči pro debugování JavaScriptu +- Pro Vue projekty nainstalujte Vue DevTools rozšíření do prohlížeče ### Výkonové aspekty -- Velké množství přeložených souborů (50+ jazyků) znamená velké klony -- Použijte shallow clone, pokud pracujete pouze s obsahem: `git clone --depth 1` +- Velké množství překladových souborů (50+ jazyků) znamená velké klony +- Pro práci pouze s obsahem použijte shallow clone: `git clone --depth 1` - Při práci s anglickým obsahem vylučujte překlady z vyhledávání -- Procesy build mohou být při prvním spuštění pomalé (npm install, build Vite) +- První běh build procesů může být pomalý (npm install, Vite build) ## Bezpečnostní aspekty ### Proměnné prostředí -- API klíče nikdy neukládejte do repozitáře -- Používejte `.env` soubory (jsou uvedeny v `.gitignore`) -- Dokumentujte požadované proměnné prostředí v README projektů +- API klíče by se nikdy neměly commitovat do repozitáře +- Používejte `.env` soubory (již v `.gitignore`) +- Dokumentujte požadované proměnné prostředí v README projektech ### Python projekty @@ -346,35 +346,35 @@ CO_OP_TRANSLATOR_METADATA: - Udržujte závislosti aktuální - GitHub tokeny by měly mít minimální potřebná oprávnění -### Přístup k GitHub modelům +### Přístup k GitHub Models -- Vyžadovány personal access tokens (PAT) +- Pro GitHub Models jsou potřeba Personal Access Tokens (PAT) - Tokeny ukládejte jako proměnné prostředí -- Nikdy neukládejte tokeny ani přihlašovací údaje do repozitáře +- Nikdy necommitujte tokeny či přihlašovací údaje ## Další poznámky ### Cílová skupina -- Kompletní začátečníci ve webovém vývoji +- Úplní začátečníci ve webovém vývoji - Studenti a samouci -- Učitelé využívající kurikulum ve třídě -- Obsah navržen pro přístupnost a postupné budování dovedností +- Učitelé používající kurikulum ve třídách +- Obsah je navržen pro přístupnost a postupné rozvíjení dovedností ### Vzdělávací filozofie -- Projektově orientované učení +- Přístup založený na projektech - Časté ověřování znalostí (kvízy) -- Praktická cvičení v psaní kódu -- Reálné příklady použití -- Důraz na základy před frameworky +- Praktická cvičení kódování +- Příklady využití v reálném světě +- Zaměření na základy před frameworky ### Údržba repozitáře - Aktivní komunita studentů a přispěvatelů - Pravidelné aktualizace závislostí a obsahu -- Issues a diskuse sledovány maintainery -- Aktualizace překladů automatizované přes GitHub Actions +- Sledují se issues a diskuse správci +- Aktualizace překladů automatizovány přes GitHub Actions ### Související zdroje @@ -387,22 +387,22 @@ CO_OP_TRANSLATOR_METADATA: Pro podrobné instrukce k jednotlivým projektům viz README soubory v: - `quiz-app/README.md` - Vue 3 kvízová aplikace -- `7-bank-project/README.md` - Bankovní aplikace s autentizací +- `7-bank-project/README.md` - Bankovní aplikace s autentifikací - `5-browser-extension/README.md` - Vývoj rozšíření prohlížeče -- `6-space-game/README.md` - Vývoj hry založené na Canvas -- `9-chat-project/README.md` - AI chat asistent projekt +- `6-space-game/README.md` - Vývoj hry s využitím Canvas +- `9-chat-project/README.md` - Projekt AI chat asistenta -### Struktura Monorepo +### Struktura monorepa -Ačkoliv nejde o tradiční monorepo, tento repozitář obsahuje více nezávislých projektů: +I když se nejedná o tradiční monorepo, tento repozitář obsahuje více nezávislých projektů: - Každá lekce je samostatná - Projekty nesdílí závislosti -- Pracujte na jednotlivých projektech bez ovlivnění ostatních -- Naklonujte celý repozitář pro plný zážitek kurikula +- Pracujte na jednotlivých projektech, aniž byste ovlivnili ostatní +- Pro plný kurz si naklonujte celý repozitář --- -**Prohlášení o vyloučení odpovědnosti**: -Tento dokument byl přeložen pomocí služby automatického překladu [Co-op Translator](https://github.com/Azure/co-op-translator). I když usilujeme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. U kritických informací se doporučuje využít profesionální lidský překlad. Nejsme odpovědní za jakákoli nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu. +**Vyloučení odpovědnosti**: +Tento dokument byl přeložen pomocí služby automatického překladu [Co-op Translator](https://github.com/Azure/co-op-translator). I když usilujeme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Nejsme odpovědni za jakékoliv nedorozumění či nesprávné výklady vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/README.md b/translations/cs/README.md index 6b04e6a0e..b4ad78650 100644 --- a/translations/cs/README.md +++ b/translations/cs/README.md @@ -10,251 +10,260 @@ [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -# Webový vývoj pro začátečníky - Kurikulum +# Webový vývoj pro začátečníky - kurikulum -Naučte se základy webového vývoje v našem 12týdenním komplexním kurzu od Microsoft Cloud Advocates. Každá z 24 lekcí se věnuje JavaScriptu, CSS a HTML prostřednictvím praktických projektů jako jsou terária, rozšíření prohlížeče a vesmírné hry. Zapojte se do kvízů, diskuzí a praktických úkolů. Zlepšete své dovednosti a optimalizujte si uchování znalostí s naší efektivní projektově orientovanou výukou. Začněte svou cestu s kódováním ještě dnes! +Naučte se základy webového vývoje s naším 12týdenním komplexním kurzem od Microsoft Cloud Advocates. Každá ze 24 lekcí se zabývá JavaScriptem, CSS a HTML prostřednictvím praktických projektů, jako jsou terária, rozšíření pro prohlížeče a vesmírné hry. Zapojte se do kvízů, diskuzí a praktických úkolů. Zlepšete své dovednosti a optimalizujte uchování znalostí díky naší efektivní projektově orientované pedagogice. Začněte svou cestu programování ještě dnes! -Přidejte se do komunity Azure AI Foundry na Discordu +Připojte se k Azure AI Foundry Discord komunitě [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -Postupujte podle těchto kroků, abyste mohli začít používat tyto zdroje: -1. **Vytvořte forknutí repozitáře**: Klikněte na [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) +Postupujte podle těchto kroků, abyste začali používat tyto zdroje: +1. **Vytvořte Fork repozitáře**: Klikněte na [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) 2. **Naklonujte repozitář**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -3. [**Připojte se k Azure AI Foundry Discordu a potkejte odborníky a ostatní vývojáře**](https://discord.com/invite/ByRwuEEgH4) +3. [**Přidejte se k Azure AI Foundry Discord a poznejte experty a ostatní vývojáře**](https://discord.com/invite/ByRwuEEgH4) ### 🌐 Podpora více jazyků -#### Podporováno skrze GitHub Action (automatizované a vždy aktuální) +#### Podporováno pomocí GitHub Action (automatizováno a vždy aktuální) -[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](./README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md) +[Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Čínština (zjednodušená)](../zh-CN/README.md) | [Čínština (tradiční, Hongkong)](../zh-HK/README.md) | [Čínština (tradiční, Macao)](../zh-MO/README.md) | [Čínština (tradiční, Tchaj-wan)](../zh-TW/README.md) | [Chorvatština](../hr/README.md) | [Čeština](./README.md) | [Dánština](../da/README.md) | [Nizozemština](../nl/README.md) | [Estonština](../et/README.md) | [Finština](../fi/README.md) | [Francouzština](../fr/README.md) | [Němčina](../de/README.md) | [Řečtina](../el/README.md) | [Hebrejština](../he/README.md) | [Hindština](../hi/README.md) | [Maďarština](../hu/README.md) | [Indonéština](../id/README.md) | [Italština](../it/README.md) | [Japonština](../ja/README.md) | [Kannadština](../kn/README.md) | [Korejština](../ko/README.md) | [Litevština](../lt/README.md) | [Malajština](../ms/README.md) | [Malayalam](../ml/README.md) | [Maráthština](../mr/README.md) | [Nepálština](../ne/README.md) | [Nigérijská pidžin](../pcm/README.md) | [Norština](../no/README.md) | [Perština (Farsi)](../fa/README.md) | [Polština](../pl/README.md) | [Portugalština (Brazílie)](../pt-BR/README.md) | [Portugalština (Portugalsko)](../pt-PT/README.md) | [Paňdžábština (Gurmukhí)](../pa/README.md) | [Rumunština](../ro/README.md) | [Ruština](../ru/README.md) | [Srbština (cyrilice)](../sr/README.md) | [Slovenština](../sk/README.md) | [Slovinština](../sl/README.md) | [Španělština](../es/README.md) | [Svahilština](../sw/README.md) | [Švédština](../sv/README.md) | [Tagalog (Filipínština)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugština](../te/README.md) | [Thajština](../th/README.md) | [Turečtina](../tr/README.md) | [Ukrajinština](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamština](../vi/README.md) -> **Dáváte přednost lokálnímu klonování?** - -> Tento repozitář zahrnuje více než 50 překladů jazyků, což výrazně zvětšuje velikost stažených dat. Pro klonování bez překladů použijte sparse checkout: +> **Raději klonovat lokálně?** +> +> Tento repozitář obsahuje více než 50 překladů jazyků, což výrazně zvětšuje velikost stahování. Pro klonování bez překladů použijte sparse checkout: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` -> To vám poskytne vše potřebné ke zdárnému dokončení kurzu a výrazně rychlejší stažení. +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> +> Tím získáte vše potřebné k dokončení kurzu s mnohem rychlejším stažením. -**Pokud si přejete, aby byly podporovány další překladové jazyky, jsou uvedeny [zde](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** +**Pokud chcete podporu dalších jazyků, jsou zde uvedeny podporované jazykové možnosti [zde](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** -[![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) +[![Otevřít ve Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) #### 🧑‍🎓 _Jste student?_ -Navštivte [**Student Hub stránku**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), kde najdete začátečnické zdroje, studentské balíčky a dokonce způsoby, jak získat voucher na bezplatný certifikát. Tuto stránku si doporučujeme přidat do záložek a čas od času ji navštívit, protože obsah měníme měsíčně. +Navštivte [**Student Hub stránku**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), kde naleznete zdroje pro začátečníky, studentské balíčky a dokonce i způsoby, jak získat bezplatný certifikát. Tuto stránku si chcete zařadit mezi oblíbené a čas od času ji zkontrolovat, protože obsah měníme měsíčně. -### 📣 Oznámení - Nové výzvy GitHub Copilot Agent mode k dokončení! +### 📣 Oznámení - Nové výzvy režimu GitHub Copilot Agent k dokončení! -Nová výzva přidána, hledejte „GitHub Copilot Agent Challenge 🚀“ ve většině kapitol. Je to nová výzva, kterou můžete dokončit pomocí GitHub Copilota a režimu Agent. Pokud jste režim Agent předtím nepoužívali, dokáže nejen generovat text, ale také vytvářet a upravovat soubory, spouštět příkazy a další. +Přidána nová výzva, hledejte "GitHub Copilot Agent Challenge 🚀" ve většině kapitol. To je nová výzva, kterou máte dokončit pomocí GitHub Copilot a režimu Agent. Pokud jste režim Agent nikdy nepoužili, umožňuje nejen generovat text, ale také vytvářet a upravovat soubory, spouštět příkazy a další. -### 📣 Oznámení - _Nový projekt k postavení pomocí Generativní AI_ +### 📣 Oznámení - _Nový projekt k vytvoření pomocí generativní AI_ -Nový projekt AI asistenta právě přidán, podívejte se na [projekt](./9-chat-project/README.md) +Právě přidán nový projekt AI asistenta, podívejte se na [projekt](./9-chat-project/README.md) -### 📣 Oznámení - _Nové kurikulum_ o Generativní AI pro JavaScript právě vydáno +### 📣 Oznámení - _Nové kurikulum_ o generativní AI pro JavaScript bylo právě vydáno -Nezapomeňte na naše nové kurikulum Generativní AI! +Nezmeškejte naše nové kurikulum Generativní AI! Navštivte [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) a začněte! -![Background](../../translated_images/cs/background.148a8d43afde5730.webp) +![Pozadí](../../translated_images/cs/background.148a8d43afde5730.webp) + +- Lekce pokrývají vše od základů až po RAG. +- Komunikujte s historickými postavami pomocí GenAI a naší průvodní aplikace. +- Zábavný a poutavý příběh, budete cestovat časem! -- Lekce pokrývají vše od základů po RAG. -- Komunikujte s historickými postavami pomocí GenAI a naší doprovodné aplikace. -- Zábavný a poutavý příběh, při němž budete cestovat časem! +![postava](../../translated_images/cs/character.5c0dd8e067ffd693.webp) -![character](../../translated_images/cs/character.5c0dd8e067ffd693.webp) -Každá lekce zahrnuje úkol k dokončení, kontrolu znalostí a výzvu, která vás provede tématy jako: -- Promptování a prompt engineering +Každá lekce obsahuje úkol k dokončení, ověření znalostí a výzvu, která vás provede tématy jako: +- Vytváření promptů a jejich inženýrství - Generování textových a obrazových aplikací - Vyhledávací aplikace Navštivte [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) a začněte! - ## 🌱 Začínáme -> **Učitelé**, zahrnuli jsme [několik návrhů](for-teachers.md) jak toto kurikulum používat. Budeme rádi za vaši zpětnou vazbu [v našem diskuzním fóru](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! +> **Učitelé**, zahrnuli jsme [několik návrhů](for-teachers.md), jak použít toto kurikulum. Budeme rádi za vaši zpětnou vazbu [v našem diskuzním fóru](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! -**[Studující](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, u každé lekce začněte přednáškovým kvízem a pokračujte čtením materiálu přednášky, plněním různých aktivit a ověřte si pochopení pomocí kvízu po přednášce. +**[Studující](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, u každé lekce začněte přednáškovým kvízem a pokračujte čtením přednáškového materiálu, dokončením různých aktivit a ověřením porozumění pomocí povětrná přednáškového kvízu. -Pro lepší studijní zážitek se spojte se svými spolužáky a pracujte na projektech společně! Diskuze jsou vítané v našem [diskuzním fóru](https://github.com/microsoft/Web-Dev-For-Beginners/discussions), kde je náš tým moderátorů připraven odpovědět na vaše dotazy. +Pro lepší zkušenosti s učením se spojte s kolegy a pracujte na projektech společně! Diskuze jsou vítané v našem [diskuzním fóru](https://github.com/microsoft/Web-Dev-For-Beginners/discussions), kde je k dispozici náš tým moderátorů, kteří vám pomohou. -Pro další vzdělávání důrazně doporučujeme prozkoumat [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) pro doplňující studijní materiály. +Pro další vzdělávání doporučujeme prozkoumat [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) pro doplňující studijní materiály. ### 📋 Nastavení vašeho prostředí -Toto kurikulum má připravené vývojové prostředí! Jakmile začnete, můžete si vybrat spouštět kurikulum v [Codespace](https://github.com/features/codespaces/) (_prostředí v prohlížeči bez potřeby instalace_), nebo lokálně na vašem počítači pomocí textového editoru jako je [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +Toto kurikulum má připravené vývojové prostředí! Na začátku si můžete vybrat, zda budete kurz spouštět v [Codespace](https://github.com/features/codespaces/) (_prohlížečem ovládané prostředí bez nutnosti instalace_), nebo lokálně na svém počítači pomocí textového editoru, například [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). -#### Vytvořte si repozitář -Pro snadné ukládání své práce je doporučeno vytvořit si vlastní kopii tohoto repozitáře. To můžete udělat kliknutím na tlačítko **Use this template** v horní části stránky. Tím vznikne nový repozitář ve vašem GitHub účtu s kopií kurikula. +#### Vytvořte si vlastní repozitář +Pro snadné ukládání vaší práce je doporučeno vytvořit si vlastní kopii tohoto repozitáře. Můžete tak učinit kliknutím na tlačítko **Použít tuto šablonu** na vrchu stránky. Tím se vytvoří nový repozitář na vašem GitHub účtu s kopií kurikula. -Postupujte takto: -1. **Vytvořte fork repozitáře**: Klikněte na tlačítko „Fork“ v pravém horním rohu této stránky. +Postupujte následovně: +1. **Vytvořte Fork repozitáře**: Klikněte na tlačítko „Fork“ v pravém horním rohu této stránky. 2. **Naklonujte repozitář**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` #### Spuštění kurikula v Codespace -Ve vaší kopii repozitáře, kterou jste vytvořili, klikněte na tlačítko **Code** a vyberte **Open with Codespaces**. Tím se pro vás vytvoří nový Codespace, ve kterém můžete pracovat. +Ve své kopii repozitáře klikněte na tlačítko **Code** a vyberte **Open with Codespaces**. Tím vytvoříte nový Codespace, ve kterém můžete pracovat. ![Codespace](../../translated_images/cs/createcodespace.0238bbf4d7a8d955.webp) #### Spuštění kurikula lokálně na vašem počítači -Pro spuštění kurikula lokálně budete potřebovat textový editor, prohlížeč a nástroj příkazového řádku. Naše první lekce, [Úvod do programovacích jazyků a nástrojů oboru](../../1-getting-started-lessons/1-intro-to-programming-languages), vás provede různými možnostmi těchto nástrojů, abyste si mohli vybrat, co vám nejlépe vyhovuje. +Pro spuštění tohoto kurikula lokálně budete potřebovat textový editor, prohlížeč a nástroj příkazového řádku. Naše první lekce, [Úvod do programovacích jazyků a nástrojů](../../1-getting-started-lessons/1-intro-to-programming-languages), vás provede různými možnostmi pro každý z těchto nástrojů, abyste si vybrali, co vám vyhovuje nejvíce. -Doporučujeme použít [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) jako editor, který má také vestavěný [Terminál](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Visual Studio Code si můžete stáhnout [zde](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). - - -1. Naklonujte svůj repozitář do počítače. Můžete to udělat kliknutím na tlačítko **Code** a zkopírováním adresy URL: +Doporučujeme použít [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) jako editor, který má také zabudovaný [Terminál](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Visual Studio Code si můžete stáhnout [zde](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +1. Naklonujte si své úložiště do počítače. Můžete to udělat kliknutím na tlačítko **Code** a zkopírováním URL: [CodeSpace](./images/createcodespace.png) -Poté otevřete [Terminál](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) ve [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) a spusťte následující příkaz, přičemž `` nahraďte URL, kterou jste právě zkopírovali: + + Poté otevřete [Terminál](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) ve [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) a spusťte následující příkaz, přičemž `` nahraďte právě zkopírovanou URL: ```bash git clone ``` -2. Otevřete složku ve Visual Studio Code. To můžete udělat kliknutím na **Soubor** > **Otevřít složku** a vybráním složky, kterou jste právě naklonovali. +2. Otevřete složku ve Visual Studio Code. Můžete to udělat kliknutím na **File** > **Open Folder** a výběrem složky, kterou jste právě naklonovali. > Doporučené rozšíření Visual Studio Code: > > * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - pro náhled HTML stránek přímo ve Visual Studio Code -> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - který vám pomůže psát kód rychleji +> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - pomáhá rychleji psát kód -## 📂 Každá lekce zahrnuje: +## 📂 Každá lekce obsahuje: -- volitelnou náčrtovou poznámku +- volitelnou náčrtnou poznámku (sketchnote) - volitelné doplňkové video -- rozcvičkový kvíz před lekcí -- písemnou lekci -- u lekcí založených na projektu podrobné návody, jak projekt vytvořit -- kontrolní znalostní otázky +- rozcvičovací kvíz před lekcí +- psanou lekci +- u lekcí založených na projektu krok za krokem průvodce, jak projekt postavit +- kontrolní otázky - výzvu - doplňkové čtení -- zadání +- úkol - [kvíz po lekci](https://ff-quizzes.netlify.app/web/) -> **Poznámka ke kvízům**: Všechny kvízy jsou uloženy ve složce Quiz-app, celkem je 48 kvízů po třech otázkách. Jsou dostupné [zde](https://ff-quizzes.netlify.app/web/), kvízovou aplikaci lze spustit lokálně nebo nasadit na Azure; řiďte se pokyny ve složce `quiz-app`. +> **Poznámka ke kvízům**: Všechny kvízy jsou uloženy ve složce Quiz-app, celkem 48 kvízů po třech otázkách. Jsou dostupné [zde](https://ff-quizzes.netlify.app/web/), kvízovou aplikaci lze spustit lokálně nebo nasadit na Azure; postupujte podle instrukcí ve složce `quiz-app`. ## 🗃️ Lekce -| | Název projektu | Naučené koncepty | Výukové cíle | Odkaz na lekci | Autor | -| :-: | :--------------------------------------------------------: | :--------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | -| 01 | Začínáme | Úvod do programování a nástroje řemeslníka | Naučte se základy většiny programovacích jazyků a o softwaru, který pomáhá profesionálním vývojářům vykonávat jejich práci | [Úvod do programovacích jazyků a nástrojů](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | -| 02 | Začínáme | Základy GitHubu, včetně práce v týmu | Jak používat GitHub ve vašem projektu, jak spolupracovat s ostatními na kódu | [Úvod do GitHubu](./1-getting-started-lessons/2-github-basics/README.md) | Floor | -| 03 | Začínáme | Přístupnost | Naučte se základy webové přístupnosti | [Základy přístupnosti](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | -| 04 | Základy JS | Datové typy JavaScriptu | Základy datových typů v JavaScriptu | [Datové typy](./2-js-basics/1-data-types/README.md) | Jasmine | -| 05 | Základy JS | Funkce a metody | Naučte se o funkcích a metodách pro správu logiky aplikace | [Funkce a metody](./2-js-basics/2-functions-methods/README.md) | Jasmine a Christopher | -| 06 | Základy JS | Tvorba podmínek v JS | Naučte se vytvářet podmínky ve vašem kódu pomocí rozhodovacích metod | [Tvorba rozhodnutí](./2-js-basics/3-making-decisions/README.md) | Jasmine | -| 07 | Základy JS | Pole a smyčky | Pracujte s daty pomocí polí a smyček v JavaScriptu | [Pole a smyčky](./2-js-basics/4-arrays-loops/README.md) | Jasmine | -| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML v praxi | Vytvořte HTML pro online terárium se zaměřením na vytvoření rozvržení | [Úvod do HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | -| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS v praxi | Vytvořte CSS pro stylování online terária, se zaměřením na základy CSS včetně responzivního designu stránky | [Úvod do CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | -| 10 | [Terrarium](./3-terrarium/solution/README.md) | JavaScriptové uzávěry, manipulace s DOM | Vytvořte JavaScript pro funkčnost terária jako drag/drop rozhraní, zaměřeno na uzávěry a manipulaci s DOM | [JavaScript uzávěry a manipulace s DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | -| 11 | [Hra psaní na klávesnici](./4-typing-game/solution/README.md) | Vytvoření hry psaní na klávesnici | Naučte se používat klávesové události k řízení logiky vaší JavaScriptové aplikace | [Programování událostmi](./4-typing-game/typing-game/README.md) | Christopher | -| 12 | [Zelené rozšíření prohlížeče](./5-browser-extension/solution/README.md) | Práce s prohlížeči | Naučte se, jak prohlížeče fungují, jejich historický vývoj a jak vytvořit první prvky rozšíření prohlížeče | [O prohlížečích](./5-browser-extension/1-about-browsers/README.md) | Jen | -| 13 | [Zelené rozšíření prohlížeče](./5-browser-extension/solution/README.md) | Vytváření formuláře, volání API a ukládání proměnných do místního úložiště | Vytvořte JavaScriptové prvky rozšíření prohlížeče, které volají API a používají proměnné uložené v místním úložišti | [API, formuláře a místní úložiště](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | -| 14 | [Zelené rozšíření prohlížeče](./5-browser-extension/solution/README.md) | Pozadí procesy v prohlížeči, webový výkon | Použijte pozadí procesy pro zvládání ikony rozšíření, naučte se o webovém výkonu a optimalizacích | [Pozadí a výkon](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | -| 15 | [Hra ve vesmíru](./6-space-game/solution/README.md) | Pokročilejší vývoj hry v JavaScriptu | Naučte se o dědičnosti pomocí tříd a kompozice, stejně jako o vzoru Pub/Sub, jako přípravu na tvorbu hry | [Úvod do pokročilého vývoje her](./6-space-game/1-introduction/README.md) | Chris | -| 16 | [Hra ve vesmíru](./6-space-game/solution/README.md) | Kreslení na plátno | Naučte se o Canvas API používaném pro kreslení prvků na obrazovku | [Kreslení na plátno](./6-space-game/2-drawing-to-canvas/README.md) | Chris | -| 17 | [Hra ve vesmíru](./6-space-game/solution/README.md) | Pohyb prvků po obrazovce | Objevte, jak mohou prvky získat pohyb pomocí kartézských souřadnic a Canvas API | [Pohyb prvků](./6-space-game/3-moving-elements-around/README.md) | Chris | -| 18 | [Hra ve vesmíru](./6-space-game/solution/README.md) | Detekce kolizí | Umožněte prvkům kolidovat a reagovat na sebe pomocí stisknutí kláves a přidejte cooldown funkci pro zajištění výkonu hry | [Detekce kolizí](./6-space-game/4-collision-detection/README.md) | Chris | -| 19 | [Hra ve vesmíru](./6-space-game/solution/README.md) | Udržování skóre | Provádějte matematické výpočty založené na stavu a výkonu hry | [Udržování skóre](./6-space-game/5-keeping-score/README.md) | Chris | -| 20 | [Hra ve vesmíru](./6-space-game/solution/README.md) | Ukončování a restartování hry | Naučte se o ukončení a restartování hry, včetně čištění zdrojů a resetování proměnných hodnot | [Podmínka ukončení](./6-space-game/6-end-condition/README.md) | Chris | -| 21 | [Bankovní aplikace](./7-bank-project/solution/README.md) | HTML šablony a směrování v webové aplikaci | Naučte se vytvořit strukturu více stránkové webové aplikace použitím směrování a HTML šablon | [HTML šablony a směrování](./7-bank-project/1-template-route/README.md) | Yohan | -| 22 | [Bankovní aplikace](./7-bank-project/solution/README.md) | Vytvoření přihlašovacího a registračního formuláře | Naučte se vytvářet formuláře a zpracovávat validační rutiny | [Formuláře](./7-bank-project/2-forms/README.md) | Yohan | -| 23 | [Bankovní aplikace](./7-bank-project/solution/README.md) | Metody získávání a použití dat | Jak data proudí do vaší aplikace a ven, jak je načítat, ukládat a likvidovat | [Data](./7-bank-project/3-data/README.md) | Yohan | -| 24 | [Bankovní aplikace](./7-bank-project/solution/README.md) | Koncepty správy stavu | Naučte se, jak vaše aplikace uchovává stav a jak s ním programově pracovat | [Správa stavu](./7-bank-project/4-state-management/README.md) | Yohan | -| 25 | [Editor kódu pro prohlížeč/VScode](../../8-code-editor) | Práce s VScodem | Naučte se používat editor kódu | [Použití editoru VScode](./8-code-editor/1-using-a-code-editor/README.md) | Chris | -| 26 | [AI asistenti](./9-chat-project/README.md) | Práce s AI | Naučte se vytvořit vlastního AI asistenta | [Projekt AI asistenta](./9-chat-project/README.md) | Chris | +| | Název projektu | Naučené koncepty | Cíle učení | Propojená lekce | Autor | +| :-: | :--------------------------------------------------------: | :--------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | +| 01 | Začínáme | Úvod do programování a nástroje řemesla | Naučte se základní principy většiny programovacích jazyků a o softwaru, která pomáhá profesionálním vývojářům | [Úvod do programovacích jazyků a nástrojů](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | +| 02 | Začínáme | Základy GitHubu, včetně práce v týmu | Jak používat GitHub ve vašem projektu, jak spolupracovat s ostatními na kódu | [Úvod do GitHubu](./1-getting-started-lessons/2-github-basics/README.md) | Floor | +| 03 | Začínáme | Přístupnost | Naučte se základy webové přístupnosti | [Základy přístupnosti](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | +| 04 | Základy JS | Datové typy JavaScriptu | Základy datových typů v JavaScriptu | [Datové typy](./2-js-basics/1-data-types/README.md) | Jasmine | +| 05 | Základy JS | Funkce a metody | Naučte se o funkcích a metodách k řízení logiky aplikace | [Funkce a metody](./2-js-basics/2-functions-methods/README.md) | Jasmine a Christopher | +| 06 | Základy JS | Rozhodování v JS | Naučte se vytvářet podmínky ve vašem kódu pomocí rozhodovacích metod | [Rozhodování](./2-js-basics/3-making-decisions/README.md) | Jasmine | +| 07 | Základy JS | Pole a cykly | Práce s daty pomocí polí a cyklů v JavaScriptu | [Pole a cykly](./2-js-basics/4-arrays-loops/README.md) | Jasmine | +| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML v praxi | Vytvořte HTML pro online terárium, zaměřte se na tvorbu rozvržení | [Úvod do HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | +| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS v praxi | Vytvořte CSS pro stylování online terária, zaměřte se na základy CSS včetně responzivního designu | [Úvod do CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | +| 10 | [Terrarium](./3-terrarium/solution/README.md) | JavaScriptové uzávěry, manipulace s DOM | Napište JavaScript, aby terárium fungovalo jako rozhraní drag/drop, zaměřte se na uzávěry a manipulaci s DOM | [JavaScriptové uzávěry, manipulace s DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | +| 11 | [Typing Game](./4-typing-game/solution/README.md) | Vytvoření hry psaní na klávesnici | Naučte se používat události klávesnice k řízení logiky JavaScriptové aplikace | [Programování řízené událostmi](./4-typing-game/typing-game/README.md) | Christopher | +| 12 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Práce s prohlížeči | Naučte se, jak fungují prohlížeče, jejich historii a jak vytvářet základy rozšíření prohlížeče | [O prohlížečích](./5-browser-extension/1-about-browsers/README.md) | Jen | +| 13 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Vytváření formuláře, volání API a ukládání proměnných v lokálním úložišti | Vytvořte JavaScriptové prvky rozšíření pro volání API pomocí proměnných uložených v lokálním úložišti | [API, formuláře a lokální úložiště](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | +| 14 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Pozadí procesů v prohlížeči, webový výkon | Použijte pozadí prohlížeče ke správě ikony rozšíření; naučte se o výkonu webu a optimalizacích | [Pozadí úkolů a výkon](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | +| 15 | [Space Game](./6-space-game/solution/README.md) | Pokročilejší vývoj her v JavaScriptu | Naučte se o dědičnosti pomocí tříd a kompozice a o vzoru Pub/Sub jako příprava na tvorbu hry | [Úvod do pokročilého vývoje her](./6-space-game/1-introduction/README.md) | Chris | +| 16 | [Space Game](./6-space-game/solution/README.md) | Kreslení na plátno | Naučte se o Canvas API, které slouží k vykreslování prvků na obrazovku | [Kreslení na plátno](./6-space-game/2-drawing-to-canvas/README.md) | Chris | +| 17 | [Space Game](./6-space-game/solution/README.md) | Pohyb prvků po obrazovce | Objevte, jak mohou prvky získat pohyb pomocí kartézských souřadnic a Canvas API | [Pohyb prvků](./6-space-game/3-moving-elements-around/README.md) | Chris | +| 18 | [Space Game](./6-space-game/solution/README.md) | Detekce kolizí | Udělejte, aby se prvky srážely a reagovaly na sebe pomocí stisků kláves a přidejte funkci chladnutí pro výkon hry | [Detekce kolizí](./6-space-game/4-collision-detection/README.md) | Chris | +| 19 | [Space Game](./6-space-game/solution/README.md) | Udržování skóre | Proveďte matematické výpočty na základě stavu a výkonu hry | [Udržování skóre](./6-space-game/5-keeping-score/README.md) | Chris | +| 20 | [Space Game](./6-space-game/solution/README.md) | Ukončení a restartování hry | Naučte se o ukončení a restartování hry, včetně čištění zdrojů a resetování proměnných | [Podmínka ukončení](./6-space-game/6-end-condition/README.md) | Chris | +| 21 | [Banking App](./7-bank-project/solution/README.md) | HTML šablony a směrování ve webové aplikaci | Naučte se vytvářet architekturu vícestránkového webu pomocí směrování a HTML šablon | [HTML šablony a směrování](./7-bank-project/1-template-route/README.md) | Yohan | +| 22 | [Banking App](./7-bank-project/solution/README.md) | Vytvoření přihlašovacího a registračního formuláře | Naučte se o tvorbě formulářů a zpracování validací | [Formuláře](./7-bank-project/2-forms/README.md) | Yohan | +| 23 | [Banking App](./7-bank-project/solution/README.md) | Metody získávání a použití dat | Jak data proudí do a z vaší aplikace, jak je získávat, ukládat a odstraňovat | [Data](./7-bank-project/3-data/README.md) | Yohan | +| 24 | [Banking App](./7-bank-project/solution/README.md) | Koncepty správy stavu | Naučte se, jak vaše aplikace udržuje stav a jak ho programově spravovat | [Správa stavu](./7-bank-project/4-state-management/README.md) | Yohan | +| 25 | [Browser/VScode Code](../../8-code-editor) | Práce s VScode | Naučte se používat editor kódu | [Použití editoru kódu VScode](./8-code-editor/1-using-a-code-editor/README.md) | Chris | +| 26 | [AI Assistants](./9-chat-project/README.md) | Práce s AI | Naučte se vytvořit vlastního AI asistenta | [Projekt AI asistenta](./9-chat-project/README.md) | Chris | ## 🏫 Pedagogika -Náš učební plán je navržen se dvěma klíčovými pedagogickými principy: +Náš výukový plán je navržen s ohledem na dva klíčové pedagogické principy: * učení založené na projektech * časté kvízy -Program učí základy JavaScriptu, HTML a CSS, stejně jako nejnovější nástroje a techniky používané dnešními webovými vývojáři. Studenti získají příležitost získat praktické zkušenosti tvorbou hry na psaní na klávesnici, virtuálního terária, ekologicky šetrného rozšíření prohlížeče, hry ve stylu vesmírných vetřelců a bankovní aplikace pro firmy. Po dokončení série budou studenti mít pevné základy webového vývoje. +Program učí základy JavaScriptu, HTML a CSS, stejně jako nejnovější nástroje a techniky používané dnešními webovými vývojáři. Studenti budou mít možnost získat praktické zkušenosti stavbou hry psaní na klávesnici, virtuálního terária, ekologického rozšíření prohlížeče, hry ve stylu Space Invaders a bankovní aplikace pro firmy. Na konci série budou mít studenti pevné základy webového vývoje. -> 🎓 První lekce tohoto učebního plánu můžete absolvovat také jako [Výukovou cestu](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) na Microsoft Learn! +> 🎓 První lekce tohoto kurzu můžete absolvovat jako [Learn Path](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) na Microsoft Learn! -Zajištěním, že obsah odpovídá projektům, se proces pro studenty stává zajímavějším a dochází k lepšímu zapamatování konceptů. Napsali jsme také několik úvodních lekcí základů JavaScriptu, které představují koncepty, doplněné videem ze série "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)", jejíchž autoři se na plánu podíleli. +Díky sladění obsahu s projekty je proces pro studenty zajímavější a zvyšuje se zapamatování konceptů. Také jsme napsali několik úvodních lekcí o základech JavaScriptu doplněných videi z kolekce "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)", jejichž autoři se podíleli na tomto kurzu. -Navíc nízkorizikový kvíz před hodinou nastaví studentovi záměr naučit se téma, zatímco druhý kvíz po hodině zajistí další upevnění znalostí. Tento učební plán je navržen tak, aby byl flexibilní a zábavný, lze jej absolvovat celý nebo částečně. Projekty začínají jednoduché a ke konci 12týdenního cyklu se postupně stávají složitějšími. +Navíc nízkorizikový kvíz před hodinou nastavuje záměr studenta se učit dané téma, zatímco druhý kvíz po hodině podporuje další zapamatování. Tento kurz je navržen tak, aby byl flexibilní a zábavný a lze ho absolvovat celý nebo částečně. Projekty začínají malé a na konci 12týdenního cyklu jsou stále složitější. -Ačkoliv jsme záměrně vynechali zavádění JavaScriptových frameworků, abychom se zaměřili na základní dovednosti webového vývojáře před adopcí frameworku, vhodným dalším krokem po absolvování tohoto kurzu je naučit se Node.js prostřednictvím další kolekce videí: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". +Záměrně jsme se vyhnuli zavádění JavaScriptových frameworků, abychom se soustředili na základní dovednosti potřebné jako webový vývojář před přijetím frameworku, dobrým dalším krokem po absolvování tohoto kurzu by bylo naučit se Node.js prostřednictvím jiné kolekce videí: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". -> Navštivte naše [chování](CODE_OF_CONDUCT.md) a [příspěvky](CONTRIBUTING.md) pravidla. Vítáme vaše konstruktivní návrhy! +> Navštivte naše [Kodex chování](CODE_OF_CONDUCT.md) a [Přispívání](CONTRIBUTING.md). Těšíme se na vaše konstruktivní návrhy! ## 🧭 Offline přístup -Tuto dokumentaci můžete spustit offline pomocí [Docsify](https://docsify.js.org/#/). Vytvořte fork tohoto repozitáře, [nainstalujte Docsify](https://docsify.js.org/#/quickstart) na svém počítači a poté ve výchozím adresáři repozitáře spusťte příkaz `docsify serve`. Webová stránka poběží na portu 3000 na vašem localhostu: `localhost:3000`. +Tuto dokumentaci můžete spustit offline pomocí [Docsify](https://docsify.js.org/#/). Forkněte si toto repo, [nainstalujte Docsify](https://docsify.js.org/#/quickstart) na svém počítači a poté v kořenové složce tohoto repozitáře spusťte příkaz `docsify serve`. Webová stránka bude servírována na portu 3000 na vašem localhostu: `localhost:3000`. ## 📘 PDF +PDF všech lekcí naleznete [zde](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). -PDF se všemi lekcemi naleznete [zde](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). +## 🎒 Ostatní kurzy -## 🎒 Další kurzy -Náš tým vytváří i další kurzy! Podívejte se: +Náš tým připravuje i další kurzy! Podívejte se na: ### LangChain -[![LangChain4j pro začátečníky](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners) -[![LangChain.js pro začátečníky](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin) -[![LangChain pro začátečníky](https://img.shields.io/badge/LangChain%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin) +[![LangChain4j for Beginners](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners) +[![LangChain.js for Beginners](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin) +[![LangChain for Beginners](https://img.shields.io/badge/LangChain%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin) --- -### Azure / Edge / MCP / Agenti -[![AZD pro začátečníky](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) -[![Edge AI pro začátečníky](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) -[![MCP pro začátečníky](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) -[![AI agenti pro začátečníky](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) +### Azure / Edge / MCP / Agents +[![AZD for Beginners](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Edge AI for Beginners](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![MCP for Beginners](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) +[![AI Agents for Beginners](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) --- -### Série Generativní AI -[![Generativní AI pro začátečníky](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) -[![Generativní AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) -[![Generativní AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) -[![Generativní AI (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) +### Generativní AI série +[![Generative AI for Beginners](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Generative AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) +[![Generative AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) +[![Generative AI (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) --- -### Základní učení -[![Strojové učení pro začátečníky](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) -[![Data Science pro začátečníky](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) -[![AI pro začátečníky](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +### Základní vzdělávání +[![ML for Beginners](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) +[![Data Science for Beginners](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +[![AI for Beginners](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) [![Kybernetická bezpečnost pro začátečníky](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) [![Webový vývoj pro začátečníky](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) [![IoT pro začátečníky](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) -[![XR Vývoj pro začátečníky](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Vývoj XR pro začátečníky](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) --- ### Série Copilot -[![Copilot pro AI párové programování](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) -[![Copilot pro C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) +[![Copilot for AI Paired Programming](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) +[![Copilot for C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) [![Copilot Adventure](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) ## Získání pomoci -Pokud se zaseknete nebo máte jakékoli otázky ohledně vývoje AI aplikací, připojte se k ostatním učenlivým a zkušeným vývojářům v diskuzích o MCP. Je to podpůrná komunita, kde jsou otázky vítány a znalosti se sdílejí svobodně. +Pokud se zaseknete nebo máte otázky ohledně tvorby AI aplikací, připojte se k ostatním studentům a zkušeným vývojářům v diskusích o MCP. Je to podpůrná komunita, kde jsou otázky vítány a znalosti se sdílejí otevřeně. [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -Pokud máte zpětnou vazbu k produktu nebo chcete hlásit chyby při tvorbě, navštivte: +Pokud máte zpětnou vazbu k produktu nebo narazíte na chyby během vývoje, navštivte: [![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum) @@ -265,6 +274,6 @@ Tento repozitář je licencován pod licencí MIT. Více informací naleznete v --- -**Prohlášení o vyloučení odpovědnosti**: -Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho mateřském jazyce by měl být považován za autoritativní zdroj. Pro zásadní informace je doporučován profesionální lidský překlad. Nejsme odpovědní za jakékoli nedorozumění nebo nesprávné výklady vzniklé použitím tohoto překladu. +**Prohlášení o vyloučení odpovědnosti**: +Tento dokument byl přeložen pomocí AI překladatelské služby [Co-op Translator](https://github.com/Azure/co-op-translator). I když usilujeme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Originální dokument v jeho rodném jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Za jakékoli nedorozumění nebo nesprávné výklady vzniklé z použití tohoto překladu neneseme odpovědnost. \ No newline at end of file diff --git a/translations/da/.co-op-translator.json b/translations/da/.co-op-translator.json index 15f1dc205..dde1231a2 100644 --- a/translations/da/.co-op-translator.json +++ b/translations/da/.co-op-translator.json @@ -1,7 +1,7 @@ { "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { - "original_hash": "d45ddcc54eb9232a76d08328b09d792e", - "translation_date": "2026-01-07T00:03:59+00:00", + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T18:16:38+00:00", "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", "language_code": "da" }, @@ -493,7 +493,7 @@ }, "AGENTS.md": { "original_hash": "a362efd06d64d4134a0cfe8515a86d34", - "translation_date": "2026-02-06T17:25:00+00:00", + "translation_date": "2026-03-06T18:29:53+00:00", "source_file": "AGENTS.md", "language_code": "da" }, @@ -516,8 +516,8 @@ "language_code": "da" }, "README.md": { - "original_hash": "6d6385fd098088cb2d690fb0a6cdaedc", - "translation_date": "2026-02-06T17:20:19+00:00", + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T18:12:27+00:00", "source_file": "README.md", "language_code": "da" }, diff --git a/translations/da/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/da/1-getting-started-lessons/1-intro-to-programming-languages/README.md index 7037f29a2..b6d64bfe2 100644 --- a/translations/da/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/da/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,12 +1,12 @@ # Introduktion til programmeringssprog og moderne udviklerværktøjer -Hej der, kommende udvikler! 👋 Må jeg fortælle dig noget, der stadig giver mig kuldegysninger hver eneste dag? Du er ved at opdage, at programmering ikke bare handler om computere – det handler om at have ægte superkræfter til at bringe dine vildeste idéer til live! +Hej der, fremtidige udvikler! 👋 Må jeg fortælle dig noget, der stadig giver mig kuldegysninger hver eneste dag? Du er ved at opdage, at programmering ikke kun handler om computere – det handler om at have egentlige superkræfter til at bringe dine vildeste idéer til live! -Du kender det øjeblik, hvor du bruger din yndlingsapp, og alt bare fungerer perfekt? Når du trykker på en knap, og noget helt magisk sker, som får dig til at sige "wow, hvordan gjorde de DET?" Nå, nogen ligesom dig – sandsynligvis siddende i deres yndlingskaffebar kl. 2 om natten med deres tredje espresso – skrev koden, der skabte den magi. Og her er det, der vil blæse dig væk: ved slutningen af denne lektion vil du ikke kun forstå, hvordan de gjorde det, men du vil også være ivrig efter at prøve det selv! +Du kender det øjeblik, hvor du bruger din yndlingsapp, og alt bare klikker perfekt? Når du trykker på en knap, og der sker noget helt magisk, som får dig til at sige "wow, hvordan gjorde de DET?" Nå, så er det en person ligesom dig – sandsynligvis sidder de i deres yndlingscafé kl. 2 om natten med deres tredje espresso – som skrev koden, der skabte den magi. Og her kommer noget, der vil blæse dig omkuld: når vi er færdige med denne lektion, vil du ikke kun forstå, hvordan de gjorde det, men du vil være helt ivrig efter selv at prøve! -Se, jeg forstår fuldt ud, hvis programmering føles skræmmende lige nu. Da jeg begyndte, troede jeg ærligt talt, at du skulle være en slags matematisk geni eller have kodet siden du var fem år gammel. Men her er det, der fuldstændig ændrede min opfattelse: programmering er præcis som at lære at føre samtaler på et nyt sprog. Du starter med "hej" og "tak," så øver du dig i at bestille kaffe, og før du ved af det, har du dybe filosofiske diskussioner! Bortset fra at i dette tilfælde fører du samtaler med computere, og ærligt talt? De er de mest tålmodige samtalepartnere, du nogensinde vil møde – de dømmer aldrig dine fejl og er altid begejstrede for at prøve igen! +Se, jeg forstår det godt, hvis programmering føles intimiderende lige nu. Da jeg begyndte, troede jeg ærligt talt, at man skulle være en slags matematisk geni eller have kodet siden, man var fem år gammel. Men her er det, der helt ændrede mit perspektiv: programmering er præcis som at lære at føre samtaler på et nyt sprog. Du starter med "hej" og "tak," så lærer du at bestille kaffe, og inden du ved af det, fører du dybe filosofiske samtaler! Bortset fra at i dette tilfælde fører du samtaler med computere, og helt seriøst? De er de mest tålmodige samtalepartnere, du nogensinde vil møde – de dømmer aldrig dine fejl og er altid begejstrede for at prøve igen! -I dag skal vi udforske de utrolige værktøjer, der gør moderne webudvikling ikke bare mulig, men også seriøst vanedannende. Jeg taler om de nøjagtige redaktører, browsere og arbejdsprocesser, som udviklere hos Netflix, Spotify og dit yndlings indie app-studie bruger hver eneste dag. Og her er den del, der vil få dig til at lave en glad dans: de fleste af disse professionelle, branchestandard-værktøjer er helt gratis! +I dag skal vi udforske de utrolige værktøjer, der gør moderne webudvikling ikke bare muligt, men decideret vanedannende. Jeg taler om præcis de samme editorer, browsere og arbejdsgange, som udviklere hos Netflix, Spotify og dit yndlings indie app-studie bruger hver eneste dag. Og her kommer den del, der får dig til at danse af glæde: de fleste af disse professionelle, branchestandard værktøjer er fuldstændig gratis! ![Intro Programming](../../../../translated_images/da/webdev101-programming.d6e3f98e61ac4bff.webp) > Sketchnote af [Tomomi Imura](https://twitter.com/girlie_mac) @@ -24,61 +24,61 @@ journey Kommandolinje: 3: You section Øv Sprogdetektiv: 4: You - Værktøjseksploration: 5: You + Værktøjsekspedition: 5: You Fællesskabsforbindelse: 5: You ``` ## Lad os se, hvad du allerede ved! -Inden vi hopper til det sjove, er jeg nysgerrig – hvad ved du allerede om denne programmeringsverden? Og hør, hvis du kigger på disse spørgsmål og tænker "jeg har bogstaveligt talt nul idé om noget af dette," så er det ikke bare okay, det er perfekt! Det betyder, at du er lige præcis det rigtige sted. Tænk på denne quiz som opvarmning før træning – vi varmer bare hjernemusklerne op! +Før vi springer ud i det sjove, er jeg nysgerrig – hvad ved du allerede om denne programmeringsverden? Og hør, hvis du kigger på disse spørgsmål og tænker "jeg har bogstaveligt talt nul idé om noget som helst af det her," så er det ikke bare i orden, det er perfekt! Det betyder, at du er helt det rigtige sted. Tænk på denne quiz som opvarmning før træning – vi varmer bare hjerne musklerne op! -[Tag pre-lektion quizzen](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) +[Tag pre-lesson quizzen](https://ff-quizzes.netlify.app/web/) -## Eventyret vi skal tage på sammen +## Eventyret, vi snart skal på sammen -Okay, jeg er ægte begejstret og hopper næsten af sted for at udforske det, vi skal i dag! Seriøst, jeg ville ønske, jeg kunne se dit ansigt, når nogle af disse koncepter går op for dig. Her er den utrolige rejse, vi tager sammen: +Okay, jeg er virkelig begejstret for, hvad vi skal udforske i dag! Seriøst, jeg ville ønske, jeg kunne se dit ansigt, når nogle af disse koncepter klikker for dig. Her er den utrolige rejse, vi tager sammen: -- **Hvad programmering egentlig er (og hvorfor det er det fedeste i verden!)** – Vi skal opdage, hvordan kode bogstaveligt talt er den usynlige magi, der driver alt omkring dig, fra den alarm, der på en eller anden måde ved, det er mandag morgen, til algoritmen, der perfekt kuraterer dine Netflix-anbefalinger -- **Programmeringssprog og deres fantastiske personligheder** – Forestil dig at komme til en fest, hvor hver person har helt forskellige superkræfter og måder at løse problemer på. Sådan er verden af programmeringssprog, og du vil elske at møde dem! -- **De grundlæggende byggesten, der får digital magi til at ske** – Tænk på disse som det ultimative kreative LEGO-sæt. Når du forstår, hvordan disse stykker passer sammen, vil du indse, at du bogstaveligt talt kan bygge alt, hvad din fantasi drømmer om -- **Professionelle værktøjer, der får dig til at føle, at du lige har fået udleveret en troldmandsstav** – Jeg overdriver ikke her – disse værktøjer får dig virkelig til at føle, at du har superkræfter, og det bedste? Det er de samme, som professionelle bruger! +- **Hvad programmering egentlig er (og hvorfor det er det fedeste overhovedet!)** – Vi skal opdage, hvordan kode bogstaveligt talt er den usynlige magi, der driver alt omkring dig, fra det vækkeur, der på en eller anden måde ved, det er mandag morgen, til algoritmen, der perfekt kuraterer dine Netflix-anbefalinger +- **Programmeringssprog og deres fantastiske personligheder** – Forestil dig at gå til en fest, hvor hver person har helt forskellige superkræfter og måder at løse problemer på. Sådan er programmeringssprogenes verden, og du kommer til at elske at møde dem! +- **De grundlæggende byggesten, der skaber digital magi** – Tænk på disse som det ultimative kreative LEGO sæt. Når du forstår, hvordan disse brikker passer sammen, vil du indse, at du bogstaveligt talt kan bygge alt, hvad din fantasi drømmer om +- **Professionelle værktøjer, der får dig til at føle, at du lige har fået en troldmandsstav** – Jeg overdriver ikke – disse værktøjer vil virkelig få dig til at føle, at du har superkræfter, og det bedste? Det er de samme, som profferne bruger! -> 💡 **Det her er sagen**: Tænk ikke engang på at prøve at huske alting i dag! Lige nu vil jeg bare have, at du mærker gnisten af begejstring over, hvad der er muligt. Detaljerne vil fastholde sig naturligt, når vi øver sammen – det er sådan, rigtig læring sker! +> 💡 **Her er sagen**: Tænk ikke engang på at forsøge at huske alt i dag! Lige nu vil jeg bare have, at du mærker den gnist af begejstring for, hvad der er muligt. Detaljerne sidder naturligt fast, mens vi øver sammen – sådan sker rigtig læring! -> Du kan tage denne lektion på [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! +> Du kan tage denne lektion på [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! -## Så hvad *er* programmering egentlig? +## Hvad er programmering egentlig? -Okay, lad os tage fat på million-dollar spørgsmålet: hvad er programmering egentlig? +Okay, lad os tage milliondollarsspørgsmålet: hvad er programmering egentlig? -Jeg vil give dig en historie, der fuldstændig ændrede min måde at tænke på det her. I sidste uge prøvede jeg at forklare min mor, hvordan hun bruger vores nye smart TV-fjernbetjening. Jeg fangede mig selv i at sige ting som "Tryk på den røde knap, men ikke den store røde knap, den lille røde knap til venstre... nej, din anden venstre... okay, nu hold den i to sekunder, ikke et, ikke tre..." Lyder det bekendt? 😅 +Jeg vil fortælle dig en historie, der helt ændrede, hvordan jeg ser det. I sidste uge prøvede jeg at forklare min mor, hvordan hun bruger vores nye smart TV-fjernbetjening. Jeg fangede mig selv i at sige ting som "Tryk på den røde knap, men ikke den store røde knap, den lille røde knap til venstre... nej, din anden venstre... okay, hold den nu i to sekunder, ikke et, ikke tre..." Lyder det bekendt? 😅 -Det er programmering! Det er kunsten at give utroligt detaljerede, trin-for-trin instruktioner til noget, der er meget kraftfuldt, men som har brug for, at alt bliver stavet ud helt præcist. Bortset fra at i stedet for at forklare det til din mor (som kan spørge "hvilken rød knap?!"), forklarer du det til en computer (som bare gør præcis, hvad du siger, selvom det, du sagde, ikke helt var det, du mente). +Det er programmering! Det er kunsten at give utrolig detaljerede, trin-for-trin instruktioner til noget, der er meget kraftfuldt, men som skal have alt stavet helt præcist ud. Bortset fra at i stedet for at forklare det til din mor (som kan spørge "hvilken rød knap?!"), forklarer du det til en computer (der bare gør præcis, hvad du siger, selvom det, du sagde, ikke helt er det, du mente). -Her er det, der blæste mit sind, da jeg først lærte det: computere er faktisk ret simple i deres kerne. De forstår faktisk kun to ting – 1 og 0, hvilket grundlæggende bare er "ja" og "nej" eller "til" og "fra." Det er det! Men her bliver det magisk – vi behøver ikke tale i 1'ere og 0'ere, som om vi var i The Matrix. Det er her, **programmeringssprog** kommer til undsætning. De er som verdens bedste oversætter, der tager dine helt almindelige mennesketanker og omsætter dem til computersprog. +Her er, hvad der blæste mig omkuld, da jeg lærte det første gang: computere er faktisk ret simple i deres kerne. De forstår bogstaveligt talt kun to ting – 1 og 0, som grundlæggende bare betyder "ja" og "nej" eller "til" og "fra." Det er det! Men her bliver det magisk – vi behøver ikke at tale i 1'ere og 0'ere som i The Matrix. Det er her, **programmeringssprogene** kommer ind som superhelte. De er som den bedste oversætter i verden, der tager dine helt normale mennesketanker og omsætter dem til computersprog. -Og her er det, der stadig giver mig ægte kuldegysninger hver morgen, når jeg vågner: bogstaveligt talt *alt* digitalt i dit liv startede med nogen ligesom dig, sandsynligvis siddende i deres pyjamas med en kop kaffe, der skrev kode på deres bærbare. Det Instagram-filter, der får dig til at se fejlfri ud? Nogen kodede det. Anbefalingen, der førte dig til din nye yndlingssang? En udvikler byggede den algoritme. Appen, der hjælper dig med at dele middagsregningen med venner? Jep, nogen tænkte "det her er irriterende, det kan jeg fixe" og så... gjorde de det! +Og her er noget, der stadig giver mig virkelige kuldegysninger hver morgen, når jeg vågner: bogstaveligt talt *alt* digitalt i dit liv startede med en person ligesom dig, sikkert siddende i pyjamas med en kop kaffe til at skrive kode på deres laptop. Den Instagram-filter, der får dig til at se fejlfri ud? Nogen skrev den kode. Anbefalingen, der førte dig til din nye yndlingssang? En udvikler byggede den algoritme. Appen, der hjælper dig med at dele regninger til middag med venner? Yep, nogen tænkte "det her er irriterende, det kan jeg fixe" – og så gjorde de det! -Når du lærer at programmere, tager du ikke bare en ny færdighed til dig – du bliver en del af dette utrolige fællesskab af problemløsere, der tilbringer deres dage med at tænke, "Hvad nu hvis jeg kunne bygge noget, der gør nogens dag bare en smule bedre?" Ærligt talt, er der noget sejere end det? +Når du lærer at programmere, så lærer du ikke bare en ny færdighed – du bliver en del af et utrolig fællesskab af problemløsere, der bruger deres dage på at tænke: "Hvad nu hvis jeg kunne bygge noget, der gør nogens dag bare en lille smule bedre?" Ærligt talt, er der noget sejere end det? -✅ **Sjov fakta-jagt**: Her er noget super sejt at slå op, når du har et ledigt øjeblik – hvem tror du var verdens første computerprogrammør? Jeg giver dig et hint: Det er måske ikke den, du forventer! Historien om denne person er virkelig fascinerende og viser, at programmering altid har handlet om kreativ problemløsning og at tænke uden for boksen. +✅ **Sjov fakta-jagt**: Her er noget super sejt at slå op, når du har et øjeblik til overs – hvem tror du var verdens første computerprogrammør? Jeg giver dig et hint: det er måske ikke den, du forventer! Historien bag denne person er absolut fascinerende og viser, at programmering altid har handlet om kreativ problemløsning og at tænke ud af boksen. -### 🧠 **Check-in tid: Hvordan har du det?** +### 🧠 **Tjek-ind tid: Hvordan har du det?** **Tag et øjeblik til at reflektere:** - Giver idéen om "at give instruktioner til computere" mening for dig nu? - Kan du tænke på en daglig opgave, du gerne vil automatisere med programmering? -- Hvilke spørgsmål dukker op i dit hoved om det her med programmering? +- Hvilke spørgsmål bobler op i dit hoved om det her programmeringshalløj? -> **Husk**: Det er helt normalt, hvis nogle koncepter føles uklare lige nu. At lære programmering er som at lære et nyt sprog – det tager tid for din hjerne at bygge de neurale stier. Du gør det rigtig godt! +> **Husk**: Det er helt normalt, hvis nogle koncepter føles lidt uklare lige nu. At lære programmering er som at lære et nyt sprog – det tager tid for din hjerne at bygge de neurale forbindelser. Du gør det rigtig godt! ## Programmeringssprog er som forskellige slags magi -Okay, det her kommer til at lyde mærkeligt, men hæng på mig – programmeringssprog er meget lig forskellige slags musik. Tænk på det: Du har jazz, som er blød og improvisatorisk, rock, der er kraftfuld og ligetil, klassisk, der er elegant og struktureret, og hip-hop, der er kreativ og udtryksfuld. Hver stil har sin egen stemning, sit eget fællesskab af passionerede fans, og hver enkelt er perfekt til forskellige stemninger og lejligheder. +Okay, det her kommer måske til at lyde mærkeligt, men hæng på mig – programmeringssprog er meget lig forskellige slags musik. Tænk på det: du har jazz, som er smooth og improviserende, rock der er kraftfuld og ligetil, klassisk der er elegant og struktureret, og hip-hop der er kreativ og udtryksfuld. Hver stil har sin egen stemning, sit eget passionerede fællesskab, og hver er perfekt til forskellige stemninger og lejligheder. -Programmeringssprog fungerer på præcis samme måde! Du ville ikke bruge det samme sprog til at bygge et sjovt mobilspil, som du ville bruge til at bearbejde enorme mængder klimadata – ligesom du ikke ville spille death metal til en yogatime (nå, de fleste yogatimer i hvert fald! 😄). +Programmeringssprog fungerer helt på samme måde! Du ville ikke bruge det samme sprog til at bygge et sjovt mobilspil, som du bruger til at bearbejde massive mængder klimadata, ligesom du ikke ville spille death metal til en yogatime (nå, de fleste yogatimer i hvert fald! 😄). -Men her er det, der altid blæser mig væk, hver gang jeg tænker på det: disse sprog er som at have den mest tålmodige, geniale tolk i verden siddende lige ved siden af dig. Du kan udtrykke dine idéer på en måde, der føles naturlig for din menneskehjerne, og de håndterer alt det utroligt komplekse arbejde med at oversætte det til 1'erne og 0'erne, som computere rent faktisk taler. Det er som at have en ven, der er fuldstændig flydende i både "menneskelig kreativitet" og "computerlogik" – og de bliver aldrig trætte, har aldrig kaffepauser og dømmer dig aldrig for at stille det samme spørgsmål to gange! +Men her er det, der absolut blæser mig omkuld hver gang jeg tænker på det: disse sprog er som at have den mest tålmodige, brillante tolk i verden siddende lige ved siden af dig. Du kan udtrykke dine idéer på en måde, der føles naturlig for din menneskehjerne, og de håndterer alt det utroligt komplekse arbejde med at oversætte det til de 1'ere og 0'ere, som computere rent faktisk taler. Det er som at have en ven, der er perfekt flydende i både "menneskelig kreativitet" og "computerlogik" – og som aldrig bliver træt, aldrig har kaffepauser og aldrig dømmer dig for at stille det samme spørgsmål to gange! ### Populære programmeringssprog og deres anvendelser @@ -88,10 +88,10 @@ mindmap Webudvikling JavaScript Frontend Magi - Interaktive Websites + Interaktive Hjemmesider TypeScript JavaScript + Typer - Virksomhedsapps + Enterprise Apps Data & AI Python Data Science @@ -103,7 +103,7 @@ mindmap Mobilapps Java Android - Virksomhed + Enterprise Swift iOS Apple Økosystem @@ -113,66 +113,66 @@ mindmap Systemer & Ydeevne C++ Spil - Ydeevne Kritisk + Ydeevnekritisk Rust Hukommelsessikkerhed Systemprogrammering Go - Cloudtjenester + Cloud-tjenester Skalerbar Backend ``` | Sprog | Bedst til | Hvorfor det er populært | |----------|----------|------------------| -| **JavaScript** | Webudvikling, brugergrænseflader | Kører i browsere og driver interaktive websites | -| **Python** | Data science, automation, AI | Let at læse og lære, kraftfulde biblioteker | -| **Java** | Enterprise-applikationer, Android-apps | Platformuafhængigt, robust til store systemer | +| **JavaScript** | Webudvikling, brugerinterfaces | Kører i browsere og driver interaktive websites | +| **Python** | Data science, automatisering, AI | Let at læse og lære, kraftfulde biblioteker | +| **Java** | Virksomhedsapplikationer, Android apps | Platform-uafhængigt, robust til store systemer | | **C#** | Windows-applikationer, spiludvikling | Stærk Microsoft-økosystemstøtte | -| **Go** | Cloud-services, backend-systemer | Hurtigt, enkelt, designet til moderne computing | +| **Go** | Cloud-tjenester, backend-systemer | Hurtigt, simpelt, designet til moderne computing | -### High-Level vs. Low-Level sprog +### Høj-niveau vs. Lav-niveau sprog -Okay, det her var ærligt talt det koncept, der knækkede min hjerne, da jeg først begyndte at lære, så jeg deler den analogi, der endelig fik det til at gå op for mig – og jeg håber virkelig, den hjælper dig også! +Okay, det her var ærligt talt det koncept, der brød min hjerne, da jeg først begyndte at lære, så jeg vil dele den analogi, der endelig fik det til at klikke for mig – og jeg håber virkelig, det hjælper dig også! -Forestil dig, at du besøger et land, hvor du ikke taler sproget, og du desperat har brug for at finde den nærmeste toilet (det har vi alle været ude for, ikke? 😅): +Forestil dig, at du besøger et land, hvor du ikke taler sproget, og du desperat skal finde det nærmeste toilet (det har vi alle prøvet, ikke? 😅): -- **Low-level programmering** er som at lære det lokale dialekt så godt, at du kan snakke med bedstemor, der sælger frugt på hjørnet, ved hjælp af kulturelle referencer, lokalt slang og interne jokes, som kun nogen, der voksede op der, ville forstå. Super imponerende og utroligt effektivt... hvis du tilfældigvis er flydende! Men ret overvældende, når du bare prøver at finde toilettet. +- **Lav-niveau programmering** er som at lære det lokale dialekt så godt, at du kan chatte med bedstemor, der sælger frugt på hjørnet, med kulturelle referencer, lokalt slang og interne jokes, som kun en, der er opvokset der, ville forstå. Super imponerende og utroligt effektivt ... hvis du tilfældigvis er flydende! Men ret overvældende, når du bare prøver at finde et toilet. -- **High-level programmering** er som at have den fantastiske lokale ven, der bare forstår dig. Du kan sige "Jeg har virkelig brug for at finde et toilet" på almindeligt engelsk, og de håndterer al den kulturelle oversættelse og giver dig vejledning på en måde, der giver perfekt mening for din ikke-lokale hjerne. +- **Høj-niveau programmering** er som at have den fantastiske lokale ven, der bare forstår dig. Du kan sige "jeg skal virkelig finde et toilet" på entydigt dansk (eller engelsk), og de håndterer hele den kulturelle oversættelse og giver dig anvisninger på en måde, der giver perfekt mening for din ikke-lokale hjerne. -I programmeringsterminologi: -- **Low-level sprog** (som Assembly eller C) lader dig føre utroligt detaljerede samtaler med computerens faktiske hardware, men du skal tænke som en maskine, hvilket... lad os bare sige, er et stort mentalt skift! -- **High-level sprog** (som JavaScript, Python eller C#) lader dig tænke som et menneske, mens de håndterer al maskinsproget bag kulisserne. Plus, de har utroligt imødekommende fællesskaber fulde af folk, der husker, hvordan det var at være ny, og som virkelig vil hjælpe! +I programmering betyder det: +- **Lav-niveau sprog** (som Assembly eller C) lader dig føre utrolig detaljerede samtaler med computerens egentlige hardware, men du skal tænke som en maskine, hvilket… godt, lad os bare sige, det er et stort mentalt skift! +- **Høj-niveau sprog** (som JavaScript, Python eller C#) lader dig tænke som et menneske, mens de håndterer alle maskinsprogets ting bag kulisserne. Plus har de disse utroligt imødekommende fællesskaber fulde af folk, der husker, hvordan det var at være ny og oprigtigt vil hjælpe! -Gæt hvilke jeg vil foreslå, du starter med? 😉 High-level sprog er som at have støttehjul, som du faktisk aldrig rigtig vil tage af, fordi de gør hele oplevelsen meget sjovere! +Gæt hvilke, jeg vil foreslå, du starter med? 😉 Høj-niveau sprog er som at have træningshjul på, som du aldrig rigtig vil tage af, fordi det gør hele oplevelsen så meget mere fornøjelig! ```mermaid flowchart TB - A["👤 Menneskelig Tanke:
'Jeg vil beregne Fibonacci tal'"] --> B{Vælg Sprog Niveau} + A["👤 Menneskelig tanke:
'Jeg vil beregne Fibonacci-tal'"] --> B{Vælg sprogniveau} - B -->|Højt Niveau| C["🌟 JavaScript/Python
Let at læse og skrive"] - B -->|Lavt Niveau| D["⚙️ Assembly/C
Direkte hardware kontrol"] + B -->|Højniveau| C["🌟 JavaScript/Python
Nem at læse og skrive"] + B -->|Lavniveau| D["⚙️ Assembly/C
Direkte hardwarekontrol"] C --> E["📝 Skriv: fibonacci(10)"] D --> F["📝 Skriv: mov r0,#00
sub r0,r0,#01"] - E --> G["🤖 Computer Forståelse:
Oversætter håndterer kompleksitet"] + E --> G["🤖 Computerforståelse:
Oversætter håndterer kompleksitet"] F --> G - G --> H["💻 Samme Resultat:
0, 1, 1, 2, 3, 5, 8, 13..."] + G --> H["💻 Samme resultat:
0, 1, 1, 2, 3, 5, 8, 13..."] style C fill:#e1f5fe style D fill:#fff3e0 style H fill:#e8f5e8 ``` -### Lad mig vise dig, hvorfor High-Level sprog er meget mere brugervenlige +### Lad mig vise dig, hvorfor høj-niveau sprog er så meget mere venlige -Okay, jeg er ved at vise dig noget, der perfekt demonstrerer, hvorfor jeg forelskede mig i high-level sprog, men først – jeg har brug for, at du lover mig noget. Når du ser det første kodeeksempel, så lad være med at gå i panik! Det er meningen, det skal se skræmmende ud. Det er præcis det, jeg vil sige med det! +Okay, jeg er lige ved at vise dig noget, der perfekt demonstrerer, hvorfor jeg forelskede mig i høj-niveau sprog, men først – jeg har brug for, at du lover mig noget. Når du ser det første kodeeksempel, så få ikke panik! Det er meningen, det skal se lidt skræmmende ud. Det er netop pointen! -Vi kigger på den samme opgave skrevet i to helt forskellige stilarter. Begge skaber det, der kaldes Fibonacci-sekvensen – det er et smukt matematisk mønster, hvor hvert tal er summen af de to foregående: 0, 1, 1, 2, 3, 5, 8, 13... (Sjovt faktum: du finder dette mønster bogstaveligt talt overalt i naturen – solsikkefrøspiraler, kogler, endda hvordan galakser dannes!) +Vi skal kigge på den helt samme opgave skrevet i to helt forskellige stilarter. Begge skaber det, der kaldes Fibonacci-sekvensen – det er et smukt matematisk mønster, hvor hvert tal er summen af de to forrige: 0, 1, 1, 2, 3, 5, 8, 13... (Sjovt faktum: du finder dette mønster bogstaveligt talt overalt i naturen – solsikkekerner spiraler, kogler, selv hvordan galakser dannes!) Klar til at se forskellen? Lad os gå i gang! -**High-level sprog (JavaScript) – Menneskevenligt:** +**Høj-niveau sprog (JavaScript) – Menneskevenligt:** ```javascript // Trin 1: Grundlæggende Fibonacci opsætning @@ -183,11 +183,11 @@ let next = 1; console.log('Fibonacci sequence:'); ``` -**Her er, hvad denne kode gør:** +**Det her gør koden:** - **Deklarerer** en konstant for at angive, hvor mange Fibonacci-tal vi vil generere -- **Initialiserer** to variabler for at holde styr på det nuværende og næste tal i sekvensen -- **Sætter op** startværdierne (0 og 1), der definerer Fibonacci-mønstret -- **Viser** en overskrift for at identificere vores output +- **Initialiserer** to variabler for at holde styr på de nuværende og næste tal i sekvensen +- **Sætter op** startværdierne (0 og 1), som definerer Fibonacci-mønstret +- **Viser** en overskrift til at identificere vores output ```javascript // Trin 2: Generer sekvensen med en løkke @@ -201,11 +201,11 @@ for (let i = 0; i < fibonacciCount; i++) { } ``` -**Her er, hvad der sker her:** +**Hvad der sker her:** - **Looper** gennem hver position i vores sekvens med en `for`-løkke -- **Viser** hvert tal med dets position ved hjælp af template literals -- **Beregner** det næste Fibonacci-tal ved at lægge det nuværende og næste sammen -- **Opdaterer** vores sporingsvariabler for at gå videre til næste iteration +- **Viser** hvert tal med dets position ved brug af en template literal-formattering +- **Beregner** det næste Fibonacci-tal ved at lægge nuværende og næste værdier sammen +- **Opdaterer** vores sporingsvariabler til at gå videre til næste iteration ```javascript // Trin 3: Moderne funktionel tilgang @@ -224,13 +224,13 @@ const fibSequence = generateFibonacci(10); console.log(fibSequence); ``` -**Her har vi:** -- **Oprettet** en genanvendelig funktion med moderne arrow-funktions-syntaks -- **Bygget** et array til at gemme hele sekvensen i stedet for at vise tal et efter et -- **Brugt** array-indeksering til at beregne hvert nyt tal fra tidligere værdier -- **Returneret** hele sekvensen for fleksibel brug i andre dele af programmet +**I ovenstående har vi:** +- **Oprettet** en genanvendelig funktion ved brug af moderne arrow function-syntaks +- **Bygget** et array til at gemme hele sekvensen i stedet for at vise talene ét ad gangen +- **Brugt** array-indeksering til at beregne hvert nyt tal ud fra tidligere værdier +- **Returneret** hele sekvensen for fleksibel brug i andre dele af vores program -**Low-level sprog (ARM Assembly) – Computer-venligt:** +**Lav-niveau sprog (ARM Assembly) – Computer-venligt:** ```assembly area ascen,code,readonly @@ -257,39 +257,39 @@ back add r0,r1 end ``` -Læg mærke til, hvordan JavaScript-versionen næsten læses som engelske instruktioner, mens Assembly-versionen bruger kryptiske kommandoer, der direkte styrer computerens processor. Begge løser den nøjagtige samme opgave, men høj-niveausproget er langt nemmere for mennesker at forstå, skrive og vedligeholde. +Læg mærke til, hvordan JavaScript-versionen nærmest læser som engelske instruktioner, mens Assembly-versionen bruger kryptiske kommandoer, der direkte styrer computerens processor. Begge udfører nøjagtigt samme opgave, men høj-niveau sproget er langt lettere for mennesker at forstå, skrive og vedligeholde. **Nøgleforskelle, du vil bemærke:** - **Læsbarhed**: JavaScript bruger beskrivende navne som `fibonacciCount`, mens Assembly bruger kryptiske labels som `r0`, `r1` -- **Kommentarer**: Høj-niveau sprog opfordrer til forklarende kommentarer, der gør koden selvforklarende +- **Kommentarer**: Højniveausprog opfordrer til forklarende kommentarer, som gør koden selvdokumenterende - **Struktur**: JavaScripts logiske flow matcher, hvordan mennesker tænker over problemer trin for trin - **Vedligeholdelse**: Opdatering af JavaScript-versionen til forskellige krav er ligetil og klart -✅ **Om Fibonacci-sekvensen**: Dette helt utroligt smukke talmønster (hvor hvert tal er summen af de to foregående: 0, 1, 1, 2, 3, 5, 8...) dukker op bogstaveligt talt *overalt* i naturen! Du finder det i solsikkespiraler, fyrrekoglemønstre, måden nautilusskaller krummer sig på, og endda i, hvordan trægrene vokser. Det er ret sindssygt, hvordan matematik og kode kan hjælpe os med at forstå og genskabe de mønstre, som naturen bruger til at skabe skønhed! +✅ **Om Fibonacci-sekvensen**: Dette absolut smukke talmønster (hvor hvert tal svarer til summen af de to foregående: 0, 1, 1, 2, 3, 5, 8...) optræder bogstaveligt talt *overalt* i naturen! Du finder det i solsikkespiraler, koglernes mønstre, hvordan nautilusskaller krummer, og endda i måden trægrene vokser på. Det er ret fantastiskt, hvordan matematik og kode kan hjælpe os med at forstå og genskabe de mønstre, som naturen bruger til at skabe skønhed! -## Byggestenene, der får magien til at ske +## Byggestenene, Der Får Magien Til At Ske -Okay, nu hvor du har set, hvordan programmeringssprog ser ud i praksis, lad os bryde de grundlæggende dele ned, som alle programmer nogensinde skrevet består af. Tænk på disse som essentielle ingredienser i din yndlingsopskrift – når du først forstår, hvad hver enkelt gør, vil du kunne læse og skrive kode i stort set ethvert sprog! +Okay, nu hvor du har set, hvordan programmeringssprog ser ud i aktion, lad os bryde de fundamentale dele ned, der udgør bogstaveligt talt ethvert program, der nogensinde er skrevet. Tænk på disse som de grundlæggende ingredienser i din yndlingsopskrift – når du forstår, hvad hvert element gør, vil du kunne læse og skrive kode i stort set ethvert sprog! -Det er lidt ligesom at lære grammatikken i programmering. Kan du huske fra skolen, da du lærte om substantiver, verber og hvordan man sætter sætninger sammen? Programmering har sin egen version af grammatik, og for at være ærlig, så er den meget mere logisk og tilgivende end engelsk grammatik nogensinde var! 😄 +Det er lidt ligesom at lære grammatik for programmering. Kan du huske i skolen, da du lærte om substantiver, verber og at sætte sætninger sammen? Programmering har sin egen version af grammatik, og ærligt talt er den langt mere logisk og tilgivende end engelsk grammatik nogensinde var! 😄 -### Udsagn: Trin-for-trin instruktioner +### Statements: Trin-for-trin instruktionerne -Lad os starte med **udsagn** – de er som individuelle sætninger i en samtale med din computer. Hvert udsagn fortæller computeren at gøre én bestemt ting, lidt ligesom at give vejledning: "Drej til venstre her," "Stop ved det røde lys," "Parkér der." +Lad os starte med **statements** – de er som individuelle sætninger i en samtale med din computer. Hvert statement fortæller computeren at gøre én bestemt ting, lidt ligesom at give anvisninger: "Drej til venstre her," "Stop ved det røde lys," "Parkingér på det sted." -Det, jeg elsker ved udsagn, er hvor læsbare de som regel er. Se på dette: +Det jeg elsker ved statements er, hvor læselige de normalt er. Se lige her: ```javascript -// Grundlæggende sætninger, der udfører enkeltstående handlinger +// Grundlæggende udsagn, der udfører enkeltstående handlinger const userName = "Alex"; console.log("Hello, world!"); const sum = 5 + 3; ``` -**Her er, hvad denne kode gør:** -- **Deklarerer** en konstant variabel til at gemme en brugers navn -- **Viser** en hilsen i konsoloutputtet +**Sådan fungerer denne kode:** +- **Deklarer** en konstant variabel til at gemme en brugers navn +- **Viser** en hilsen til konsoloutput - **Beregner** og gemmer resultatet af en matematisk operation ```javascript @@ -298,19 +298,19 @@ document.title = "My Awesome Website"; document.body.style.backgroundColor = "lightblue"; ``` -**Trin for trin, sådan sker det:** -- **Ændrer** websidens titel, der vises i browserfanen -- **Skifter** baggrundsfarven på hele sidekroppen +**Trin for trin, her sker følgende:** +- **Ændrer** websiden titlen, som vises i browserfanen +- **Ændrer** baggrundsfarven på hele sidelegemet -### Variable: Dit programs hukommelsessystem +### Variabler: Dit programs hukommelsessystem -Okay, **variable** er sandelig ét af mine absolut yndlingskoncepter at undervise i, fordi de er så meget som ting, du allerede bruger hver eneste dag! +Okay, **variabler** er ærligt talt et af mine absolut yndlingskoncepter at lære fra mig, fordi de er så meget som ting, du allerede bruger hver eneste dag! -Tænk et øjeblik på din telefons kontaktliste. Du kan ikke huske alles telefonnumre – i stedet gemmer du "Mor," "Bedste Ven," eller "Pizzestedet der leverer til kl. 2," og lader telefonen huske de faktiske numre. Variable fungerer på samme måde! De er som mærkede beholdere, hvor dit program kan gemme information og hente den senere ved hjælp af et navn, der faktisk giver mening. +Tænk på din telefons kontaktliste et øjeblik. Du husker ikke alles telefonnumre – i stedet gemmer du "Mor," "Bedste ven," eller "Pizzasted der leverer til kl. 2 om natten" og lader din telefon huske de faktiske numre. Variabler fungerer præcis på samme måde! De er som mærkede beholdere, hvor dit program kan gemme information og hente det senere ved hjælp af et navn, der rent faktisk giver mening. -Her er det virkelig seje: variable kan ændre sig, mens dit program kører (deraf navnet "variable" – kan du se, hvad de gjorde dér?). Ligesom du måske opdaterer pizzastedets kontakt, når du finder et endnu bedre sted, kan variable opdateres, mens dit program lærer ny information eller når situationer ændrer sig! +Her er det, der er virkelig sejt: variabler kan ændre sig, mens dit program kører (deraf navnet "variabel" – kan du se hvad de gjorde der?). Ligesom du måske opdaterer den pizzakontakt, når du finder et endnu bedre sted, kan variabler opdateres, efterhånden som dit program lærer ny information eller som situationer ændrer sig! -Lad mig vise dig, hvor utrolig simpelt det kan være: +Lad mig vise dig, hvor smukt simpelt det kan være: ```javascript // Trin 1: Oprettelse af grundlæggende variabler @@ -320,11 +320,11 @@ let temperature = 75; let isRaining = false; ``` -**Sådan forstår du disse koncepter:** -- **Gem** uforanderlige værdier i `const` variable (som sidens navn) -- **Brug** `let` til værdier, der kan ændre sig i løbet af programmet -- **Tildel** forskellige datatyper: tekststrenge, tal og booleske værdier (sand/falsk) -- **Vælg** beskrivende navne, der forklarer, hvad hver variabel indeholder +**Forståelse af disse koncepter:** +- **Gemmer** uforanderlige værdier i `const` variabler (som webstedets navn) +- **Bruger** `let` til værdier, der kan ændre sig gennem dit program +- **Tildeler** forskellige datatyper: strenge (tekst), tal og booleans (sand/falsk) +- **Vælger** beskrivende navne, som forklarer, hvad hver variabel indeholder ```javascript // Trin 2: Arbejde med objekter for at gruppere relaterede data @@ -335,50 +335,50 @@ const weatherData = { }; ``` -**I ovenstående har vi:** -- **Oprettet** et objekt til at gruppere relateret vejrinformation sammen -- **Organiseret** flere datadel under ét variabelnavn -- **Brugt** nøgle-værdi-par til klart at mærke hver datadel +**Ovenfor har vi:** +- **Oprettet** et objekt til at samle relaterede vejrdata sammen +- **Organiseret** flere data under ét variabelnavn +- **Brugt** nøgle-værdi-par for klart at mærke hver del af informationen ```javascript // Trin 3: Brug og opdatering af variabler console.log(`${siteName}: Today is ${currentWeather} and ${temperature}°F`); console.log(`Wind speed: ${weatherData.windSpeed} mph`); -// Opdatering af ændrbare variabler +// Opdatering af ændringsbare variabler currentWeather = "cloudy"; temperature = 68; ``` **Lad os forstå hver del:** -- **Vis** information ved brug af template literals med `${}` syntaks -- **Adgang** til objektets egenskaber med dot-notation (`weatherData.windSpeed`) -- **Opdater** variable deklareret med `let` for at afspejle skiftende forhold -- **Kombinér** flere variable for at skabe meningsfulde beskeder +- **Viser** information ved hjælp af template literals med `${}` syntaks +- **Adgang** til objektets egenskaber via dot notation (`weatherData.windSpeed`) +- **Opdaterer** variabler deklareret med `let` for at afspejle skiftende forhold +- **Kombinerer** flere variabler for at skabe meningsfulde beskeder ```javascript -// Trin 4: Moderne destrukturering for renere kode +// Trin 4: Moderne destructuring for renere kode const { location, humidity } = weatherData; console.log(`${location} humidity: ${humidity}%`); ``` -**Det du skal vide:** -- **Udtræk** specifikke egenskaber fra objekter ved hjælp af destructuring assignment -- **Opret** nye variable automatisk med samme navne som objektets nøgler -- **Forenkle** kode ved at undgå gentagen dot-notation +**Det, du skal vide:** +- **Udtrækker** specifikke egenskaber fra objekter ved hjælp af destructuring assignment +- **Opretter** nye variabler automatisk med samme navne som objektets nøgler +- **Forenkler** kode ved at undgå gentagen dot notation -### Kontrolflow: Lær dit program at tænke +### Kontrolflow: Lærer dit program at tænke -Okay, her bliver programmering virkelig sindssyg! **Kontrolflow** er grundlæggende at lære dit program at træffe smarte beslutninger, præcis som du gør hver dag uden engang at tænke over det. +Okay, nu bliver programmering virkelig tankevækkende! **Kontrolflow** er i bund og grund at lære dit program, hvordan det kan tage smarte beslutninger, præcis som du gør hver eneste dag uden at tænke over det. -Forestil dig dette: i morges gik du sikkert igennem noget a la "Hvis det regner, tager jeg paraply med. Hvis det er koldt, tager jeg jakke på. Hvis jeg er forsinket, springer jeg morgenmad over og tager en kaffe på vejen." Din hjerne følger naturligt denne hvis-så-logik dusinvis af gange hver dag! +Forestil dig dette: i morges gik du sikkert igennem noget i stil med "Hvis det regner, tager jeg en paraply med. Hvis det er koldt, tager jeg en jakke på. Hvis jeg er forsinket, springer jeg morgenmaden over og tager kaffen på vejen." Din hjerne følger automatisk denne hvis-så logik dusinvis af gange hver dag! -Det er det, der får programmer til at føles intelligente og levende i stedet for bare at følge et kedeligt, forudsigeligt script. De kan faktisk se på en situation, vurdere hvad der sker og reagere passende. Det er som at give dit program en hjerne, der kan tilpasse sig og træffe valg! +Det er det, der får programmer til at føles intelligente og levende i stedet for bare at følge en kedelig, forudsigelig instruktion. De kan faktisk kigge på en situation, evaluere hvad der sker, og reagere passende. Det er som at give dit program en hjerne, der kan tilpasse sig og træffe valg! Vil du se, hvor smukt det fungerer? Lad mig vise dig: ```javascript -// Trin 1: Grundlæggende konditionel logik +// Trin 1: Grundlæggende betinget logik const userAge = 17; if (userAge >= 18) { @@ -389,11 +389,11 @@ if (userAge >= 18) { } ``` -**Her er, hvad denne kode gør:** +**Sådan fungerer denne kode:** - **Tjekker** om brugerens alder opfylder stemmeretskravet - **Udfører** forskellige kodeblokke baseret på betingelsens resultat -- **Beregner** og viser, hvor lang tid der er til stemmeret, hvis under 18 -- **Giver** specifik, nyttig feedback for hver situation +- **Beregner** og viser hvor længe der er til stemmeberettigelse, hvis under 18 +- **Giver** specifik, hjælpsom feedback for hver situation ```javascript // Trin 2: Flere betingelser med logiske operatorer @@ -409,11 +409,11 @@ if (userAge >= 18 && hasPermission) { } ``` -**Nedbrydning af, hvad der sker her:** -- **Kombinerer** flere betingelser ved hjælp af `&&` (og) operatoren -- **Opretter** et hierarki af betingelser med `else if` til flere scenarier -- **Håndterer** alle mulige tilfælde med en afsluttende `else` sætning -- **Giver** klar, anvendelig feedback for hver forskellig situation +**Her er en nedbrydning af, hvad der sker:** +- **Kombinerer** flere betingelser med `&&` (og) operatoren +- **Opretter** et hierarki af betingelser ved hjælp af `else if` for flere scenarier +- **Håndterer** alle mulige tilfælde med en sidste `else` erklæring +- **Giver** klar, handlingsorienteret feedback for hver situation ```javascript // Trin 3: Kortfattet betingelse med ternær operator @@ -421,10 +421,10 @@ const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; console.log(`Status: ${votingStatus}`); ``` -**Husk følgende:** -- **Brug** den ternære operator (`? :`) til simple to-vej betingelser -- **Skriv** betingelsen først, efterfulgt af `?`, derefter sandt resultat, så `:`, og til sidst falsk resultat -- **Anvend** dette mønster, når du skal tildele værdier baseret på betingelser +**Det skal du huske:** +- **Bruger** ternary-operatoren (`? :`) til simple to-valgs betingelser +- **Skriver** først betingelsen, efterfulgt af `?`, derefter sandt resultat, så `:`, og falsk resultat +- **Anvender** dette mønster, når du skal tildele værdier baseret på betingelser ```javascript // Trin 4: Håndtering af flere specifikke tilfælde @@ -448,55 +448,55 @@ switch (dayOfWeek) { ``` **Denne kode opnår følgende:** -- **Matcher** variabelværdi mod flere specifikke tilfælde -- **Grupperer** lignende tilfælde (hverdag vs. weekend) -- **Udfører** den korrekte kodeblok, når der findes et match -- **Inkluderer** en `default` sag for at håndtere uventede værdier -- **Bruger** `break` udsagn for at forhindre, at koden fortsætter til næste sag +- **Matcher** variabelværdien mod flere specifikke tilfælde +- **Grupperer** lignende tilfælde sammen (hverdag vs. weekend) +- **Udfører** den passende kodeblok, når et match findes +- **Inkluderer** en `default` case for at håndtere uventede værdier +- **Bruger** `break` statements for at forhindre kode i at fortsætte til næste case -> 💡 **Virkelighedsanalog**: Tænk på kontrolflow som verdens mest tålmodige GPS, der giver dig vejvisning. Den kan fx sige "Hvis der er trafik på Main Street, tag motorvejen i stedet. Hvis vejarbejde blokerer motorvejen, prøv den naturskønne rute." Programmer bruger præcis samme type betingede logik til intelligent at reagere på forskellige situationer og altid give brugerne den bedst mulige oplevelse. +> 💡 **Virkelighedsanalog**: Tænk på kontrolflow som verdens mest tålmodige GPS, der giver dig anvisninger. Den kan sige "Hvis der er trafik på Hovedgaden, så tag motorvejen i stedet. Hvis vejarbejde blokerer motorvejen, prøv den naturskønne rute." Programmer bruger præcis samme type betingede logik for at reagere intelligent på forskellige situationer og altid give brugerne den bedst mulige oplevelse. -### 🎯 **Begrebskontrol: Mestring af byggestenene** +### 🎯 **Konceptkontrol: Byggesten mesterskab** -**Lad os se, hvordan det går med det grundlæggende:** -- Kan du forklare forskellen mellem en variabel og et udsagn med dine egne ord? -- Tænk på en virkelig situation, hvor du ville bruge et hvis-så-valg (som i vores stemmeeksempel) +**Lad os se, hvordan det går med grundlæggende forståelse:** +- Kan du forklare forskellen på en variabel og et statement med dine egne ord? +- Tænk på en virkelighedssituation, hvor du vil bruge en hvis-så beslutning (som vores stemmeretseksempel) - Hvad er én ting ved programmeringslogik, der overraskede dig? -**Hurtig selvtillidsboost:** +**Hurtig selvtillids-booster:** ```mermaid flowchart LR - A["📝 Udsagn
(Instruktioner)"] --> B["📦 Variabler
(Lagring)"] --> C["🔀 Kontrolflow
(Beslutninger)"] --> D["🎉 Fungerende Program!"] + A["📝 Udsagn
(Instruktioner)"] --> B["📦 Variable
(Lagring)"] --> C["🔀 Kontrolflow
(Beslutninger)"] --> D["🎉 Fungerende program!"] style A fill:#ffeb3b style B fill:#4caf50 style C fill:#2196f3 style D fill:#ff4081 ``` -✅ **Hvad kommer næst**: Vi skal have det absolut sjovt med at dykke dybere ned i disse koncepter, mens vi fortsætter denne utrolige rejse sammen! Lige nu skal du bare fokusere på at mærke begejstringen over alle de fantastiske muligheder foran dig. De specifikke færdigheder og teknikker vil komme helt naturligt, mens vi øver sammen – jeg lover, det bliver meget sjovere, end du måske forventer! +✅ **Hvad der kommer næste gang**: Vi kommer til at have det helt vildt sjovt med at dykke dybere ned i disse koncepter, mens vi fortsætter denne utrolige rejse sammen! Lige nu skal du bare fokusere på at føle den begejstring over alle de fantastiske muligheder, der venter forude. De specifikke færdigheder og teknikker kommer helt naturligt, når vi øver os sammen – jeg lover, det bliver meget sjovere, end du måske forventer! -## Værktøjerne i faget +## Værktøjer i faget -Okay, her bliver jeg ærligt talt så begejstret, at jeg næsten ikke kan holde det inde! 🚀 Vi skal til at tale om de utrolige værktøjer, som kommer til at få dig til at føle, at du lige har fået nøglerne til et digitalt rumskib. +Okay, nu bliver jeg ærligt talt så begejstret, at jeg næsten ikke kan styre mig! 🚀 Vi skal til at tale om de utrolige værktøjer, der får dig til at føle, at du lige har fået nøglerne til et digitalt rumskib. -Du ved, hvordan en kok har de perfekt afbalancerede knive, der føles som en forlængelse af deres hænder? Eller hvordan en musiker har den ene guitar, der synes at synge, så snart de rører ved den? Nå, udviklere har vores egen version af disse magiske værktøjer, og her kommer det, der helt sikkert vil blæse dit sind – de fleste af dem er fuldstændigt gratis! +Du ved, hvordan en kok har de perfekt afbalancerede knive, som føles som forlængelser af hænderne? Eller hvordan en musiker har den ene guitar, der nærmest synger, fra det øjeblik, den røres? Nå, udviklere har vores egen version af disse magiske værktøjer, og her er, hvad der virkelig vil blæse dig omkuld – de fleste af dem er helt gratis! -Jeg sidder næsten og hopper på stolen over at skulle dele disse med dig, fordi de fuldstændigt har revolutioneret, hvordan vi bygger software. Vi taler om AI-drevne kodeassistenter, som kan hjælpe med at skrive din kode (jeg laver ikke sjov!), cloud-miljøer, hvor du kan bygge hele applikationer fra bogstaveligt talt hvor som helst med Wi-Fi, og fejlfindingværktøjer så sofistikerede, at de er som at have røntgensyn for dine programmer. +Jeg sidder nærmest og hopper i stolen, fordi jeg glæder mig til at dele dem med dig, da de fuldstændigt har revolutioneret, hvordan vi bygger software. Vi taler om AI-drevne kodningsassistenter, der kan hjælpe med at skrive din kode (jeg mener det virkelig!), cloud-miljøer, hvor du kan bygge hele applikationer fra bogstaveligt talt hvor som helst med Wi-Fi, og fejlfindingsværktøjer så sofistikerede, at det er som at have røntgensyn til dine programmer. -Og her kommer det, der stadig giver mig gåsehud: det er ikke "begynder-værktøjer," du kommer til at vokse fra. Det er nøjagtigt de samme professionelle værktøjer, som udviklere hos Google, Netflix og det indie app-studie, du elsker, bruger lige nu. Du kommer til at føle dig som en vaskeægte pro med dem! +Og her kommer delen, der stadig giver mig gåsehud: det er ikke "begynder-værktøjer," som du hurtigt kommer til at vokse fra. Det er præcis de samme professionelle værktøjer, som udviklere hos Google, Netflix og det indie app-studie, du elsker, bruger lige nu. Du kommer til at føle dig som en helt professionel, når du bruger dem! ```mermaid graph TD - A["💡 Din idé"] --> B["⌨️ Kodeeditor
(VS Code)"] - B --> C["🌐 Browser DevTools
(Test & Fejlfinding)"] + A["💡 Din Idé"] --> B["⌨️ Kodeeditor
(VS Code)"] + B --> C["🌐 Browser DevTools
(Test & Debugging)"] C --> D["⚡ Kommandolinje
(Automatisering & Værktøjer)"] D --> E["📚 Dokumentation
(Læring & Reference)"] - E --> F["🚀 Fantastisk webapp!"] + E --> F["🚀 Fantastisk Webapp!"] - B -.-> G["🤖 AI-assistent
(GitHub Copilot)"] - C -.-> H["📱 Enhedstest
(Responsivt design)"] - D -.-> I["📦 Pakkehåndtering
(npm, yarn)"] - E -.-> J["👥 Fællesskab
(Stack Overflow)"] + B -.-> G["🤖 AI Assistent
(GitHub Copilot)"] + C -.-> H["📱 Enhedstest
(Responsivt Design)"] + D -.-> I["📦 Pakkehåndteringer
(npm, yarn)"] + E -.-> J["👥 Community
(Stack Overflow)"] style A fill:#fff59d style F fill:#c8e6c9 @@ -505,63 +505,63 @@ graph TD style I fill:#ffccbc style J fill:#e8eaf6 ``` -### Kodeeditorer og IDE’er: Dine nye digitale bedste venner +### Kodeeditorer og IDE'er: Dine nye digitale bedste venner -Lad os tale om kodeeditorer – de er seriøst lige ved at blive dine nye yndlingssteder at hænge ud! Tænk på dem som din personlige kodningshelligdom, hvor du vil tilbringe det meste af din tid med at skabe og perfektionere dine digitale værker. +Lad os tale om kodeeditorer – de er alvorligt lige ved at blive dine nye yndlingssteder at hænge ud! Tænk på dem som dit personlige kodehelligdom, hvor du vil tilbringe det meste af din tid med at skabe og perfektionere dine digitale kreationer. -Men her er det helt magiske ved moderne editorer: de er ikke bare fine teksteditorer. Det er som at have den mest geniale, støttende kodningsmentor siddende lige ved siden af dig 24/7. De fanger dine tastefejl, før du overhovedet opdager dem, foreslår forbedringer, der får dig til at se genial ud, hjælper dig med at forstå, hvad hver eneste kodebid gør, og nogle af dem kan endda forudsige, hvad du er ved at skrive, og tilbyde at færdiggøre dine tanker! +Men her er det, der er helt magisk ved moderne editorer: de er ikke bare fine teksteditorer. De er som at have den mest geniale, støttende kode-mentor siddende lige ved siden af dig døgnet rundt. De fanger dine tastefejl, før du overhovedet opdager dem, foreslår forbedringer, der får dig til at se ud som et geni, hjælper dig med at forstå, hvad hvert kodeelement gør, og nogle af dem kan endda forudsige, hvad du er ved at skrive og tilbyde at færdiggøre dine tanker! -Jeg kan huske, da jeg først opdagede auto-fuldførelse – jeg følte bogstaveligt talt, at jeg levede i fremtiden. Du begynder at skrive noget, og din editor siger, "Hey, tænkte du på denne funktion, der gør præcis det, du har brug for?" Det er som at have en tankelæser som din kodekammerat! +Jeg husker, da jeg først opdagede autoudfyldning – jeg følte virkelig, at jeg levede i fremtiden. Du begynder at skrive noget, og din editor siger, "Hej, tænkte du på denne funktion, der gør præcis, hvad du har brug for?" Det er som at have en tankelæser som din kodebuddy! -**Hvad gør disse editorer så utrolige?** +**Hvad gør disse editorer så fantastiske?** -Moderne kodeeditorer tilbyder en imponerende række funktioner, der er designet til at øge din produktivitet: +Moderne kodeeditorer byder på et imponerende udvalg af funktioner designet til at øge din produktivitet: -| Funktion | Hvad den gør | Hvorfor den hjælper | +| Funktion | Hvad den gør | Hvorfor det hjælper | |---------|--------------|--------------| -| **Syntax Highlighting** | Farver forskellige dele af din kode | Gør koden lettere at læse og spotte fejl | -| **Auto-completion** | Foreslår kode mens du skriver | Hurtigere kodning og færre tastefejl | -| **Fejlfindingsværktøjer** | Hjælper dig med at finde og rette fejl | Spar tid på fejlretning | -| **Udvidelser** | Tilføjer specialiserede funktioner | Tilpas din editor til enhver teknologi | -| **AI-assistenter** | Foreslår kode og forklaringer | Fremskynder læring og produktivitet | +| **Syntax Highlighting** | Farver forskellige dele af din kode | Gør kode nemmere at læse og opdage fejl | +| **Auto-completion** | Foreslår kode, mens du skriver | Fremskynder kodningen og reducerer tastefejl | +| **Debugging Tools** | Hjælper med at finde og rette fejl | Sparrer timer på fejlsøgning | +| **Extensions** | Tilføjer specialiserede funktioner | Tilpas din editor til enhver teknologi | +| **AI Assistants** | Foreslår kode og forklaringer | Fremskynder læring og produktivitet | -> 🎥 **Videoressource**: Vil du se disse værktøjer i praksis? Tjek denne [Tools of the Trade video](https://youtube.com/watch?v=69WJeXGBdxg) for et omfattende overblik. +> 🎥 **Videoressource**: Vil du se disse værktøjer i aktion? Tjek denne [Tools of the Trade video](https://youtube.com/watch?v=69WJeXGBdxg) for et omfattende overblik. #### Anbefalede editorer til webudvikling **[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (Gratis) - Mest populær blandt webudviklere -- Fremragende økosystem af udvidelser +- Fremragende økosystem for udvidelser - Indbygget terminal og Git-integration - **Must-have udvidelser**: - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI-drevne kodeforslag - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Realtids samarbejde + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Realtids-samarbejde - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - Automatisk kodeformatering - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Fanger stavefejl i din kode + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Fang stavefejl i din kode **[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (Betalt, gratis for studerende) - Avancerede fejlfindings- og testværktøjer -- Intelligent kodefuldførelse +- Intelligent kodeautofuldførelse - Indbygget versionskontrol -**Cloud-baserede IDE’er** (Forskellige priser) -- [GitHub Codespaces](https://github.com/features/codespaces) – Fuldt VS Code i din browser -- [Replit](https://replit.com/) – Fantastisk til læring og deling af kode -- [StackBlitz](https://stackblitz.com/) – Øjeblikkelig, full-stack webudvikling +**Cloud-baserede IDE'er** (Forskellige priser) +- [GitHub Codespaces](https://github.com/features/codespaces) - Fuld VS Code i din browser +- [Replit](https://replit.com/) - Fantastisk til læring og deling af kode +- [StackBlitz](https://stackblitz.com/) - Øjeblikkelig, fuld-stack webudvikling -> 💡 **Tips til opstart**: Start med Visual Studio Code – det er gratis, meget udbredt i branchen, og har et enormt fællesskab, der laver hjælpsomme tutorials og udvidelser. +> 💡 **Kom godt i gang-tip**: Start med Visual Studio Code – det er gratis, bredt brugt i industrien og har et enormt community, der skaber nyttige tutorials og udvidelser. ### Webbrowsere: Dit hemmelige udviklingslaboratorium -Okay, gør dig klar til at få dit sind fuldstændig blæst! Du ved, hvordan du har brugt browsere til at scrolle gennem sociale medier og se videoer? Nå, det viser sig, at de hele tiden har gemt på et utroligt hemmeligt udviklingslaboratorium, der bare ventede på, at du skulle opdage det! +Okay, gør dig klar til at få dit sind fuldstændigt blæst! Du ved, hvordan du har brugt browsere til at scrolle på sociale medier og se videoer? Nå, det viser sig, at de har gemt dette utrolige hemmelige udviklingslaboratorium hele tiden og bare ventet på, at du skulle opdage det! -Hver eneste gang du højreklikker på en webside og vælger "Inspicer element," åbner du en skjult verden af udviklerværktøjer, som ærligt talt er mere kraftfulde end noget dyrt software, jeg tidligere har betalt hundredevis af kroner for. Det er som at opdage, at dit almindelige gamle køkken hele tiden har skjult et professionelt kokkelaboratorium bag en hemmelig panel! -Første gang nogen viste mig browserens DevTools, brugte jeg omkring tre timer bare på at klikke rundt og sige "VENT, KAN DEN OGSÅ DET?!" Du kan bogstaveligt talt redigere enhver hjemmeside i realtid, se præcis hvor hurtigt alt loader, teste hvordan dit site ser ud på forskellige enheder og endda debugge JavaScript som en helt pro. Det er fuldstændig vanvittigt! +Hver eneste gang du højreklikker på en webside og vælger "Inspicér element," åbner du en skjult verden af udviklerværktøjer, som ærligt talt er mere kraftfulde end noget dyrt software, jeg tidligere har betalt hundredevis af kroner for. Det er som at opdage, at dit helt almindelige køkken har gemt et professionelt kokkelaboratorium bag en hemmelig panel! +Første gang nogen viste mig browserens DevTools, brugte jeg næsten tre timer bare på at klikke rundt og sige "VENT, KAN DEN OGSÅ DET?!" Du kan bogstaveligt talt redigere enhver hjemmeside i realtid, se præcis hvor hurtigt alt indlæses, teste hvordan dit site ser ud på forskellige enheder og endda fejlfinde JavaScript som en ægte pro. Det er helt sindssygt! **Her er hvorfor browsere er dit hemmelige våben:** -Når du skaber en hjemmeside eller webapplikation, skal du kunne se, hvordan den ser ud og opfører sig i virkeligheden. Browsere viser ikke kun dit arbejde, men giver også detaljeret feedback om ydeevne, tilgængelighed og potentielle problemer. +Når du laver en hjemmeside eller webapplikation, skal du kunne se, hvordan den ser ud og opfører sig i den virkelige verden. Browsere viser ikke kun dit arbejde, de giver også detaljeret feedback om ydeevne, tilgængelighed og potentielle problemer. #### Browser Developer Tools (DevTools) @@ -569,10 +569,10 @@ Moderne browsere indeholder omfattende udviklingsværktøjer: | Tool Category | What It Does | Example Use Case | |---------------|--------------|------------------| -| **Element Inspector** | Se og rediger HTML/CSS i realtid | Juster styling for at se øjeblikkelige resultater | -| **Console** | Se fejlmeddelelser og test JavaScript | Debug problemer og eksperimenter med kode | -| **Network Monitor** | Overvåg hvordan ressourcer loader | Optimer ydeevne og indlæsningstider | -| **Accessibility Checker** | Test for inklusivt design | Sikr at dit site fungerer for alle brugere | +| **Element Inspector** | Se og rediger HTML/CSS i realtid | Juster stil og se resultater med det samme | +| **Console** | Se fejlmeddelelser og test JavaScript | Fejlret problemer og eksperimenter med kode | +| **Network Monitor** | Følg hvordan ressourcer indlæses | Optimer ydeevne og indlæsningstider | +| **Accessibility Checker** | Test for inklusivt design | Sikr at dit site virker for alle brugere | | **Device Simulator** | Forhåndsvis på forskellige skærmstørrelser | Test responsivt design uden flere enheder | #### Anbefalede browsere til udvikling @@ -581,20 +581,20 @@ Moderne browsere indeholder omfattende udviklingsværktøjer: - **[Firefox](https://developer.mozilla.org/docs/Tools)** - Fremragende CSS Grid og tilgængelighedsværktøjer - **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Bygget på Chromium med Microsofts udviklerressourcer -> ⚠️ **Vigtig test-tip**: Test altid dine hjemmesider i flere browsere! Det, der fungerer perfekt i Chrome, kan se anderledes ud i Safari eller Firefox. Professionelle udviklere tester på tværs af alle større browsere for at sikre en ensartet brugeroplevelse. +> ⚠️ **Vigtig testtip**: Test altid dine hjemmesider i flere browsere! Det der virker perfekt i Chrome, kan se anderledes ud i Safari eller Firefox. Professionelle udviklere tester på tværs af alle større browsere for at sikre ensartede brugeroplevelser. ### Kommandolinjeværktøjer: Din adgang til udvikler-superkræfter -Okay, lad os være helt ærlige om kommandolinjen, for jeg vil have, at du hører det fra en, der virkelig forstår det. Da jeg først så den – bare den her skræmmende sorte skærm med blinkende tekst – tænkte jeg bogstaveligt talt: "Nej, absolut ikke! Det ligner noget fra en hackerfilm i 1980'erne, og jeg er bestemt ikke smart nok til det!" 😅 +Okay, lad os være helt ærlige omkring kommandolinjen, for jeg vil have, at du hører dette fra en, der virkelig forstår det. Da jeg først så den – bare den skræmmende sorte skærm med blinkende tekst – tænkte jeg bogstaveligt talt, "Nej, slet ikke! Det ligner noget fra en hackerfilm i 1980’erne, og jeg er bestemt ikke klog nok til det her!" 😅 -Men her er, hvad jeg ville ønske, nogen havde fortalt mig dengang, og hvad jeg fortæller dig lige nu: kommandolinjen er ikke skræmmende – det er faktisk som at have en direkte samtale med din computer. Tænk på det som forskellen mellem at bestille mad gennem en fancy app med billeder og menuer (som er nemt og lækkert) versus at gå ind på din yndlingslokale restaurant, hvor kokken ved præcis, hvad du kan lide og kan trylle noget perfekt frem bare ved at du siger "overrask mig med noget fantastisk." +Men her er hvad jeg ville ønske nogen havde fortalt mig dengang, og som jeg fortæller dig nu: kommandolinjen er ikke skræmmende – det er faktisk som at have en direkte samtale med din computer. Tænk på det som forskellen mellem at bestille mad via en fancy app med billeder og menuer (som er nemt og lækkert) versus at gå ind på din lokale yndlingsrestaurant, hvor kokken præcis ved, hvad du kan lide, og kan trylle noget perfekt frem bare fordi du siger "overrask mig med noget fantastisk." -Kommandolinjen er stedet, hvor udviklere føler sig som ægte troldmænd. Du taster et par tilsyneladende magiske ord (okay, de er bare kommandoer, men de føles magiske!), trykker enter, og BAM – du har oprettet hele projektstrukturer, installeret kraftfulde værktøjer fra hele verden eller udrullet din app til internettet, så millioner kan se den. Når du først får en smag af den kraft, er det ærligt talt ret vanedannende! +Kommandolinjen er stedet, udviklere går til for at føle sig som rene troldmænd. Du skriver et par tilsyneladende magiske ord (okay, det er bare kommandoer, men de føles magiske!), trykker enter, og BOOM – du har oprettet komplette projektstrukturer, installeret kraftfulde værktøjer fra hele verden eller deployet din app til internettet, så millioner kan se den. Når du først får smag for den magt, er det ærligt talt ret vanedannende! **Derfor bliver kommandolinjen dit favoritværktøj:** -Mens grafiske brugerflader er fantastiske til mange opgaver, excellerer kommandolinjen i automatisering, præcision og hastighed. Mange udviklingsværktøjer fungerer primært via kommandolinjegrænseflader, og at lære at bruge dem effektivt kan forbedre din produktivitet markant. +Mens grafiske brugergrænseflader er gode til mange opgaver, er kommandolinjen suveræn til automatisering, præcision og hastighed. Mange udviklingsværktøjer kører primært via kommandolinjen, og at lære at bruge dem effektivt kan forbedre din produktivitet markant. ```bash # Trin 1: Opret og naviger til projektmappen @@ -602,9 +602,9 @@ mkdir my-awesome-website cd my-awesome-website ``` -**Sådan fungerer denne kode:** -- **Opret** en ny mappe kaldet "my-awesome-website" til dit projekt -- **Naviger** ind i den nyskabte mappe for at begynde arbejdet +**Dette kodeeksempel gør:** +- **Opretter** en ny mappe kaldet "my-awesome-website" til dit projekt +- **Navigerer** ind i den nyskabte mappe for at begynde arbejdet ```bash # Trin 2: Initialiser projekt med package.json @@ -615,11 +615,11 @@ npm install --save-dev vite prettier eslint npm install --save-dev @eslint/js ``` -**Trin for trin sker der følgende:** -- **Initialiser** et nyt Node.js-projekt med standardindstillinger ved brug af `npm init -y` -- **Installer** Vite som et moderne build-værktøj til hurtig udvikling og produktion -- **Tilføj** Prettier til automatisk kodeformatering og ESLint til kodekvalitetskontrol -- **Brug** flaget `--save-dev` for at markere disse som udviklingsafhængigheder +**Trin for trin, her sker der:** +- **Initialiserer** et nyt Node.js projekt med standardindstillinger via `npm init -y` +- **Installerer** Vite som et moderne build-værktøj til hurtig udvikling og produktion +- **Tilføjer** Prettier til automatisk kodeformatering og ESLint til kodekvalitetstjek +- **Bruger** `--save-dev` flaget for at markere disse som udviklingsafhængigheder ```bash # Trin 3: Opret projektstruktur og filer @@ -631,26 +631,26 @@ npx vite ``` **I ovenstående har vi:** -- **Organiseret** vores projekt ved at oprette separate mapper til kildekode og assets -- **Genereret** en grundlæggende HTML-fil med korrekt dokumentstruktur -- **Startet** Vite udviklingsserveren for live reload og hot module replacement +- **Organiseret** vores projekt med separate mapper til kildekode og assets +- **Genereret** en basal HTML-fil med korrekt dokumentstruktur +- **Startet** Vite udviklingsserveren til live reload og hot module replacement -#### Vigtige kommandolinjeværktøjer til webudvikling +#### Væsentlige kommandolinjeværktøjer til webudvikling | Tool | Purpose | Why You Need It | |------|---------|-----------------| -| **[Git](https://git-scm.com/)** | Versionskontrol | Spor ændringer, samarbejd med andre, backup af dit arbejde | -| **[Node.js & npm](https://nodejs.org/)** | JavaScript runtime & pakkehåndtering | Kør JavaScript uden for browsere, installer moderne udviklingsværktøjer | -| **[Vite](https://vitejs.dev/)** | Build-værktøj & dev-server | Lynhurtig udvikling med hot module replacement | -| **[ESLint](https://eslint.org/)** | Kodekvalitet | Find og ret automatisk problemer i dit JavaScript | -| **[Prettier](https://prettier.io/)** | Kodeformatering | Hold din kode konsekvent formateret og letlæselig | +| **[Git](https://git-scm.com/)** | Versionsstyring | Spor ændringer, samarbejd med andre, sikkerhedskopiér dit arbejde | +| **[Node.js & npm](https://nodejs.org/)** | JavaScript runtime & pakkestyring | Kør JavaScript udenfor browseren, installer moderne udviklingsværktøjer | +| **[Vite](https://vitejs.dev/)** | Bygge- og udviklingsserver | Lynhurtig udvikling med hot module replacement | +| **[ESLint](https://eslint.org/)** | Kodekvalitet | Find og rette problemer i din JavaScript automatisk | +| **[Prettier](https://prettier.io/)** | Kodeformatering | Hold din kode konsekvent formateret og læsbar | -#### Platformsspecifikke muligheder +#### Platformspecifikke muligheder **Windows:** -- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Moderne, funktionsrig terminal -- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Kraftigt scriptingmiljø -- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Traditonel Windows kommandolinje +- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Moderne og funktionsrig terminal +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Kraftfuldt scripting-miljø +- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Traditionel Windows kommandolinje **macOS:** - **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - Indbygget terminalapplikation @@ -660,75 +660,75 @@ npx vite - **[Bash](https://www.gnu.org/software/bash/)** 💻 - Standard Linux shell - **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - Avanceret terminalemulator -> 💻 = Forudinstalleret i operativsystemet +> 💻 = Forudinstalleret på operativsystemet -> 🎯 **Læringsvejledning**: Start med basis-kommandoer som `cd` (skift mappe), `ls` eller `dir` (list filer) og `mkdir` (opret mappe). Øv dig med moderne workflow-kommandoer som `npm install`, `git status` og `code .` (åbner tilhørende mappe i VS Code). Når du bliver mere komfortabel, vil du naturligt lære mere avancerede kommandoer og automatiseringsteknikker. +> 🎯 **Læringsvejledning**: Begynd med grundlæggende kommandoer som `cd` (skift mappe), `ls` eller `dir` (list filer), og `mkdir` (opret mappe). Øv dig med moderne workflow-kommandoer som `npm install`, `git status` og `code .` (åbner nuværende mappe i VS Code). Når du bliver mere tryg, vil du naturligt lære mere avancerede kommandoer og automatiseringsteknikker. ### Dokumentation: Din altid-tilgængelige læringsmentor -Okay, lad mig dele en lille hemmelighed, som vil få dig til at føle dig meget bedre tilpas som nybegynder: selv de mest erfarne udviklere bruger en stor del af deres tid på at læse dokumentation. Og det er ikke fordi, de ikke ved, hvad de laver – det er faktisk et tegn på visdom! +Okay, jeg vil dele en lille hemmelighed, der vil få dig til at føle dig meget bedre som begynder: selv de mest erfarne udviklere bruger en stor del af deres tid på at læse dokumentation. Og det er ikke fordi de ikke ved, hvad de laver – det er faktisk et tegn på visdom! -Tænk på dokumentation som at have adgang til verdens mest tålmodige, vidende lærere, der er tilgængelige døgnet rundt. Sidder du fast i et problem kl. 2 om natten? Dokumentationen er der med en varm virtuel krammer og præcis det svar, du har brug for. Vil du lære om en fed ny funktion, som alle taler om? Dokumentationen støtter dig med trin-for-trin eksempler. Forsøger du at forstå, hvorfor noget fungerer, som det gør? Gættede du det – dokumentationen er klar til at forklare det på en måde, der endelig klikker! +Tænk på dokumentation som at have adgang til verdens mest tålmodige, vidende lærere, som er tilgængelige 24/7. Sidder du fast med et problem klokken 2 om natten? Dokumentationen er der med et virtuelt varmt kram og præcis det svar, du har brug for. Vil du lære om en smart ny funktion, som alle taler om? Dokumentationen hjælper dig med trin-for-trin eksempler. Prøver du at forstå, hvorfor noget virker, som det gør? Gæt engang – dokumentationen forklarer det på en måde, der endelig får det til at klikke! -Her er noget, der helt ændrede mit perspektiv: webudviklingsverdenen bevæger sig utroligt hurtigt, og ingen (jeg mener absolut ingen!) kan huske alt. Jeg har set seniordom udviklere med 15+ års erfaring slå grundlæggende syntaks op, og ved du hvad? Det er ikke pinligt – det er smart! Det handler ikke om at have perfekt hukommelse; det handler om at vide, hvor man hurtigt kan finde pålidelige svar og forstå, hvordan man anvender dem. +Her er noget, der ændrede mit perspektiv totalt: webudviklingsverdenen bevæger sig utrolig hurtigt, og ingen (jeg mener virkelig ingen!) kan huske det hele udenad. Jeg har set erfarne udviklere med 15+ års erfaring slå helt basal syntaks op, og ved du hvad? Det er ikke pinligt – det er smart! Det handler ikke om perfekt hukommelse; det handler om at vide, hvor man hurtigt finder pålidelige svar og kan anvende dem. -**Her sker den virkelige magi:** +**Her sker den sande magi:** -Professionelle udviklere bruger en betydelig del af deres tid på at læse dokumentation – ikke fordi de er usikre, men fordi webudviklingslandskabet udvikler sig så hurtigt, at det kræver konstant læring at følge med. God dokumentation hjælper dig med ikke bare *hvordan* man bruger noget, men også *hvorfor* og *hvornår* man bruger det. +Professionelle udviklere bruger en stor del af deres tid på at læse dokumentation – ikke fordi de ikke ved, hvad de laver, men fordi webudviklingslandskabet udvikler sig så hurtigt, at det kræver kontinuerlig læring at følge med. God dokumentation hjælper dig med ikke bare at forstå *hvordan* man bruger noget, men også *hvorfor* og *hvornår* man skal bruge det. -#### Vigtige dokumentationsressourcer +#### Væsentlige dokumentationsressourcer **[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** -- Guldstandarden for dokumentation af webteknologier -- Omfattende guider til HTML, CSS og JavaScript +- Guldstandarden for webteknologi-dokumentation +- Omfattende guides til HTML, CSS og JavaScript - Indeholder browserkompatibilitetsinformation -- Har praktiske eksempler og interaktive demos +- Har praktiske eksempler og interaktive demoer **[Web.dev](https://web.dev)** (af Google) - Moderne bedste praksis for webudvikling -- Guides til ydeevneoptimering -- Tilgængelighed og inklusivt design principper -- Case-studier fra virkelige projekter +- Guides til performanceoptimering +- Principper for tilgængelighed og inklusivt design +- Cases fra virkelige projekter **[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** -- Udviklerressourcer til Edge browseren -- Progressive Web App guides -- Indsigter om tværplatform udvikling +- Udviklerressourcer til Edge-browseren +- Progressive Web App-guides +- Indsigter i cross-platform udvikling **[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** -- Strukturerede læringscurricula +- Strukturerede læringsforløb - Videokurser fra brancheeksperter -- Praktiske kodningsøvelser +- Hands-on kodeøvelser -> 📚 **Studieteknik**: Forsøg ikke at huske dokumentationen udenad – lær i stedet at navigere effektivt i den. Bogmærk ofte brugte referencer og øv dig i at bruge søgefunktioner til hurtigt at finde specifik information. +> 📚 **Studietips**: Forsøg ikke at huske dokumentationen udenad – lær i stedet at navigere i den effektivt. Bogmærk ofte brugte referencer og øv dig i at bruge søgefunktionerne til hurtigt at finde specifik information. -### 🔧 **Værktøjsmestring: Hvad taler til dig?** +### 🔧 **Værktøjsmestring: Hvad taler mest til dig?** -**Tag et øjeblik og overvej:** -- Hvilket værktøj er du mest spændt på at prøve først? (Der er ikke noget forkert svar!) -- Føles kommandolinjen stadig skræmmende, eller er du nysgerrig på den? -- Kan du forestille dig at bruge browserens DevTools til at kigge bag kulisserne på dine yndlingshjemmesider? +**Tag et øjeblik til at overveje:** +- Hvilket værktøj glæder du dig mest til at prøve først? (Der findes ikke et forkert svar!) +- Føles kommandolinjen stadig intimiderende, eller er du nysgerrig på den? +- Kan du forestille dig at bruge browser DevTools til at kigge bag kulisserne på dine yndlingshjemmesider? ```mermaid pie title "Udviklertid brugt med værktøjer" "Kodeeditor" : 40 - "Browser Test" : 25 - "Kommandolinje" : 15 + "Browser Testning" : 25 + "Kommando Linje" : 15 "Læsning af dokumentation" : 15 "Fejlfinding" : 5 ``` -> **Sjov indsigt**: De fleste udviklere bruger omkring 40% af deres tid i deres kodeeditor, men læg mærke til hvor meget tid, der går til test, læring og problemløsning. Programmering handler ikke kun om at skrive kode – det handler om at skabe oplevelser! +> **Sjov indsigt**: De fleste udviklere bruger omkring 40 % af deres tid i deres kodeeditor, men det er interessant at bemærke, hvor meget tid der går til test, læring og problemløsning. Programmering handler ikke bare om at skrive kode – det handler om at skabe oplevelser! -✅ **Noget at tænke over**: Her er en interessant tanke – hvordan tror du, værktøjerne til at bygge hjemmesider (udvikling) adskiller sig fra værktøjerne til at designe, hvordan de ser ud (design)? Det er som forskellen mellem en arkitekt, der designer et smukt hus, og entreprenøren, der rent faktisk bygger det. Begge er afgørende, men de har brug for forskellige værktøjskasser! Denne tankegang vil virkelig hjælpe dig med at se det større billede af, hvordan hjemmesider kommer til live. +✅ **Noget at tænke over**: Overvej hvordan værktøjerne til at bygge hjemmesider (udvikling) adskiller sig fra værktøjer til at designe, hvordan de ser ud (design). Det er som forskellen på en arkitekt, der designer et smukt hus, og entreprenøren, der rent faktisk bygger det. Begge dele er afgørende, men kræver forskellige værktøjskasser! Den slags tanker vil virkelig hjælpe dig med at se det større billede af, hvordan hjemmesider bliver til. -## GitHub Copilot Agent Challenge 🚀 +## GitHub Copilot Agent Udfordring 🚀 -Brug Agent-tilstand til at løse følgende udfordring: +Brug Agent-tilstanden til at løse følgende udfordring: -**Beskrivelse:** Udforsk funktionerne i en moderne kodeeditor eller IDE og demonstrer, hvordan den kan forbedre din workflow som webudvikler. +**Beskrivelse:** Udforsk funktionerne i en moderne kodeeditor eller IDE og demonstrer, hvordan den kan forbedre din arbejdsgang som webudvikler. -**Prompt:** Vælg en kodeeditor eller IDE (som Visual Studio Code, WebStorm eller en cloud-baseret IDE). List tre funktioner eller udvidelser, der hjælper dig med at skrive, debugge eller vedligeholde kode mere effektivt. For hver, giv en kort forklaring på, hvordan det gavner din workflow. +**Prompt:** Vælg en kodeeditor eller IDE (som Visual Studio Code, WebStorm eller en cloud-baseret IDE). Angiv tre funktioner eller udvidelser, der hjælper dig med at skrive, fejlfinde eller vedligeholde kode mere effektivt. For hver, giv en kort forklaring på, hvordan det gavner din arbejdsgang. --- @@ -736,50 +736,50 @@ Brug Agent-tilstand til at løse følgende udfordring: **Okay, detektiv, klar til din første sag?** -Nu hvor du har fået dette fantastiske fundament, har jeg et eventyr, der vil hjælpe dig med at se, hvor utrolig forskelligartet og fascinerende programmeringsverdenen virkelig er. Og hør her – det handler ikke om at skrive kode endnu, så ingen pres! Tænk på dig selv som en programmingssprog-detektiv på din allerførste spændende sag! +Nu hvor du har fået dette fantastiske fundament, har jeg et eventyr, som vil hjælpe dig med at se, hvor utroligt mangfoldig og fascinerende programmeringsverdenen er. Og hør her – det handler ikke om at skrive kode endnu, så tag det helt roligt! Tænk på dig selv som en programmeringssprogsdetektiv på din allerførste spændende sag! **Din mission, hvis du vælger at acceptere den:** -1. **Bliv sprogeksplorer**: Vælg tre programmeringssprog fra helt forskellige universer – måske et der bygger hjemmesider, et der skaber mobilapps og et, der bearbejder data for forskere. Find eksempler på den samme simple opgave skrevet i hvert sprog. Jeg lover, du bliver fuldstændig forbavset over, hvor forskellige de kan se ud, mens de laver præcis det samme! +1. **Bliv en sprogeventyrer**: Vælg tre programmeringssprog fra helt forskellige verdener – måske ét til websites, ét til mobilapps og ét til databehandling for forskere. Find eksempler på den samme simple opgave skrevet i hvert sprog. Jeg lover, du bliver helt overrasket over, hvor forskelligt de kan se ud, selvom de laver præcis det samme! -2. **Opdag deres oprindelseshistorier**: Hvad gør hvert sprog specielt? Her er en fed kendsgerning – hvert eneste programmeringssprog blev skabt, fordi nogen tænkte: "Ved du hvad? Der må være en bedre måde at løse dette specifikke problem på." Kan du finde ud af, hvad de problemer var? Nogle af disse historier er virkelig fascinerende! +2. **Opdag deres oprindelseshistorier**: Hvad gør hvert sprog unikt? Her er en fed kendsgerning – hvert enkelt programmeringssprog blev skabt, fordi nogen tænkte, "Ved du hvad? Der må være en bedre måde at løse dette specifikke problem." Kan du finde ud af, hvad disse problemer var? Nogle af historierne er virkelig spændende! -3. **Mød fællesskaberne**: Se på, hvor imødekommende og passionerede hvert sprogs fællesskab er. Nogle har millioner af udviklere, der deler viden og hjælper hinanden, andre er mindre, men utroligt tætte og støttende. Du vil elske at se de forskellige personligheder i disse fællesskaber! +3. **Mød fællesskaberne**: Se, hvor imødekommende og passionerede hvert sprogs fællesskab er. Nogle har millioner af udviklere, der deler viden og hjælper hinanden, andre er mindre, men utrolig sammentømrede og støttende. Du kommer til at elske at opleve de forskellige personligheder i disse fællesskaber! -4. **Følg din mavefornemmelse**: Hvilket sprog føles mest tilgængeligt for dig lige nu? Stress ikke over at træffe det "perfekte" valg – bare lyt til din intuition! Der findes ærligt talt ikke noget forkert svar her, og du kan altid udforske andre senere. +4. **Følg din mavefornemmelse**: Hvilket sprog føles mest tilgængeligt for dig lige nu? Stress ikke over at træffe det "perfekte" valg – lyt bare til din instinkt! Der findes ærligt talt ikke et forkert svar her, og du kan altid udforske andre senere. -**Bonus detektivarbejde**: Se om du kan finde ud af, hvilke store hjemmesider eller apps der er bygget med hvert sprog. Jeg garanterer, at du bliver chokeret over, hvad der driver Instagram, Netflix eller det mobilspil, du ikke kan slippe! +**Bonusdetektivarbejde**: Se om du kan finde ud af, hvilke store hjemmesider eller apps der er bygget med hvert sprog. Jeg lover, du bliver chokeret over at lære, hvad der driver Instagram, Netflix eller det mobilspil, du ikke kan stoppe med at spille! -> 💡 **Husk**: Du prøver ikke at blive ekspert i nogen af disse sprog i dag. Du lærer bare kvarteret at kende, inden du beslutter, hvor du vil slå dig ned. Tag dig god tid, hav det sjovt og lad din nysgerrighed føre dig! +> 💡 **Husk**: Du behøver ikke blive ekspert i nogen af disse sprog i dag. Du skal bare lære kvarteret at kende, inden du beslutter dig for, hvor du vil slå dig ned. Tag dig god tid, hav det sjovt, og lad din nysgerrighed føre dig! -## Lad os fejre det, du har opdaget! +## Lad os fejre, hvad du har opdaget! -Hold da op, du har suget så meget fantastisk information til dig i dag! Jeg er virkelig spændt på at se, hvor meget af denne fantastiske rejse, der er blevet hængende hos dig. Og husk – det er ikke en test, hvor du skal have alt perfekt. Det her er mere som en fejring af alt det fede, du har lært om denne fascinerende verden, du er ved at begive dig ud i! +Hold da op, du har fanget så mange utrolige informationer i dag! Jeg er virkelig spændt på at se, hvor meget af denne fantastiske rejse, der sidder fast hos dig. Og husk – dette er ikke en test, hvor du skal gøre det perfekt. Det er mere en fejring af alt det seje, du har lært om denne fascinerende verden, du er på vej ind i! -[Tag efter-lektion quizzen](https://ff-quizzes.netlify.app/web/) -## Review & Selvstudie +[Tag quizzen efter lektionen](https://ff-quizzes.netlify.app/web/) -**Tag dig tid til at udforske og have det sjovt med det!** +## Gennemgang & Selvstudie -Du har dækket meget i dag, og det er noget at være stolt af! Nu kommer den sjove del – at udforske de emner, der vækkede din nysgerrighed. Husk, det her er ikke lektier – det er et eventyr! +**Tag dig tid til at udforske og have det sjovt med det!** +Du har dækket meget i dag, og det er noget, du kan være stolt af! Nu kommer den sjove del – at udforske de emner, der vækkede din nysgerrighed. Husk, dette er ikke lektier – det er et eventyr! **Dyk dybere ned i det, der begejstrer dig:** -**Prøv programmeringssprog af:** -- Besøg de officielle hjemmesider for 2-3 sprog, der fangede din opmærksomhed. Hvert sprog har sin egen personlighed og historie! -- Prøv nogle online kodelegepladser som [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), eller [Replit](https://replit.com/). Vær ikke bange for at eksperimentere – du kan ikke ødelægge noget! -- Læs om, hvordan dit yndlingssprog blev til. Alvorligt talt, nogle af oprindelseshistorierne er fascinerende og vil hjælpe dig med at forstå, hvorfor sprog fungerer, som de gør. +**Kom i gang med programmeringssprog:** +- Besøg de officielle hjemmesider for 2-3 sprog, der fangede din interesse. Hvert enkelte har sin egen personlighed og historie! +- Prøv nogle online kode-legeredskaber som [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), eller [Replit](https://replit.com/). Vær ikke bange for at eksperimentere – du kan ikke ødelægge noget! +- Læs om, hvordan dit yndlingssprog blev til. Seriøst, nogle af disse oprindelseshistorier er fascinerende og vil hjælpe dig med at forstå, hvorfor sprog fungerer, som de gør. -**Bliv fortrolig med dine nye værktøjer:** -- Download Visual Studio Code, hvis du ikke allerede har det – det er gratis, og du vil elske det! -- Brug et par minutter på at gennemse Extensions-markedet. Det er som en app-butik til din kodeeditor! -- Åbn din browsers udviklerværktøjer og klik bare rundt. Bekymr dig ikke om at forstå alt – bare bliv fortrolig med, hvad der er der. +**Bliv komfortabel med dine nye værktøjer:** +- Download Visual Studio Code, hvis du ikke allerede har gjort det – det er gratis, og du kommer til at elske det! +- Brug et par minutter på at browse gennem Extensions-markedet. Det er som en app-butik til din kodeeditor! +- Åbn din browsers Developer Tools og klik rundt. Bekymr dig ikke om at forstå alt – bare bliv fortrolig med, hvad der er der. -**Bliv en del af fællesskabet:** -- Følg nogle udviklerfællesskaber på [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), eller [GitHub](https://github.com/). Programmeringsfællesskabet er utrolig imødekommende over for nybegyndere! -- Se nogle begynder-venlige programmeringsvideoer på YouTube. Der findes mange gode skabere, som husker, hvordan det var at starte ud. +**Deltag i fællesskabet:** +- Følg nogle udviklerfællesskaber på [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), eller [GitHub](https://github.com/). Programmeringsfællesskabet er utroligt imødekommende overfor nybegyndere! +- Se nogle begynder-venlige kodevideoer på YouTube. Der er så mange gode skabere, som husker, hvordan det er at være ny. - Overvej at deltage i lokale meetups eller online fællesskaber. Tro mig, udviklere elsker at hjælpe nybegyndere! -> 🎯 **Lyt, her er hvad jeg vil have, du husker**: Du forventes ikke at blive en kode-troldmand natten over! Lige nu lærer du bare at kende denne fantastiske nye verden, du er ved at blive en del af. Tag dig tid, nyd rejsen, og husk – hver eneste udvikler, du beundrer, sad engang præcis, hvor du sidder lige nu, og følte sig begejstret og måske lidt overvældet. Det er helt normalt, og det betyder, at du gør det rigtigt! +> 🎯 **Lyt, her er hvad jeg vil have dig til at huske**: Du forventes ikke at blive en kode-mester natten over! Lige nu lærer du bare dette fantastiske nye univers at kende, som du snart skal være en del af. Tag dig god tid, nyd rejsen, og husk – hver eneste udvikler, du beundrer, sad engang lige præcis, hvor du er nu, følte sig spændt og måske lidt overvældet. Det er helt normalt, og det betyder, at du gør det rigtigt! @@ -787,70 +787,70 @@ Du har dækket meget i dag, og det er noget at være stolt af! Nu kommer den sjo [Reading the Docs](assignment.md) -> 💡 **Et lille skub til din opgave**: Jeg ville virkelig elske at se dig udforske nogle værktøjer, vi ikke har dækket endnu! Spring editorerne, browsere og kommandolinjeværktøjerne over, som vi allerede har talt om – der er et helt utroligt univers af fantastiske udviklingsværktøjer derude, som bare venter på at blive opdaget. Kig efter dem, der er aktivt vedligeholdt og har levende, hjælpsomme fællesskaber (de har som regel de bedste tutorials og de mest støttende folk, når du uundgåeligt sidder fast og har brug for en venlig hånd). +> 💡 **Et lille skub til din opgave**: Jeg vil virkelig gerne se dig udforske nogle værktøjer, vi ikke har dækket endnu! Spring editorerne, browsere og kommandolinjeværktøjer over, som vi allerede har talt om – der er et helt utroligt univers af fantastiske udviklingsværktøjer derude, som bare venter på at blive opdaget. Kig efter dem, der aktivt bliver vedligeholdt og har levende, hjælpsomme fællesskaber (de har som regel de bedste tutorials og de mest støttende folk, når du uundgåeligt sidder fast og har brug for en venlig hånd). --- ## 🚀 Din Programmeringsrejse Tidslinje -### ⚡ **Hvad du kan nå på de næste 5 minutter** -- [ ] Bogmærk 2-3 programmeringssprogs hjemmesider, der fangede din opmærksomhed -- [ ] Download Visual Studio Code, hvis du ikke allerede har det -- [ ] Åbn din browsers DevTools (F12) og klik rundt på en hvilken som helst hjemmeside -- [ ] Bliv medlem af et programmeringsfællesskab (Dev.to, Reddit r/webdev, eller Stack Overflow) +### ⚡ **Det kan du nå på de næste 5 minutter** +- [ ] Bogmærk 2-3 programmeringssprogshjemmesider, der fangede din interesse +- [ ] Download Visual Studio Code, hvis du ikke allerede har gjort det +- [ ] Åbn din browsers DevTools (F12) og klik rundt på en vilkårlig hjemmeside +- [ ] Deltag i et programmeringsfællesskab (Dev.to, Reddit r/webdev eller Stack Overflow) -### ⏰ **Hvad du kan nå på denne time** -- [ ] Fuldfør quizzen efter lektionen og reflekter over dine svar -- [ ] Opsæt VS Code med GitHub Copilot-udvidelsen -- [ ] Prøv et "Hello World" eksempel i 2 forskellige programmeringssprog online -- [ ] Se en video om "En dag i livet for en udvikler" på YouTube -- [ ] Påbegynd din detektivarbejde om programmeringssprog (fra udfordringen) +### ⏰ **Det kan du nå på en time** +- [ ] Gennemfør quizzen efter lektionen og tænk over dine svar +- [ ] Sæt VS Code op med GitHub Copilot-udvidelsen +- [ ] Prøv et "Hello World"-eksempel i to forskellige programmeringssprog online +- [ ] Se en video om "En dag i en udviklers liv" på YouTube +- [ ] Start din programmeringssprogsdetektiv-arbejde (fra udfordringen) ### 📅 **Dit uge-lange eventyr** -- [ ] Fuldfør opgaven og udforsk 3 nye udviklingsværktøjer +- [ ] Gennemfør opgaven og udforsk 3 nye udviklingsværktøjer - [ ] Følg 5 udviklere eller programmeringskonti på sociale medier - [ ] Prøv at bygge noget lille i CodePen eller Replit (selv bare "Hello, [Dit Navn]!") -- [ ] Læs et udviklerblogindlæg om nogens programmeringsrejse +- [ ] Læs et udvikler-blogindlæg om nogens kode-rejse - [ ] Deltag i et virtuelt meetup eller se en programmeringssnak - [ ] Begynd at lære dit valgte sprog med online tutorials -### 🗓️ **Din månedslange forvandling** -- [ ] Byg dit første lille projekt (selv en simpel webside tæller!) -- [ ] Bidrag til et open source-projekt (start med dokumentationsrettelser) -- [ ] Mentorer en, der lige er startet på deres programmeringsrejse -- [ ] Lav din udviklerportfolio-hjemmeside -- [ ] Forbind dig med lokale udviklerfællesskaber eller studiegrupper -- [ ] Begynd at planlægge dit næste læringsmål +### 🗓️ **Din måned-lange forvandling** +- [ ] Byg dit første lille projekt (selv en simpel hjemmeside tæller!) +- [ ] Bidrag til et open-source projekt (start med dokumentationsrettelser) +- [ ] Mentorér en, der lige er startet på deres programmeringsrejse +- [ ] Lav din udvikler-portfolio hjemmeside +- [ ] Forbind med lokale udviklerfællesskaber eller studiegrupper +- [ ] Begynd at planlægge din næste læringsmilepæl -### 🎯 **Afsluttende refleksion** +### 🎯 **Sidste refleksionscheck** -**Før du går videre, så tag et øjeblik til at fejre:** -- Hvad er én ting ved programmering, der begejstrede dig i dag? +**Før du går videre, tag et øjeblik til at fejre:** +- Hvad er én ting om programmering, der begejstrede dig i dag? - Hvilket værktøj eller koncept vil du udforske først? -- Hvordan føler du dig ved at starte denne programmeringsrejse? -- Hvilket spørgsmål vil du stille en udvikler lige nu? +- Hvordan har du det med at starte denne programmeringsrejse? +- Hvad er et spørgsmål, du gerne vil stille en udvikler lige nu? ```mermaid journey title Din Selvtillidsopbygningsrejse - section I dag + section I Dag Nysgerrig: 3: You Overvældet: 4: You Begejstret: 5: You - section Denne uge + section Denne Uge Udforskning: 4: You Læring: 5: You Forbindelse: 4: You - section Næste måned + section Næste Måned Opbygning: 5: You Selvsikker: 5: You - Hjælper andre: 5: You + Hjælpe Andre: 5: You ``` -> 🌟 **Husk**: Enhver ekspert var engang en begynder. Enhver seniorudvikler har følt sig præcis som dig lige nu – begejstret, måske lidt overvældet, og bestemt nysgerrig efter, hvad der er muligt. Du er i fantastisk selskab, og denne rejse bliver utroligt spændende. Velkommen til den vidunderlige verden af programmering! 🎉 +> 🌟 **Husk**: Enhver ekspert har engang været nybegynder. Enhver seniorudvikler har engang følt præcis som du gør lige nu – spændt, måske lidt overvældet, og helt sikkert nysgerrig efter, hvad der er muligt. Du er i fantastisk selskab, og denne rejse bliver utroligt spændende. Velkommen til den vidunderlige verden af programmering! 🎉 --- -**Ansvarsfraskrivelse**: -Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiske oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger som følge af brugen af denne oversættelse. +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/AGENTS.md b/translations/da/AGENTS.md index 5bd894a83..d9be5e449 100644 --- a/translations/da/AGENTS.md +++ b/translations/da/AGENTS.md @@ -2,36 +2,36 @@ ## Projektoversigt -Dette er et uddannelseslæremiddelforestilling til undervisning i grundlæggende webudvikling for begyndere. Læremidlet er et omfattende 12-ugers kursus udviklet af Microsoft Cloud Advocates, med 24 praktiske lektioner, der dækker JavaScript, CSS og HTML. +Dette er et uddannelsesforløb-lager til undervisning i webudviklingsgrundlag for begyndere. Forløbet er et omfattende 12-ugers kursus udviklet af Microsoft Cloud Advocates, med 24 praktiske lektioner, der dækker JavaScript, CSS og HTML. -### Nøglekomponenter +### Hovedkomponenter -- **Uddannelsesindhold**: 24 strukturerede lektioner organiseret i projektbaserede moduler -- **Praktiske projekter**: Terrarium, Typingspil, Browserudvidelse, Rumspil, Bankapp, Kodeeditor og AI Chat-assistent -- **Interaktive quizzer**: 48 quizzer med 3 spørgsmål hver (før/efter lektion vurderinger) -- **Flersproget support**: Automatiserede oversættelser til 50+ sprog via GitHub Actions -- **Teknologier**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (til AI-projekter) +- **Uddannelsesindhold**: 24 strukturerede lektioner organiseret i projektbaserede moduler +- **Praktiske Projekter**: Terrarium, Typing Game, Browserudvidelse, Space Game, Banking App, Code Editor, og AI Chat Assistant +- **Interaktive Quizzer**: 48 quizzer med 3 spørgsmål hver (før/efter-lesson vurderinger) +- **Flersprogssupport**: Automatiske oversættelser til 50+ sprog via GitHub Actions +- **Teknologier**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (til AI-projekter) ### Arkitektur -- Uddannelsesrepository med lektionbaseret struktur -- Hver lektionsmappe indeholder README, kodeeksempler og løsninger -- Selvstændige projekter i separate mapper (quiz-app, diverse lektionsprojekter) -- Oversættelsessystem ved brug af GitHub Actions (co-op-translator) -- Dokumentation serveres via Docsify og findes som PDF +- Uddannelseslager med lektion-baseret struktur +- Hver lektionsmappe indeholder README, kodeeksempler og løsninger +- Selvstændige projekter i separate mapper (quiz-app, forskellige lektionsprojekter) +- Oversættelsessystem ved brug af GitHub Actions (co-op-translator) +- Dokumentation serveret via Docsify og tilgængelig som PDF ## Opsætningskommandoer -Dette repository er primært til konsumering af uddannelsesindhold. For arbejde med specifikke projekter: +Dette lager er primært til forbrug af uddannelsesindhold. For arbejde med specifikke projekter: -### Hovedrepository opsætning +### Hovedlageropsætning ```bash git clone https://github.com/microsoft/Web-Dev-For-Beginners.git cd Web-Dev-For-Beginners ``` - -### Quiz App opsætning (Vue 3 + Vite) + +### Quiz App Opsætning (Vue 3 + Vite) ```bash cd quiz-app @@ -40,7 +40,7 @@ npm run dev # Start udviklingsserver npm run build # Byg til produktion npm run lint # Kør ESLint ``` - + ### Bankprojekt API (Node.js + Express) ```bash @@ -50,7 +50,7 @@ npm start # Start API-server npm run lint # Kør ESLint npm run format # Formater med Prettier ``` - + ### Browserudvidelsesprojekter ```bash @@ -58,16 +58,16 @@ cd 5-browser-extension/solution npm install # Følg browser-specifikke instruktioner til indlæsning af udvidelser ``` - -### Rumspilsprojekter + +### Space Game Projekter ```bash cd 6-space-game/solution npm install # Åbn index.html i browseren eller brug Live Server ``` - -### Chatprojekt (Python Backend) + +### Chat Projekt (Python Backend) ```bash cd 9-chat-project/solution/backend/python @@ -75,208 +75,208 @@ pip install openai # Indstil miljøvariablen GITHUB_TOKEN python api.py ``` - -## Udviklingsworkflow -### For indholdsleverandører +## Udviklingsarbejdsgang + +### For Indholdsbidragydere -1. **Fork repository** til din GitHub-konto -2. **Clone din fork** lokalt -3. **Opret en ny branch** til dine ændringer -4. Foretag ændringer til lektionsindhold eller kodeeksempler -5. Test eventuelle kodeændringer i relevante projektmapper -6. Indsend pull requests i henhold til bidragsretningslinjer +1. **Fork lageret** til din GitHub-konto +2. **Klon din fork** lokalt +3. **Opret en ny gren** til dine ændringer +4. Foretag ændringer til lektionsindhold eller kodeeksempler +5. Test eventuelle kodeændringer i relevante projektmapper +6. Indsend pull requests i henhold til bidragsretningslinjerne -### For lærende +### For Lærende -1. Fork eller klon repository -2. Naviger sekventielt i lektionsmapper -3. Læs README-filer for hver lektion -4. Tag pre-lesson quizzer på https://ff-quizzes.netlify.app/web/ -5. Arbejd gennem kodeeksempler i lektionsmapper -6. Fuldfør opgaver og udfordringer -7. Tag post-lesson quizzer +1. Fork eller klon lageret +2. Naviger til lektionsmapper i rækkefølge +3. Læs README-filer for hver lektion +4. Gennemfør før-lektion quizzer på https://ff-quizzes.netlify.app/web/ +5. Arbejd med kodeeksempler i lektionsmapper +6. Fuldfør opgaver og udfordringer +7. Tag efter-lektion quizzer -### Liveudvikling +### Live Udvikling -- **Dokumentation**: Kør `docsify serve` i rodmappen (port 3000) -- **Quiz App**: Kør `npm run dev` i quiz-app mappen -- **Projekter**: Brug VS Code Live Server extension til HTML-projekter -- **API-projekter**: Kør `npm start` i respektive API-mapper +- **Dokumentation**: Kør `docsify serve` i rodmappen (port 3000) +- **Quiz App**: Kør `npm run dev` i quiz-app mappen +- **Projekter**: Brug VS Code Live Server-udvidelsen til HTML-projekter +- **API Projekter**: Kør `npm start` i respektive API-mapper ## Testinstruktioner -### Quiz App test +### Quiz App Test ```bash cd quiz-app -npm run lint # Tjek for problemer med kodestil +npm run lint # Tjek for kode stil problemer npm run build # Bekræft at build lykkes ``` - -### Bank API test + +### Bank API Test ```bash cd 7-bank-project/api npm run lint # Tjek for kode stil problemer -node server.js # Bekræft at serveren starter uden fejl +node server.js # Bekræft, at serveren starter uden fejl ``` - -### Generel testtilgang -- Dette er et uddannelsesrepository uden omfattende automatiserede tests -- Manuel test fokuserer på: - - Kodeeksempler kører fejlfrit - - Links i dokumentation fungerer korrekt - - Projektbygninger gennemføres succesfuldt - - Eksempler følger bedste praksis +### Generel Testtilgang + +- Dette er et uddannelseslager uden omfattende automatiserede tests +- Manuel test fokuserer på: + - Kodeeksempler kører uden fejl + - Links i dokumentationen fungerer korrekt + - Projekt builds gennemføres succesfuldt + - Eksempler følger bedste praksis -### Pre-indsendelsescheck +### Tjek Før Indsendelse -- Kør `npm run lint` i mapper med package.json -- Bekræft at markdown-links er gyldige -- Test kodeeksempler i browser eller Node.js -- Tjek at oversættelser bevarer korrekt struktur +- Kør `npm run lint` i mapper med package.json +- Bekræft at markdown-links er valide +- Test kodeeksempler i browser eller Node.js +- Kontrollér at oversættelser bevarer korrekt struktur -## Kode-stil retningslinjer +## Kodeformateringsretningslinjer ### JavaScript -- Brug moderne ES6+ syntaks -- Følg standard ESLint konfigurationer leveret i projekterne -- Brug meningsfulde variabel- og funktionsnavne for uddannelsesmæssig klarhed -- Tilføj kommentarer der forklarer koncepter for lærende -- Formater med Prettier hvor konfigureret +- Brug moderne ES6+ syntaks +- Følg standard ESLint konfigurationer i projekterne +- Brug meningsfulde variabel- og funktionsnavne for pædagogisk klarhed +- Tilføj kommentarer der forklarer koncepter for lærende +- Formater med Prettier hvor konfigureret ### HTML/CSS -- Semantiske HTML5 elementer -- Responsive designprincipper -- Klare klasse-navnekonventioner -- Kommentarer der forklarer CSS-teknikker for lærende +- Semantiske HTML5-elementer +- Responsive designprincipper +- Klare klassenavnekonventioner +- Kommentarer der forklarer CSS-teknikker for lærende ### Python -- PEP 8 stil retningslinjer -- Klare, uddannelsesmæssige kodeeksempler -- Type hints hvor hjælpsomt for læring +- PEP 8 stilretningslinjer +- Tydelige, pædagogiske kodeeksempler +- Type hints hvor hjælpsomt for læring -### Markdown dokumentation +### Markdown Dokumentation -- Klar overskriftshierarki -- Kodeblokke med sprogspecifikation -- Links til yderligere ressourcer -- Skærmbilleder og billeder i `images/` mapper -- Alt-tekst for billeder for tilgængelighed +- Klar overskriftshierarki +- Kodeblokke med sprogspecifikation +- Links til yderligere ressourcer +- Skærmbilleder og billeder i `images/` mapper +- Alt-tekst for billeder for tilgængelighed ### Filorganisation -- Lektioner nummereret sekventielt (1-getting-started-lessons, 2-js-basics, osv.) -- Hvert projekt har `solution/` og ofte `start/` eller `your-work/` mapper -- Billeder opbevaret i lektionsspecifikke `images/` mapper -- Oversættelser i `translations/{language-code}/` struktur +- Lektioner nummeret sekventielt (1-getting-started-lessons, 2-js-basics, osv.) +- Hvert projekt har `solution/` og ofte `start/` eller `your-work/` mapper +- Billeder gemt i lektion-specifikke `images/` mapper +- Oversættelser i `translations/{language-code}/` struktur -## Build og udrulning +## Byg og Udrul -### Quiz App udrulning (Azure Static Web Apps) +### Quiz App Udrulning (Azure Static Web Apps) -quiz-app er konfigureret til Azure Static Web Apps udrulning: +Quiz-app'en er konfigureret til Azure Static Web Apps udrulning: ```bash cd quiz-app npm run build # Opretter dist/-mappe -# Udruller via GitHub Actions-arbejdsgang ved push til main +# Udruller via GitHub Actions workflow ved push til main ``` - -Azure Static Web Apps konfiguration: -- **App placering**: `/quiz-app` -- **Output placering**: `dist` -- **Workflow**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` -### Dokumentations PDF generering +Azure Static Web Apps konfiguration: +- **App placering**: `/quiz-app` +- **Output placering**: `dist` +- **Workflow**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` + +### Dokumentations PDF Generering ```bash npm install # Installer docsify-to-pdf npm run convert # Generer PDF fra docs ``` - -### Docsify dokumentation + +### Docsify Dokumentation ```bash npm install -g docsify-cli # Installer Docsify globalt docsify serve # Server på localhost:3000 ``` - -### Projekt-specifikke builds -Hver projektmappe kan have sin egen build-proces: -- Vue projekter: `npm run build` skaber produktionspakker -- Statisk projekter: Ingen build-step, filer serveres direkte +### Projekt-specifikke Builds + +Hver projektmappe kan have sin egen byggeproces: +- Vue-projekter: `npm run build` skaber produktionspakker +- Statiske projekter: Ingen build-step, server filer direkte -## Pull Request retningslinjer +## Pull Request Retningslinjer -### Titelformat +### Titel Format -Brug klare, beskrivende titler der angiver ændringsområdet: -- `[Quiz-app] Tilføj ny quiz til lektion X` -- `[Lesson-3] Ret stavefejl i terrarium projekt` -- `[Translation] Tilføj spansk oversættelse til lektion 5` -- `[Docs] Opdater opsætningsinstruktioner` +Brug klare, beskrivende titler der angiver ændringsområdet: +- `[Quiz-app] Tilføj ny quiz til lektion X` +- `[Lesson-3] Ret stavefejl i terrarium projekt` +- `[Translation] Tilføj spansk oversættelse til lektion 5` +- `[Docs] Opdater opsætningsinstruktioner` -### Nødvendige checks +### Krævede Tjek Før indsendelse af PR: -1. **Kodekvalitet**: - - Kør `npm run lint` i berørte projektmapper - - Ret alle lintfejl og advarsler +1. **Kodekvalitet**: + - Kør `npm run lint` i berørte projektmapper + - Ret alle linting fejl og advarsler -2. **Build verifikation**: - - Kør `npm run build` hvis relevant - - Sikr at der ikke er build-fejl +2. **Build Verifikation**: + - Kør `npm run build` hvis relevant + - Sikr at der ikke er build-fejl -3. **Linkvalidering**: - - Test alle markdown links - - Bekræft at billedreferencer virker +3. **Link Validering**: + - Test alle markdown links + - Bekræft billedreferencer fungerer -4. **Indholdsrevision**: - - Korrekturlæs stavning og grammatik - - Sikr at kodeeksempler er korrekte og uddannelsesmæssige - - Bekræft at oversættelser bevarer oprindelig betydning +4. **Indholdsgennemgang**: + - Korrekturlæs for stave- og grammatikfejl + - Sikr at kodeeksempler er korrekte og pædagogiske + - Bekræft at oversættelser bevarer original betydning ### Bidragskrav -- Accepter Microsoft CLA (automatisk check ved første PR) -- Følg [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) -- Se [CONTRIBUTING.md](./CONTRIBUTING.md) for detaljerede retningslinjer -- Referer issues i PR-beskrivelse hvis relevant +- Accepter Microsoft CLA (automatisk check ved første PR) +- Følg [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- Se [CONTRIBUTING.md](./CONTRIBUTING.md) for detaljerede retningslinjer +- Referer til issue-numre i PR-beskrivelse hvis relevant -### Review proces +### Gennemgangsproces -- PRs gennemgås af vedligeholdere og community -- Uddannelsesklarhed prioriteres -- Kodeeksempler skal følge gældende bedste praksis -- Oversættelser gennemgås for nøjagtighed og kulturel egnethed +- PR’er gennemgås af vedligeholdere og community +- Pædagogisk klarhed prioriteres +- Kodeeksempler skal følge aktuelle bedste praksisser +- Oversættelser vurderes for nøjagtighed og kulturel tilpasning ## Oversættelsessystem -### Automatisk oversættelse +### Automatisk Oversættelse -- Bruger GitHub Actions med co-op-translator workflow -- Oversætter automatisk til 50+ sprog -- Kildefiler i hovedmapper -- Oversatte filer i `translations/{language-code}/` mapper +- Bruger GitHub Actions med co-op-translator workflow +- Oversætter til 50+ sprog automatisk +- Kildefiler i hovedmapper +- Oversatte filer i `translations/{language-code}/` mapper -### Tilføjelse af manuelle oversættelsesforbedringer +### Tilføjelse af Manuelle Oversættelsesforbedringer -1. Find fil i `translations/{language-code}/` -2. Foretag forbedringer samtidig med at struktur bevares -3. Sørg for at kodeeksempler forbliver funktionelle -4. Test evt. lokaliseret quizindhold +1. Find fil i `translations/{language-code}/` +2. Foretag forbedringer med bevaret struktur +3. Sikr at kodeeksempler forbliver funktionelle +4. Test eventuelt lokaliseret quiz-indhold -### Oversættelses metadata +### Oversættelses Metadata -Oversatte filer inkluderer metadata header: +Oversatte filer indeholder metadata header: ```markdown ``` - -## Fejlfinding og problemløsning -### Almindelige problemer +## Fejlfinding og Problemløsning + +### Almindelige Problemer -**Quiz app starter ikke**: -- Tjek Node.js version (v14+ anbefales) -- Slet `node_modules` og `package-lock.json`, kør `npm install` igen -- Tjek for portkonflikter (standard: Vite bruger port 5173) +**Quiz app starter ikke**: +- Tjek Node.js version (v14+ anbefalet) +- Slet `node_modules` og `package-lock.json`, kør `npm install` igen +- Tjek for portkonflikter (standard: Vite bruger port 5173) -**API serveren starter ikke**: -- Bekræft at Node.js version opfylder minimum (node >=10) -- Tjek om port allerede er i brug -- Sørg for alle afhængigheder er installeret med `npm install` +**API server starter ikke**: +- Bekræft Node.js version minimum (node >=10) +- Tjek om port allerede er i brug +- Sikr at alle afhængigheder er installeret med `npm install` -**Browserudvidelse indlæses ikke**: -- Bekræft at manifest.json er korrekt formateret -- Tjek browserens konsol for fejl -- Følg browser-specifikke installationsinstruktioner for udvidelser +**Browserudvidelse loader ikke**: +- Bekræft at manifest.json er korrekt formateret +- Tjek browserkonsol for fejl +- Følg browser-specifikke installationsinstruktioner til udvidelser -**Python chat projekt problemer**: -- Sørg for OpenAI pakken er installeret: `pip install openai` -- Bekræft at GITHUB_TOKEN miljøvariablen er sat -- Check GitHub Models adgangstilladelser +**Python chat projekt problemer**: +- Sikr at OpenAI-pakken er installeret: `pip install openai` +- Bekræft at miljøvariablen GITHUB_TOKEN er sat +- Tjek GitHub Models adgangstilladelser -**Docsify serverer ikke dokumenter**: -- Installer docsify-cli globalt: `npm install -g docsify-cli` -- Kør fra repository rodmappe -- Tjek at `docs/_sidebar.md` eksisterer +**Docsify serverer ikke docs**: +- Installer docsify-cli globalt: `npm install -g docsify-cli` +- Kør fra lagerets rodmappe +- Tjek at `docs/_sidebar.md` findes -### Udviklingsmiljøtips +### Udviklingsmiljø Tips -- Brug VS Code med Live Server extension til HTML projekter -- Installer ESLint og Prettier extensions for konsistent formattering -- Brug browserens DevTools til debugging af JavaScript -- Til Vue projekter, installer Vue DevTools browser extension +- Brug VS Code med Live Server-udvidelsen til HTML-projekter +- Installer ESLint og Prettier-udvidelser for ensartet formatering +- Brug browser DevTools til fejlfinding af JavaScript +- For Vue projekter, installer Vue DevTools browserudvidelsen -### Ydeevne overvejelser +### Ydelsesbetragtninger -- Stort antal oversatte filer (50+ sprog) betyder at fulde clones er store -- Brug shallow clone hvis kun indhold arbejdes på: `git clone --depth 1` -- Ekskluder oversættelser fra søgninger når der arbejdes på engelsk indhold -- Buildprocesser kan være langsomme ved første kørsel (npm install, Vite build) +- Stort antal oversatte filer (50+ sprog) betyder at komplette kloner er store +- Brug shallow clone hvis du kun arbejder med indhold: `git clone --depth 1` +- Udeluk oversættelser fra søgninger ved arbejde med engelsk indhold +- Byggeprocesser kan være langsomme ved første kørsel (npm install, Vite build) -## Sikkerhedsovervejelser +## Sikkerhedsbetragtninger -### Miljøvariabler +### Miljøvariable -- API nøgler må aldrig committes til repository -- Brug `.env` filer (allerede i `.gitignore`) -- Dokumenter nødvendige miljøvariabler i projektets README +- API nøgler må aldrig committes til lager +- Brug `.env` filer (allerede i `.gitignore`) +- Dokumenter nødvendige miljøvariable i projekt-READMEs -### Python projekter +### Python Projekter -- Brug virtuelle miljøer: `python -m venv venv` -- Hold afhængigheder opdaterede -- GitHub tokens skal have minimal nødvendige tilladelser +- Brug virtuelle miljøer: `python -m venv venv` +- Hold afhængigheder opdaterede +- GitHub tokens skal have minimale nødvendige rettigheder -### GitHub Models adgang +### GitHub Models Adgang -- Personlige Access Tokens (PAT) kræves for GitHub Models -- Tokens skal gemmes som miljøvariabler -- Commit aldrig tokens eller credentials +- Personlige adgangstokens (PAT) kræves til GitHub Models +- Tokens skal gemmes som miljøvariable +- Committ aldrig tokens eller login-oplysninger -## Yderligere noter +## Yderligere Bemærkninger ### Målgruppe -- Fuldstændige begyndere til webudvikling -- Studerende og selvstuderende -- Lærere der bruger curriculum i klasseværelser -- Indhold designet for tilgængelighed og gradvis færdighedsopbygning +- Fulde begyndere til webudvikling +- Studerende og selv-studerende +- Lærere der bruger forløbet i klasseværelser +- Indhold designet til tilgængelighed og gradvis færdighedsopbygning ### Uddannelsesfilosofi -- Projektbaseret læringstilgang -- Hyppige videnschecks (quizzer) -- Praktiske kodningsøvelser -- Eksempler på virkelige anvendelser -- Fokus på grundlæggende før frameworks +- Projektbaseret læringstilgang +- Hyppige videnschecks (quizzer) +- Praktiske kodningsøvelser +- Eksempler på virkelige anvendelser +- Fokus på grundlæggende før frameworks -### Repository vedligeholdelse +### Lager Vedligeholdelse -- Aktivt community af lærende og bidragydere -- Regelmæssige opdateringer af afhængigheder og indhold -- Issues og diskussioner overvåges af vedligeholdere -- Oversættelsesopdateringer automatiseret via GitHub Actions +- Aktivt community af lærende og bidragydere +- Regelmæssige opdateringer til afhængigheder og indhold +- Issues og diskussioner overvåget af vedligeholdere +- Oversættelsesopdateringer automatiseret via GitHub Actions -### Relaterede ressourcer +### Relaterede Ressourcer -- [Microsoft Learn moduler](https://docs.microsoft.com/learn/) -- [Student Hub ressourcer](https://docs.microsoft.com/learn/student-hub/) -- [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) anbefales til lærende -- Yderligere kurser: Generativ AI, Data Science, ML, IoT curriculum tilgængelige +- [Microsoft Learn moduler](https://docs.microsoft.com/learn/) +- [Student Hub ressourcer](https://docs.microsoft.com/learn/student-hub/) +- [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) anbefalet til lærende +- Yderligere kurser: Generativ AI, Data Science, ML, IoT forløb tilgængelige -### Arbejde med specifikke projekter +### Arbejde med Specifikke Projekter -For detaljerede instruktioner om individuelle projekter, se README-filer i: -- `quiz-app/README.md` - Vue 3 quiz applikation -- `7-bank-project/README.md` - Bankapplikation med autentifikation -- `5-browser-extension/README.md` - Udvikling af browserudvidelse -- `6-space-game/README.md` - Canvas-baseret spiludvikling -- `9-chat-project/README.md` - AI chat assistent projekt +For detaljerede instruktioner om enkelte projekter, se README-filerne i: +- `quiz-app/README.md` - Vue 3 quiz applikation +- `7-bank-project/README.md` - Banking app med autentificering +- `5-browser-extension/README.md` - Browserudvidelsesudvikling +- `6-space-game/README.md` - Canvas-baseret spiludvikling +- `9-chat-project/README.md` - AI chatassistent projekt -### Monorepo struktur +### Monorepo Struktur -Selvom det ikke er et traditionelt monorepo, indeholder dette repository flere uafhængige projekter: -- Hver lektion er selvstændig -- Projekter deler ikke afhængigheder -- Arbejd på individuelle projekter uden at påvirke andre -- Klon hele repo for fuld curriculum oplevelse +Selvom det ikke er et traditionelt monorepo, indeholder dette lager flere uafhængige projekter: +- Hver lektion er selvstændig +- Projekterne deler ikke afhængigheder +- Arbejd på individuelle projekter uden at påvirke andre +- Klon hele repo for fuldt forløbsoplevelse --- -**Ansvarsfraskrivelse**: -Dette dokument er oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. +**Ansvarsfraskrivelse**: +Dette dokument er oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, bedes du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. Ved kritiske informationer anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/README.md b/translations/da/README.md index e756cd1cd..269374da0 100644 --- a/translations/da/README.md +++ b/translations/da/README.md @@ -10,71 +10,81 @@ [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -# Webudvikling for begyndere - Et pensum +# Webudvikling for begyndere - en læseplan -Lær grundlæggende webudvikling med vores 12-ugers omfattende kursus fra Microsoft Cloud Advocates. Hver af de 24 lektioner dykker ned i JavaScript, CSS og HTML gennem praktiske projekter som terrarier, browserudvidelser og rumspil. Deltag i quizzer, diskussioner og praktiske opgaver. Forbedr dine færdigheder og optimer din viden med vores effektive projektbaserede pædagogik. Start din kodningsrejse i dag! +Lær grundlæggende webudvikling med vores 12-ugers omfattende kursus af Microsoft Cloud Advocates. Hver af de 24 lektioner dykker ned i JavaScript, CSS og HTML gennem praktiske projekter som terrarier, browserudvidelser og rumspil. Deltag i quizzer, diskussioner og praktiske opgaver. Forbedr dine færdigheder og optimer din vidensfastholdelse med vores effektive projektbaserede pædagogik. Start din kodningsrejse i dag! Deltag i Azure AI Foundry Discord-fællesskabet [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) Følg disse trin for at komme i gang med at bruge disse ressourcer: -1. **Fork depotet**: Klik på [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) -2. **Klon depotet**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -3. [**Deltag i Azure AI Foundry Discord og mød eksperter og andre udviklere**](https://discord.com/invite/ByRwuEEgH4) +1. **Fork Repositoryet**: Klik [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) +2. **Klon Repositoryet**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` +3. [**Deltag i Azure AI Foundry Discord og mød eksperter og medudviklere**](https://discord.com/invite/ByRwuEEgH4) ### 🌐 Flersproget support -#### Understøttet via GitHub Action (Automatiseret & Altid Opdateret) +#### Understøttet via GitHub Action (Automatiseret og altid opdateret) [Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](./README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](../el/README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md) > **Foretrækker du at klone lokalt?** - -> Dette repository indeholder 50+ sprogoversættelser, som betydeligt øger downloadstørrelsen. For at klone uden oversættelser, brug sparsomet udtjekning: +> +> Dette repository indeholder 50+ sprogoversættelser, hvilket øger downloadstørrelsen betydeligt. For at klone uden oversættelser skal du bruge spars checkout: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> > Dette giver dig alt, hvad du behøver for at gennemføre kurset med en meget hurtigere download. -**Hvis du ønsker at få tilføjet yderligere oversættelsessprog, findes de understøttede sprog [her](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** +**Hvis du ønsker at få understøttelse af yderligere oversættelsessprog, er de listet [her](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** [![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) #### 🧑‍🎓 _Er du studerende?_ -Besøg [**Student Hub siden**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), hvor du finder begynderressourcer, studentpakker og endda måder at få en gratis certifikatkupon på. Dette er siden, du vil bogmærke og tjekke fra tid til anden, da vi månedligt udskifter indhold. +Besøg [**Student Hub siden**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), hvor du finder begynderressourcer, studenterpakker og endda muligheder for at få et gratis certifikatkupon. Dette er siden, du vil bogmærke og tjekke indimellem, da vi skifter indhold månedligt. ### 📣 Meddelelse - Nye GitHub Copilot Agent mode udfordringer at gennemføre! -Ny udfordring tilføjet, kig efter "GitHub Copilot Agent Challenge 🚀" i de fleste kapitler. Det er en ny udfordring for dig at fuldføre ved at bruge GitHub Copilot og Agent mode. Hvis du ikke har brugt Agent mode før, kan den ikke bare generere tekst, men også skabe og redigere filer, køre kommandoer med mere. +Ny udfordring tilføjet, kig efter "GitHub Copilot Agent Challenge 🚀" i de fleste kapitler. Det er en ny udfordring, som du skal gennemføre ved hjælp af GitHub Copilot og Agent mode. Hvis du ikke har brugt Agent mode før, kan den ikke kun generere tekst, men også oprette og redigere filer, køre kommandoer og mere. -### 📣 Meddelelse - _Nyt projekt at bygge med Generativ AI_ +### 📣 Meddelelse - _Nyt projekt at bygge ved hjælp af Generativ AI_ -Nyt AI-assistent projekt lige tilføjet, tjek det ud [projekt](./9-chat-project/README.md) +Nyt AI Assistant projekt er netop tilføjet, tjek det ud [projekt](./9-chat-project/README.md) -### 📣 Meddelelse - _Nyt pensum_ om Generativ AI for JavaScript er netop udgivet +### 📣 Meddelelse - _Ny læseplan_ om Generativ AI for JavaScript er netop udgivet -Gå ikke glip af vores nye pensum om Generativ AI! +Gå ikke glip af vores nye læseplan for Generativ AI! Besøg [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) for at komme i gang! ![Background](../../translated_images/da/background.148a8d43afde5730.webp) - Lektioner, der dækker alt fra det grundlæggende til RAG. -- Interager med historiske karakterer ved hjælp af GenAI og vores følgesvend app. +- Interagér med historiske figurer ved hjælp af GenAI og vores følgesvend-app. - Sjov og engagerende fortælling, du vil rejse i tiden! ![character](../../translated_images/da/character.5c0dd8e067ffd693.webp) -Hver lektion inkluderer en opgave, en videnstest og en udfordring for at guide dig i læringsemner som: +Hver lektion inkluderer en opgave, en videnscheck og en udfordring, der guider dig i at lære emner som: - Prompting og prompt engineering -- Tekst- og billedapp generation +- Tekst- og billedappgenerering - Søgeapps Besøg [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) for at komme i gang! @@ -83,130 +93,129 @@ Besøg [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) for at k ## 🌱 Kom godt i gang -> **Lærere**, vi har [inkluderet nogle forslag](for-teachers.md) til, hvordan I kan bruge dette pensum. Vi modtager meget gerne jeres feedback [i vores diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! +> **Lærere**, vi har [inkluderet nogle forslag](for-teachers.md) til, hvordan I kan bruge denne læseplan. Vi vil meget gerne have jeres feedback [i vores diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! -**[Elever](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, for hver lektion, start med en quiz før lektion og følg op med at læse lektionens materiale, fuldføre de forskellige aktiviteter og tjek din forståelse med quiz efter lektionen. +**[Lærende](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, for hver lektion, start med en pre-lecture quiz og følg op med at læse forelæsningsmaterialet, gennemføre de forskellige aktiviteter og tjek din forståelse med post-lecture quizzen. -For at forbedre din læringsoplevelse, forbind med dine kammerater og arbejd sammen om projekterne! Diskussioner opfordres i vores [diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions), hvor vores moderatorhold vil være tilgængelige for at svare på dine spørgsmål. +For at forbedre din læringsoplevelse, forbind med dine jævnbyrdige for at arbejde på projekterne sammen! Diskussioner opfordres i vores [diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions), hvor vores team af moderatorer vil være tilgængelige for at besvare dine spørgsmål. -For at udvikle din uddannelse yderligere anbefaler vi stærkt at udforske [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) for yderligere studiematerialer. +For at fremme din uddannelse, anbefaler vi kraftigt at udforske [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) for yderligere studiematerialer. ### 📋 Opsætning af dit miljø -Dette pensum har et udviklingsmiljø klar til brug! Når du går i gang, kan du vælge at køre pensum i en [Codespace](https://github.com/features/codespaces/) (_et browserbaseret miljø uden installation_), eller lokalt på din computer ved hjælp af en teksteditor som [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +Denne læseplan har et udviklingsmiljø klar til brug! Når du kommer i gang, kan du vælge at køre læseplanen i en [Codespace](https://github.com/features/codespaces/) (_et browser-baseret miljø, hvor ingen installation er nødvendig_), eller lokalt på din computer ved hjælp af en teksteditor som [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). #### Opret dit repository -For at du nemt kan gemme dit arbejde anbefales det, at du opretter din egen kopi af dette repository. Det kan du gøre ved at klikke på knappen **Use this template** øverst på siden. Dette vil oprette et nyt repository på din GitHub-konto med en kopi af pensum. +For at du nemt kan gemme dit arbejde anbefales det, at du opretter din egen kopi af dette repository. Det kan du gøre ved at klikke på **Use this template** knappen øverst på siden. Dette vil oprette et nyt repository i din GitHub-konto med en kopi af læseplanen. Følg disse trin: -1. **Fork depotet**: Klik på knappen "Fork" øverst til højre på denne side. -2. **Klon depotet**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` +1. **Fork Repositoryet**: Klik på "Fork" knappen øverst til højre på denne side. +2. **Klon Repositoryet**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -#### Kør pensum i en Codespace +#### Køre læseplanen i en Codespace -I din kopi af dette repository, som du har oprettet, klik på knappen **Code** og vælg **Open with Codespaces**. Dette vil oprette en ny Codespace, som du kan arbejde i. +I din kopi af dette repository, som du har oprettet, klik på **Code** knappen og vælg **Open with Codespaces**. Dette opretter en ny Codespace til dig at arbejde i. ![Codespace](../../translated_images/da/createcodespace.0238bbf4d7a8d955.webp) -#### Kør pensum lokalt på din computer - -For at køre dette pensum lokalt på din computer, skal du bruge en teksteditor, en browser og et kommandolinjeværktøj. Vores første lektion, [Introduktion til programmeringssprog og værktøjer](../../1-getting-started-lessons/1-intro-to-programming-languages), vil guide dig gennem forskellige muligheder for hver af disse værktøjer, så du kan vælge det, der passer bedst til dig. +#### Køre læseplanen lokalt på din computer -Vi anbefaler at bruge [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) som din editor, som også har en indbygget [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Du kan downloade Visual Studio Code [her](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +For at køre denne læseplan lokalt på din computer, skal du bruge en teksteditor, en browser og et kommandolinjeværktøj. Vores første lektion, [Introduktion til programmeringssprog og handelsværktøjer](../../1-getting-started-lessons/1-intro-to-programming-languages), vil guide dig gennem forskellige valgmuligheder for hvert af disse værktøjer, så du kan vælge, hvad der passer bedst til dig. - -1. Klon dit repository til din computer. Det kan du gøre ved at klikke på knappen **Code** og kopiere URL’en: +Vi anbefaler at bruge [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) som din editor, som også har et indbygget [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Du kan downloade Visual Studio Code [her](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +1. Klon dit repository til din computer. Det kan du gøre ved at klikke på **Code**-knappen og kopiere URL'en: [CodeSpace](./images/createcodespace.png) - Åbn derefter [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) i [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon), og kør følgende kommando, hvor du erstatter `` med den URL, du lige har kopieret: + + Åbn derefter [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) i [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) og kør følgende kommando, hvor du erstatter `` med den URL, du lige har kopieret: ```bash git clone ``` -2. Åbn mappen i Visual Studio Code. Det kan du gøre ved at klikke på **File** > **Open Folder** og vælge den mappe, du lige har klonet. +2. Åbn mappen i Visual Studio Code. Det kan du gøre ved at klikke på **File** > **Open Folder** og vælge den mappe, du netop har klonet. > Anbefalede Visual Studio Code-udvidelser: > -> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - for at forhåndsvise HTML-sider i Visual Studio Code +> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - for at kunne forhåndsvise HTML-sider i Visual Studio Code > * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - for at hjælpe dig med at skrive kode hurtigere ## 📂 Hver lektion inkluderer: -- valgfri sketchnote +- valgfri skitsetegning - valgfri supplerende video -- forudgående opvarmningsquiz før lektion -- skriftlig lektion -- for projektbaserede lektioner, trin-for-trin vejledninger til, hvordan man bygger projektet -- vidensprøver +- opvarmningsquiz før lektionen +- skreven lektion +- for projektbaserede lektioner, trin-for-trin vejledninger om, hvordan man bygger projektet +- videnschecks - en udfordring - supplerende læsning - opgave -- [quiz efter lektionen](https://ff-quizzes.netlify.app/web/) +- [quiz efter lektion](https://ff-quizzes.netlify.app/web/) -> **En note om quizzer**: Alle quizzer findes i Quiz-app mappen, i alt 48 quizzer med tre spørgsmål hver. De er tilgængelige [her](https://ff-quizzes.netlify.app/web/). Quiz-appen kan køres lokalt eller implementeres til Azure; følg instruktionerne i `quiz-app` mappen. +> **En note om quizzes**: Alle quizzes findes i Quiz-app mappen, i alt 48 quizzes med tre spørgsmål hver. De er tilgængelige [her](https://ff-quizzes.netlify.app/web/); quiz-appen kan køres lokalt eller implementeres til Azure; følg instruktionerne i `quiz-app` mappen. ## 🗃️ Lektioner -| | Projekt Navn | Koncepter undervist | Læringsmål | Linket Lektion | Forfatter | -| :-: | :------------------------------------------------------: | :--------------------------------------------------------------------: | ---------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :-----------------------: | -| 01 | Kom godt i gang | Introduktion til programmering og værktøjer | Lær de grundlæggende principper bag de fleste programmeringssprog og om software, der hjælper professionelle udviklere | [Introduktion til programmeringssprog og værktøjer](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | -| 02 | Kom godt i gang | Grundlæggende om GitHub, inklusiv samarbejde i teams | Hvordan man bruger GitHub i sit projekt, hvordan man samarbejder med andre om en kodebase | [Introduktion til GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | -| 03 | Kom godt i gang | Tilgængelighed | Lær det grundlæggende om webtilgængelighed | [Grundlæggende om Tilgængelighed](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | -| 04 | JS Grundlæggende | JavaScript datatyper | Grundlæggende om JavaScript-datatyper | [Datatyper](./2-js-basics/1-data-types/README.md) | Jasmine | -| 05 | JS Grundlæggende | Funktioner og metoder | Lær om funktioner og metoder til at styre en applikations logik | [Funktioner og metoder](./2-js-basics/2-functions-methods/README.md) | Jasmine og Christopher | -| 06 | JS Grundlæggende | Beslutninger med JS | Lær hvordan man laver betingelser i din kode ved hjælp af beslutningstagning | [Beslutningstagning](./2-js-basics/3-making-decisions/README.md) | Jasmine | -| 07 | JS Grundlæggende | Arrays og loops | Arbejd med data ved hjælp af arrays og loops i JavaScript | [Arrays og loops](./2-js-basics/4-arrays-loops/README.md) | Jasmine | -| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML i praksis | Byg HTML for at skabe et online terrarium med fokus på layout | [Introduktion til HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | -| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS i praksis | Byg CSS for at style det online terrarium, med fokus på CSS-grundlæggende funktioner inklusiv at gøre siden responsiv | [Introduktion til CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | -| 10 | [Terrarium](./3-terrarium/solution/README.md) | JavaScript Closures, DOM-manipulation | Byg JavaScript for at få terrariet til at fungere som en drag/drop interface, med fokus på closures og DOM-manipulation | [JavaScript Closures, DOM-manipulation](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | -| 11 | [Typing Game](./4-typing-game/solution/README.md) | Byg et skrive-spil | Lær hvordan du bruger tastaturhændelser til at styre logikken i din JavaScript-app | [Begivenhedsdrevet programmering](./4-typing-game/typing-game/README.md) | Christopher | -| 12 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Arbejde med browsere | Lær hvordan browsere fungerer, deres historie, og hvordan man scaffolder de første elementer i en browserudvidelse | [Om browsere](./5-browser-extension/1-about-browsers/README.md) | Jen | -| 13 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Bygge en form, kalde API og gemme variabler i lokal lagring | Byg JavaScript-elementerne i din browserudvidelse for at kalde en API ved hjælp af variabler gemt i lokal lagring | [API'er, formularer og lokal lagring](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | -| 14 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Baggrundsprocesser i browseren, web performance | Brug browserens baggrundsprocesser til at håndtere udvidelsens ikon; lær om webperformance og nogle optimeringer | [Baggrundsopgaver og ydeevne](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | -| 15 | [Space Game](./6-space-game/solution/README.md) | Mere avanceret spiludvikling med JavaScript | Lær om arv ved hjælp af både klasser og sammensætning samt Pub/Sub-mønsteret, som forberedelse til at bygge et spil | [Introduktion til avanceret spiludvikling](./6-space-game/1-introduction/README.md) | Chris | -| 16 | [Space Game](./6-space-game/solution/README.md) | Tegning på canvas | Lær om Canvas API, der bruges til at tegne elementer på en skærm | [Tegning på Canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | -| 17 | [Space Game](./6-space-game/solution/README.md) | Flytte elementer rundt på skærmen | Opdag, hvordan elementer kan få bevægelse ved hjælp af kartesiske koordinater og Canvas API | [Flytning af elementer](./6-space-game/3-moving-elements-around/README.md) | Chris | -| 18 | [Space Game](./6-space-game/solution/README.md) | Kollisiondetektion | Få elementer til at kollidere og reagere på hinanden ved tastetryk og lav en cooldown-funktion for at sikre spillets ydeevne | [Kollisiondetektion](./6-space-game/4-collision-detection/README.md) | Chris | -| 19 | [Space Game](./6-space-game/solution/README.md) | Holde styr på point | Udfør matematiske beregninger baseret på spillets status og præstation | [Pointoptælling](./6-space-game/5-keeping-score/README.md) | Chris | -| 20 | [Space Game](./6-space-game/solution/README.md) | Afslutte og genstarte spillet | Lær om hvordan man afslutter og genstarter spillet, inklusiv oprydning af assets og nulstilling af variable | [Afslutningsbetingelsen](./6-space-game/6-end-condition/README.md) | Chris | -| 21 | [Banking App](./7-bank-project/solution/README.md) | HTML-skabeloner og ruter i en webapp | Lær hvordan man skaber fundamentet for en multipages website-arkitektur med routing og HTML-skabeloner | [HTML-skabeloner og ruter](./7-bank-project/1-template-route/README.md) | Yohan | -| 22 | [Banking App](./7-bank-project/solution/README.md) | Byg en Login og Registreringsformular | Lær om at bygge formularer og håndtere valideringsrutiner | [Formularer](./7-bank-project/2-forms/README.md) | Yohan | -| 23 | [Banking App](./7-bank-project/solution/README.md) | Metoder til at hente og bruge data | Hvordan data flyder ind og ud af din app, hvordan man henter, gemmer og bortskaffer det | [Data](./7-bank-project/3-data/README.md) | Yohan | -| 24 | [Banking App](./7-bank-project/solution/README.md) | Koncepter om state management | Lær hvordan din app bevarer state og hvordan man styrer den programmatisk | [State Management](./7-bank-project/4-state-management/README.md) | Yohan | -| 25 | [Browser/VScode Code](../../8-code-editor) | Arbejde med VScode | Lær hvordan man bruger en kodeeditor | [Brug VScode Code Editor](./8-code-editor/1-using-a-code-editor/README.md) | Chris | -| 26 | [AI Assistants](./9-chat-project/README.md) | Arbejde med AI | Lær hvordan man bygger sin egen AI-assistent | [AI Assistant projekt](./9-chat-project/README.md) | Chris | +| | Projektnavn | Gennemgåede Begreber | Læringsmål | Linket Lektion | Forfatter | +| :-: | :------------------------------------------------------: | :------------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | +| 01 | Kom I Gang | Introduktion til programmering og værktøjer | Lær de grundlæggende elementer bag de fleste programmeringssprog og om software, der hjælper professionelle udviklere med deres arbejde | [Intro til programmeringssprog og værktøjer](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | +| 02 | Kom I Gang | Grundlæggende GitHub, inkl. samarbejde i team | Hvordan man bruger GitHub i sit projekt, og hvordan man samarbejder med andre om en kodebase | [Intro til GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | +| 03 | Kom I Gang | Tilgængelighed | Lær det grundlæggende om webtilgængelighed | [Tilgængelighedsgrundlag](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | +| 04 | JS Grundlæggende | JavaScript Datatyper | Grundlæggende JavaScript-datatyper | [Datatyper](./2-js-basics/1-data-types/README.md) | Jasmine | +| 05 | JS Grundlæggende | Funktioner og Metoder | Lær om funktioner og metoder til at styre et programs logik | [Funktioner og Metoder](./2-js-basics/2-functions-methods/README.md) | Jasmine og Christopher | +| 06 | JS Grundlæggende | Beslutningstagning med JS | Lær at skabe betingelser i din kode ved hjælp af beslutningsmetoder | [Beslutningstagning](./2-js-basics/3-making-decisions/README.md) | Jasmine | +| 07 | JS Grundlæggende | Arrays og Løkker | Arbejd med data ved brug af arrays og løkker i JavaScript | [Arrays og Løkker](./2-js-basics/4-arrays-loops/README.md) | Jasmine | +| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML i praksis | Byg HTML'en til at skabe et online terrarium med fokus på opbygning af layout | [Introduktion til HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | +| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS i praksis | Byg CSS'en til at style det online terrarium med fokus på det grundlæggende i CSS, inkl. responsivt design | [Introduktion til CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | +| 10 | [Terrarium](./3-terrarium/solution/README.md) | JavaScript Closures, DOM-manipulation | Byg JavaScript til at få terrariet til at fungere som en drag/drop-grænseflade med fokus på closures og DOM-manipulation | [JavaScript Closures, DOM-manipulation](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | +| 11 | [Typing Game](./4-typing-game/solution/README.md) | Byg et Typingspil | Lær at bruge tastaturbegivenheder til at styre logikken i din JavaScript-app | [Eventdrevet programmering](./4-typing-game/typing-game/README.md) | Christopher | +| 12 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Arbejde med browsere | Lær hvordan browsere fungerer, deres historie og hvordan man laver de første elementer i en browser-udvidelse | [Om browsere](./5-browser-extension/1-about-browsers/README.md) | Jen | +| 13 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Byg et formular, kald et API og gem variabler i lokal lagring | Byg JavaScript-elementerne til din browserudvidelse for at kalde et API ved brug af variabler gemt i lokal lagring | [API'er, formularer og lokal lagring](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | +| 14 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Baggrundsprocesser i browseren, webperformance | Brug browserens baggrundsprocesser til at styre udvidelsens ikon; lær om webperformance og nogle optimeringer for at forbedre | [Baggrundsopgaver og performance](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | +| 15 | [Space Game](./6-space-game/solution/README.md) | Mere avanceret spiludvikling med JavaScript | Lær om arv via både klasser og komposition samt Pub/Sub-mønsteret som forberedelse til et spil | [Introduktion til avanceret spiludvikling](./6-space-game/1-introduction/README.md) | Chris | +| 16 | [Space Game](./6-space-game/solution/README.md) | Tegning til canvas | Lær om Canvas API, som bruges til at tegne elementer på en skærm | [Tegning til canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | +| 17 | [Space Game](./6-space-game/solution/README.md) | Flyt elementer rundt på skærmen | Opdag hvordan elementer kan bevæge sig vha. kartesiske koordinater og Canvas API | [Flyt elementer rundt](./6-space-game/3-moving-elements-around/README.md) | Chris | +| 18 | [Space Game](./6-space-game/solution/README.md) | Kollisionregistrering | Få elementer til at kollidere og reagere på hinanden ved tastetryk og tilføj en cooldown-funktion for at sikre spillets ydeevne | [Kollisionregistrering](./6-space-game/4-collision-detection/README.md) | Chris | +| 19 | [Space Game](./6-space-game/solution/README.md) | Hold styr på point | Udfør matematiske beregninger baseret på spillets status og præstation | [Hold styr på point](./6-space-game/5-keeping-score/README.md) | Chris | +| 20 | [Space Game](./6-space-game/solution/README.md) | Afslutning og genstart af spillet | Lær om at afslutte og genstarte spillet, inkl. oprydning af ressourcer og nulstilling af variabler | [Afslutningsbetingelsen](./6-space-game/6-end-condition/README.md) | Chris | +| 21 | [Banking App](./7-bank-project/solution/README.md) | HTML-skabeloner og routes i en webapp | Lær hvordan man skaber arkitekturen for et multipages website ved hjælp af routing og HTML-skabeloner | [HTML-skabeloner og routes](./7-bank-project/1-template-route/README.md) | Yohan | +| 22 | [Banking App](./7-bank-project/solution/README.md) | Byg en login- og registreringsformular | Lær om hvordan man laver formularer og håndterer valideringsrutiner | [Formularer](./7-bank-project/2-forms/README.md) | Yohan | +| 23 | [Banking App](./7-bank-project/solution/README.md) | Metoder til hentning og brug af data | Hvordan data flyder ind og ud af din app, hvordan man henter, gemmer og bortskaffer det | [Data](./7-bank-project/3-data/README.md) | Yohan | +| 24 | [Banking App](./7-bank-project/solution/README.md) | Koncepter for tilstandsadministration | Lær hvordan din app bevarer tilstand og hvordan man programmerer styring af denne | [Tilstandsadministration](./7-bank-project/4-state-management/README.md) | Yohan | +| 25 | [Browser/VScode Code](../../8-code-editor) | Arbejde med VScode | Lær hvordan man bruger en kodeeditor | [Brug af VScode Code Editor](./8-code-editor/1-using-a-code-editor/README.md) | Chris | +| 26 | [AI Assistants](./9-chat-project/README.md) | Arbejde med AI | Lær hvordan du bygger din egen AI-assistent | [AI Assistent projekt](./9-chat-project/README.md) | Chris | ## 🏫 Pædagogik -Vores pensum er designet med to nøgleprincipper i pædagogik: +Vores læreplan er designet med to centrale pædagogiske principper for øje: * projektbaseret læring -* hyppige quizzer +* hyppige quizzes -Programmet underviser i grundlæggende JavaScript, HTML og CSS samt de nyeste værktøjer og teknikker, som nutidens webudviklere bruger. Studerende får mulighed for at udvikle praktisk erfaring ved at bygge et skrive-spil, et virtuelt terrarium, en miljøvenlig browserudvidelse, et rum-invader stil-spil og en bank-app til virksomheder. Ved slutningen af serien vil eleverne have opnået en solid forståelse for webudvikling. +Programmet underviser i grundlæggende JavaScript, HTML og CSS samt de nyeste værktøjer og teknikker, som nutidens webudviklere bruger. Studerende vil få mulighed for at opnå praktisk erfaring ved at bygge et typing-spil, virtuelt terrarium, miljøvenligt browser-udvidelse, rum-invader-stil spil og en bankapp til virksomheder. Ved slutningen af serien vil studerende have opnået en solid forståelse af webudvikling. -> 🎓 Du kan tage de første par lektioner i dette pensum som en [Learn Path](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) på Microsoft Learn! +> 🎓 Du kan tage de første lektioner i denne læreplan som en [Learn Path](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) på Microsoft Learn! -Ved at sikre, at indholdet stemmer overens med projekterne, bliver processen mere engagerende for eleverne, og fastholdelsen af koncepterne forbedres. Vi har også skrevet flere introduktionslektioner i JavaScript grundlæggende for at introducere begreber, kombineret med en video fra "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" samlingen af videotutorials, hvor nogle af forfatterne har bidraget til dette pensum. +Ved at sikre, at indholdet er knyttet til projekter, bliver processen mere engagerende for studerende, og fastholdelsen af begreber styrkes. Vi har desuden skrevet flere introducerende lektioner i JavaScript grundlæggende for at introducere begreber, suppleret med en video fra "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" samlingen af videotutorials, hvoraf nogle forfattere bidrog til denne læreplan. -Derudover sætter en quiz med lav risiko før en klasse intentionen hos eleven mod at lære et emne, mens en anden quiz efter klassen sikrer yderligere fastholdelse. Dette pensum er designet til at være fleksibelt og sjovt og kan tages som helhed eller delvist. Projekterne starter småt og bliver gradvist mere komplekse ved slutningen af 12-ugers cyklussen. +Derudover sætter en lavrisiko quiz før en klasse målrettet elevens intention om at lære et emne, mens en anden quiz efter klasse sikrer yderligere fastholdelse. Denne læreplan er designet til at være fleksibel og sjov og kan tages helt eller delvist. Projekterne starter småt og bliver gradvist mere komplekse hen imod slutningen af den 12-ugers cyklus. -Selvom vi bevidst har undgået at introducere JavaScript-rammer for at koncentrere os om de grundlæggende færdigheder, der er nødvendige som webudvikler, før man tager en ramme i brug, kunne et godt næste skridt efter at have gennemført dette pensum være at lære om Node.js via en anden samling videoer: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". +Selvom vi har undgået at introducere JavaScript-rammeværk for at fokusere på de grundlæggende færdigheder, der kræves som webudvikler, før man tager et rammeværk i brug, vil et godt næste skridt i denne læreplans afslutning være at lære om Node.js via en anden samling videoer: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". -> Besøg vores [Code of Conduct](CODE_OF_CONDUCT.md) og [Contributing](CONTRIBUTING.md) retningslinjer. Vi byder konstruktiv feedback velkommen! +> Besøg vores [Adfærdskodeks](CODE_OF_CONDUCT.md) og [Bidrag](CONTRIBUTING.md) retningslinjer. Vi ser frem til din konstruktive feedback! ## 🧭 Offline adgang -Du kan køre denne dokumentation offline ved at bruge [Docsify](https://docsify.js.org/#/). Fork dette repo, [installer Docsify](https://docsify.js.org/#/quickstart) på din lokale maskine, og i rodmappen for dette repo, skriv `docsify serve`. Hjemmesiden vil blive serveret på port 3000 på din localhost: `localhost:3000`. +Du kan køre denne dokumentation offline ved at bruge [Docsify](https://docsify.js.org/#/). Fork dette repo, [installer Docsify](https://docsify.js.org/#/quickstart) på din lokale maskine, og skriv derefter i rodmappen af dette repo `docsify serve`. Websitet vil blive serveret på port 3000 på din localhost: `localhost:3000`. ## 📘 PDF +En PDF med alle lektionerne kan findes [her](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). -En PDF af alle lektionerne kan findes [her](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). +## 🎒 Andre Kurser -## 🎒 Andre kurser Vores team producerer andre kurser! Tjek dem ud: @@ -216,7 +225,7 @@ Vores team producerer andre kurser! Tjek dem ud: [![LangChain for Beginners](https://img.shields.io/badge/LangChain%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin) --- -### Azure / Edge / MCP / Agenter +### Azure / Edge / MCP / Agents [![AZD for Beginners](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) [![Edge AI for Beginners](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) [![MCP for Beginners](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) @@ -224,7 +233,7 @@ Vores team producerer andre kurser! Tjek dem ud: --- -### Generativ AI Serie +### Generative AI Series [![Generative AI for Beginners](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) [![Generative AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) [![Generative AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) @@ -232,7 +241,7 @@ Vores team producerer andre kurser! Tjek dem ud: --- -### Grundlæggende Læring +### Core Learning [![ML for Beginners](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) [![Data Science for Beginners](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) [![AI for Beginners](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) @@ -243,7 +252,7 @@ Vores team producerer andre kurser! Tjek dem ud: --- -### Copilot Serie +### Copilot Series [![Copilot for AI Paired Programming](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) [![Copilot for C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) [![Copilot Adventure](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) @@ -251,21 +260,21 @@ Vores team producerer andre kurser! Tjek dem ud: ## Få Hjælp -Hvis du går i stå eller har spørgsmål om at bygge AI-apps. Deltag sammen med andre elever og erfarne udviklere i diskussioner om MCP. Det er et støttende fællesskab, hvor spørgsmål er velkomne, og viden deles frit. +Hvis du sidder fast eller har spørgsmål om at bygge AI-apps. Deltag sammen med andre lærende og erfarne udviklere i diskussioner om MCP. Det er et støttende fællesskab, hvor spørgsmål er velkomne, og viden deles frit. [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -Hvis du har produktfeedback eller oplever fejl under byggeriet, besøg: +Hvis du har produktfeedback eller oplever fejl under udvikling, besøg: [![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum) ## Licens -Dette repository er licenseret under MIT-licensen. Se filen [LICENSE](../../LICENSE) for mere information. +Dette arkiv er licenseret under MIT-licensen. Se [LICENSE](../../LICENSE)-filen for mere information. --- **Ansvarsfraskrivelse**: -Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det oprindelige dokument på dets modersmål bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/de/.co-op-translator.json b/translations/de/.co-op-translator.json index 69d779724..f0afbd2ba 100644 --- a/translations/de/.co-op-translator.json +++ b/translations/de/.co-op-translator.json @@ -1,7 +1,7 @@ { "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { - "original_hash": "d45ddcc54eb9232a76d08328b09d792e", - "translation_date": "2026-01-06T09:24:35+00:00", + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T16:37:25+00:00", "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", "language_code": "de" }, @@ -493,7 +493,7 @@ }, "AGENTS.md": { "original_hash": "a362efd06d64d4134a0cfe8515a86d34", - "translation_date": "2026-02-06T15:46:17+00:00", + "translation_date": "2026-03-06T16:50:26+00:00", "source_file": "AGENTS.md", "language_code": "de" }, @@ -516,8 +516,8 @@ "language_code": "de" }, "README.md": { - "original_hash": "6d6385fd098088cb2d690fb0a6cdaedc", - "translation_date": "2026-02-06T15:42:19+00:00", + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T16:34:03+00:00", "source_file": "README.md", "language_code": "de" }, diff --git a/translations/de/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/de/1-getting-started-lessons/1-intro-to-programming-languages/README.md index 4701ef1e0..47fed66eb 100644 --- a/translations/de/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/de/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,86 +1,85 @@ -# Einführung in Programmiersprachen und moderne Entwickler-Tools +# Einführung in Programmiersprachen und moderne Entwicklerwerkzeuge -Hey du, zukünftiger Entwickler! 👋 Darf ich dir etwas erzählen, das mir jeden einzelnen Tag eine Gänsehaut bereitet? Du bist kurz davor zu entdecken, dass Programmieren nicht nur etwas mit Computern zu tun hat – es geht darum, echte Superkräfte zu besitzen, um deine wildesten Ideen zum Leben zu erwecken! +Hallo, zukünftiger Entwickler! 👋 Darf ich dir etwas erzählen, das mir jeden einzelnen Tag eine Gänsehaut bereitet? Du wirst gleich entdecken, dass Programmieren nicht nur etwas mit Computern zu tun hat – es sind tatsächlich Superkräfte, mit denen du deine wildesten Ideen zum Leben erwecken kannst! -Du kennst diesen Moment, wenn du deine Lieblings-App benutzt und alles einfach perfekt zusammenpasst? Wenn du auf einen Knopf tippst und etwas absolut Magisches passiert, das dich denken lässt: „Wow, wie haben die DAS gemacht?“ Nun, jemand wie du – wahrscheinlich gerade in seinem Lieblingscafé um 2 Uhr morgens mit dem dritten Espresso – hat den Code geschrieben, der diese Magie erschaffen hat. Und hier kommt das, was dir den Kopf sprengen wird: Am Ende dieser Lektion wirst du nicht nur verstehen, wie sie es gemacht haben, sondern du wirst es kaum erwarten können, es selbst auszuprobieren! +Kennst du diesen Moment, wenn du deine Lieblings-App benutzt und einfach alles perfekt zusammenpasst? Wenn du auf einen Button tippst und etwas absolut Magisches passiert, das dich denken lässt: „Wow, wie haben sie das gemacht?“ Nun, genau jemand wie du – wahrscheinlich gerade in seinem Lieblingscafé um 2 Uhr morgens bei seinem dritten Espresso – hat den Code geschrieben, der diese Magie erschaffen hat. Und jetzt kommt das, was dich umhauen wird: Am Ende dieser Lektion wirst du nicht nur verstehen, wie sie das gemacht haben, sondern du wirst es selbst ausprobieren wollen! -Schau mal, ich kann total nachvollziehen, wenn Programmieren gerade einschüchternd wirkt. Als ich angefangen habe, dachte ich ehrlich, man müsse ein Mathegenie sein oder seit fünf Jahren programmieren. Aber weißt du, was meine Sichtweise komplett verändert hat? Programmieren ist genau so, wie eine neue Sprache zu lernen. Man fängt mit „Hallo“ und „Danke“ an, dann bestellt man Kaffee, und ehe man sich versieht, führt man tiefgründige philosophische Gespräche! Nur in diesem Fall sprechen wir mit Computern, und weißt du was? Sie sind die geduldigsten Gesprächspartner, die du je haben wirst – sie richten sich nie nach deinen Fehlern und freuen sich immer darauf, es nochmal zu versuchen! +Hör zu, ich verstehe total, wenn Programmieren im Moment einschüchternd wirkt. Als ich anfing, dachte ich ehrlich, man müsse entweder ein Mathegenie sein oder seit seinem fünften Lebensjahr programmieren. Aber weißt du, was meine Perspektive komplett verändert hat? Programmieren ist genau so, wie eine neue Sprache lernen. Du beginnst mit „Hallo“ und „Danke“, arbeitest dich hoch bis zum Kaffeebestellen, und ehe du dich versiehst, führst du tiefgründige philosophische Gespräche! Nur dass du in diesem Fall mit Computern sprichst, und ganz ehrlich? Die sind die geduldigsten Gesprächspartner, die du je haben wirst – sie beurteilen deine Fehler nie und freuen sich immer, es nochmal zu versuchen! -Heute werden wir die unglaublichen Werkzeuge erkunden, die moderne Webentwicklung nicht nur möglich, sondern richtig süchtig machend machen. Ich spreche von genau denselben Editoren, Browsern und Workflows, die Entwickler bei Netflix, Spotify und deinem Lieblings-Indie-App-Studio jeden einzelnen Tag verwenden. Und hier kommt der Teil, der dich einen Freudentanz machen lässt: Die meisten dieser professionellen, industrieweiten Werkzeuge sind komplett kostenlos! +Heute erkunden wir die unglaublichen Werkzeuge, die moderne Webentwicklung nicht nur möglich machen, sondern richtig süchtig. Ich rede von genau den gleichen Editoren, Browsern und Workflows, die Entwickler bei Netflix, Spotify und deinem liebsten Indie-App-Studio jeden Tag nutzen. Und jetzt kommt der Teil, der dich vor Freude tanzen lässt: Die meisten dieser professionellen, branchenüblichen Tools sind komplett kostenlos! ![Intro Programming](../../../../translated_images/de/webdev101-programming.d6e3f98e61ac4bff.webp) > Sketchnote von [Tomomi Imura](https://twitter.com/girlie_mac) ```mermaid journey - title Deine Programmierreise heute + title Deine Programmierreise Heute section Entdecken Was ist Programmierung: 5: You Programmiersprachen: 4: You Werkzeugübersicht: 5: You section Erkunden Code-Editoren: 4: You - Browser & Entwicklertools: 5: You + Browser & DevTools: 5: You Kommandozeile: 3: You section Üben Sprachdetektiv: 4: You Werkzeugerkundung: 5: You - Community-Verbindung: 5: You + Gemeinschaftsverbindung: 5: You ``` -## Lass uns sehen, was du schon weißt! +## Schauen wir mal, was du schon weißt! -Bevor wir in den Spaß eintauchen, bin ich neugierig – was weißt du schon über diese Programmierwelt? Und hör zu, wenn du diese Fragen siehst und denkst: „Ich habe buchstäblich keinen Schimmer von irgendwas“, dann ist das nicht nur okay, das ist perfekt! Das bedeutet, du bist genau am richtigen Ort. Denk an dieses Quiz wie an das Aufwärmen vor einem Workout – wir bereiten nur die Gehirnmuskeln vor! - -[Mach das Pre-Lesson-Quiz](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) +Bevor wir in den Spaß starten, interessiert mich: Was weißt du schon über diese Programmierwelt? Und hör zu, falls du dir jetzt denkst „Ich habe tatsächlich keinen Schimmer von alledem“, ist das nicht nur okay, sondern perfekt! Das bedeutet, du bist genau richtig hier. Betrachte dieses Quiz wie das Dehnen vor dem Workout – wir wärmen nur diese Denkmuskeln auf! +[Mach das Pre-Lesson-Quiz](https://ff-quizzes.netlify.app/web/) ## Das Abenteuer, auf das wir uns gemeinsam begeben -Okay, ich bin wirklich voller Vorfreude, was wir heute erkunden werden! Im Ernst, ich wünschte, ich könnte dein Gesicht sehen, wenn einige dieser Konzepte Klick machen. Hier ist die unglaubliche Reise, auf die wir uns begeben: +Okay, ich freue mich wirklich riesig auf das, was wir heute entdecken werden! Ehrlich, ich wünschte, ich könnte dein Gesicht sehen, wenn dir mancher dieser Konzepte „klick“ macht. Das ist die unglaubliche Reise, auf die wir gemeinsam gehen: -- **Was Programmieren eigentlich ist (und warum es das coolste überhaupt ist!)** – Wir werden entdecken, wie Code buchstäblich die unsichtbare Magie ist, die alles um dich herum antreibt, vom Wecker, der irgendwie weiß, dass Montagmorgen ist, bis hin zum Algorithmus, der deine Netflix-Empfehlungen perfekt kuratiert -- **Programmiersprachen und ihre erstaunlichen Persönlichkeiten** – Stell dir vor, du gehst auf eine Party, bei der jede Person ganz andere Superkräfte und Problemlösungsmethoden hat. So ist die Welt der Programmiersprachen, und du wirst es lieben, sie kennenzulernen! -- **Die grundlegenden Bausteine, die digitale Magie möglich machen** – Stell sie dir als das ultimative kreative LEGO-Set vor. Sobald du verstehst, wie diese Teile zusammenpassen, wirst du erkennen, dass du buchstäblich alles bauen kannst, was deine Fantasie träumt -- **Professionelle Werkzeuge, die dir das Gefühl geben, gerade einen Zauberstab in die Hand gelegt bekommen zu haben** – Ich übertreibe nicht – diese Tools lassen dich wirklich fühlen, als hättest du Superkräfte, und das Beste? Es sind genau dieselben, die die Profis verwenden! +- **Was Programmieren eigentlich ist (und warum es das coolste überhaupt ist!)** – Wir werden entdecken, wie Code buchstäblich die unsichtbare Magie ist, die alles um dich herum antreibt, von dem Wecker, der irgendwie weiß, dass Montagmorgen ist, bis zum Algorithmus, der deine Netflix-Empfehlungen perfekt kuratiert +- **Programmiersprachen und ihre fantastischen Persönlichkeiten** – Stell dir vor, du betrittst eine Party, bei der jede Person ganz unterschiedliche Superkräfte und Lösungswege hat. So ist die Welt der Programmiersprachen, und du wirst sie lieben lernen! +- **Die grundlegenden Bausteine, die digitale Magie ermöglichen** – Denk daran wie das ultimative kreative LEGO-Set. Sobald du verstehst, wie diese Teile zusammenpassen, wirst du merken, dass du buchstäblich alles bauen kannst, was deine Fantasie träumen lässt +- **Professionelle Werkzeuge, die dir das Gefühl geben, gerade einen Zauberstab in die Hand bekommen zu haben** – Ich übertreibe nicht – diese Tools werden dich wirklich wie einen Superhelden fühlen lassen, und das Beste? Es sind genau die, die Profis nutzen! -> 💡 **Hier ist das Wichtigste:** Versuch heute nicht einmal, alles auswendig zu lernen! Im Moment sollst du nur das Feuer der Begeisterung spüren, was alles möglich ist. Die Details bleiben ganz natürlich hängen, während wir zusammen üben – so funktioniert echtes Lernen! +> 💡 **Hier ist die Sache**: Versuch nicht heute alles auswendig zu lernen! Im Moment will ich nur, dass du diesen Funken Aufregung spürst, was möglich ist. Die Details wirst du automatisch mit der Zeit lernen – so funktioniert echtes Lernen! -> Du kannst diese Lektion auch auf [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon) machen! +> Du kannst diese Lektion auch auf [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon) machen! ## Was genau *ist* eigentlich Programmieren? -Okay, packen wir die Millionen-Dollar-Frage an: Was ist Programmieren wirklich? +Okay, jetzt die Millionen-Dollar-Frage: Was ist Programmieren wirklich? -Ich erzähle dir eine Geschichte, die meine Sicht darauf komplett verändert hat. Letzte Woche habe ich versucht, meiner Mutter zu erklären, wie man unsere neue Smart-TV-Fernbedienung benutzt. Ich ertappte mich dabei zu sagen: „Drück den roten Knopf, aber nicht den großen roten Knopf, den kleinen roten Knopf links... nein, deine andere linke Seite... okay, jetzt halt ihn zwei Sekunden gedrückt, nicht eine, nicht drei...“ Kommt dir das bekannt vor? 😅 +Ich erzähle dir eine Geschichte, die meine Sichtweise komplett verändert hat. Letzte Woche wollte ich meiner Mutter erklären, wie man unsere neue Smart-TV-Fernbedienung benutzt. Ich ertappte mich dabei, Dinge zu sagen wie „Drück den roten Knopf, aber nicht den großen roten Knopf, den kleinen roten Knopf links… nein, dein anderes links… okay, jetzt halt ihn zwei Sekunden gedrückt, nicht eins, nicht drei…“ Kommt dir das bekannt vor? 😅 -Das ist Programmieren! Es ist die Kunst, unglaublich detaillierte, Schritt-für-Schritt-Anweisungen zu geben für etwas, das sehr mächtig ist, aber alles perfekt erklärt bekommen muss. Nur dass du hier nicht deiner Mutter erklärst (die fragen könnte: „Welcher rote Knopf?!“), sondern einem Computer (der genau das macht, was du sagst – auch wenn das, was du gesagt hast, nicht ganz das ist, was du meintest). +Das ist Programmieren! Es ist die Kunst, extrem detaillierte Schritt-für-Schritt-Anweisungen zu geben an etwas, das sehr mächtig ist, aber alles perfekt erklärt bekommen muss. Nur dass du nicht deiner Mutter erklärst (die fragen könnte „Welchen roten Knopf?!“), sondern einem Computer (der genau das tut, was du sagst, auch wenn das nicht genau das war, was du meintest). -Was mich umgehauen hat, als ich das zum ersten Mal gelernt habe: Computer sind im Grunde genommen ziemlich simpel. Sie verstehen buchstäblich nur zwei Dinge – 1 und 0, was im Grunde „ja“ und „nein“ oder „an“ und „aus“ bedeutet. Das war’s! Aber hier wird es magisch – wir müssen nicht in 1en und 0en sprechen, als wären wir in der Matrix. Hier kommen **Programmiersprachen** ins Spiel. Sie sind wie der beste Übersetzer der Welt, der deine vollkommen normalen menschlichen Gedanken in Computersprache übersetzt. +Was mich total beeindruckt hat, als ich das zum ersten Mal verstanden habe: Computer sind eigentlich ziemlich einfach in ihrem Kern. Sie verstehen buchstäblich nur zwei Dinge – 1 und 0, was im Grunde nur „Ja“ und „Nein“ oder „An“ und „Aus“ bedeutet. Das war’s! Aber hier wird es magisch – wir müssen nicht in 1en und 0en reden wie in der Matrix. Dafür gibt es **Programmiersprachen**. Die sind wie der beste Übersetzer der Welt, der deine ganz normalen menschlichen Gedanken in Computersprache übersetzt. -Und hier ist das, was mir jeden Morgen echte Gänsehaut bereitet: Buchstäblich *alles* Digitale in deinem Leben begann mit jemandem genau wie dir, wahrscheinlich im Schlafanzug mit einer Tasse Kaffee, der Code auf seinem Laptop tippte. Dieser Instagram-Filter, der dich makellos aussehen lässt? Jemand hat den Code dafür geschrieben. Die Empfehlung, die dich zu deinem neuen Lieblingssong geführt hat? Ein Entwickler hat diesen Algorithmus gebaut. Die App, die dir hilft, die Rechnung fürs Abendessen mit Freunden zu teilen? Jep, jemand dachte: „Das ist nervig, das kann ich bestimmt reparieren“ – und dann hat er es getan! +Und hier ist etwas, das mir morgens immer noch echte Gänsehaut bereitet: Buchstäblich *alles* Digitale in deinem Leben hat irgendwann mit jemandem angefangen, der genau so war wie du, wahrscheinlich im Pyjama mit einer Tasse Kaffee, der Code auf seinem Laptop getippt hat. Dieser Instagram-Filter, der dich makellos aussehen lässt? Jemand hat den programmiert. Die Empfehlung, die dich zu deinem neuen Lieblingslied geführt hat? Ein Entwickler hat diesen Algorithmus gebaut. Die App, mit der du Rechnungen mit Freunden teilst? Ja, jemand hat gedacht „Das nervt, ich könnte das wohl lösen“ und dann... hat er es getan! -Wenn du programmieren lernst, lernst du nicht nur eine neue Fähigkeit – du wirst Teil dieser unglaublichen Community von Problemlösern, die ihre Tage damit verbringen zu denken: „Was, wenn ich etwas bauen könnte, das jemanden den Tag nur ein bisschen besser macht?“ Mal ehrlich, gibt es was Cooleres? +Wenn du programmierst, lernst du nicht nur eine neue Fähigkeit – du wirst Teil dieser unglaublichen Community von Problemlösern, die ihre Tage damit verbringen, zu denken: „Was wäre, wenn ich etwas bauen könnte, das jemandem den Tag ein kleines bisschen besser macht?“ Gibt es ehrlich etwas Cooleres? -✅ **Spaß-Fakt-Suche**: Hier ist etwas super Cooles zum Nachschlagen, wenn du mal Zeit hast – wer war deiner Meinung nach die weltweit erste Computerprogrammiererin? Ich gebe dir einen Tipp: Es ist vielleicht nicht die Person, die du erwartest! Die Geschichte dahinter ist absolut faszinierend und zeigt, dass Programmieren schon immer um kreatives Problemlösen und Querdenken ging. +✅ **Spaß-Fakt-Suche**: Hier ist etwas super Cooles, das du dir anschauen kannst, wenn du mal eine freie Minute hast – Wer war wohl der erste Computerprogrammierer der Welt? Ich gebe dir einen Tipp: Es ist vielleicht nicht die Person, die du erwartest! Die Geschichte hinter dieser Person ist faszinierend und zeigt, dass Programmieren immer schon kreatives Problemlösen und unkonventionelles Denken war. -### 🧠 **Kurzer Check: Wie fühlst du dich?** +### 🧠 **Gefühls-Check: Wie fühlst du dich?** -**Nimm dir einen Moment zum Nachdenken:** -- Macht dir der Gedanke „Anweisungen an Computer geben“ jetzt Sinn? -- Fallen dir tägliche Aufgaben ein, die du gerne mit Programmierung automatisieren würdest? -- Welche Fragen gehen dir gerade zum Thema Programmieren durch den Kopf? +**Nimm dir einen Moment:** +- Macht die Idee von „Anweisungen an Computer geben“ jetzt für dich Sinn? +- Kannst du dir eine tägliche Aufgabe vorstellen, die du gerne mit Programmieren automatisieren würdest? +- Welche Fragen schwirren dir so im Kopf durch diesen Programmierkram? -> **Denk daran:** Es ist total normal, wenn dir einige Konzepte gerade noch etwas verwirrend vorkommen. Programmieren zu lernen ist wie eine neue Sprache lernen – das Gehirn braucht Zeit, um neue Verbindungen zu knüpfen. Du machst das super! +> **Erinnere dich:** Es ist total normal, wenn manche Konzepte im Moment noch verschwommen sind. Programmieren zu lernen ist wie eine neue Sprache lernen – dein Gehirn braucht Zeit, um die neuronalen Verbindungen zu schaffen. Du machst das großartig! -## Programmiersprachen sind wie verschiedene Zaubergeschmäcker +## Programmiersprachen sind wie verschiedene Geschmacksrichtungen von Magie -Okay, das klingt jetzt vielleicht komisch, aber bleib dran – Programmiersprachen sind wie verschiedene Musikrichtungen. Überleg mal: Es gibt Jazz, der weich und improvisierend ist, Rock, der kraftvoll und direkt ist, Klassik, die elegant und strukturiert ist, und Hip-Hop, der kreativ und ausdrucksstark ist. Jede Stilrichtung hat ihre eigene Atmosphäre, ihre eigene Community von leidenschaftlichen Fans, und jede ist perfekt für verschiedene Stimmungen und Anlässe. +Okay, das klingt jetzt komisch, aber bleib dran – Programmiersprachen sind wie verschiedene Musikrichtungen. Denk mal drüber nach: Es gibt Jazz, der smooth und improvisiert ist, Rock, kraftvoll und direkt, Klassik, elegant und strukturiert, und Hip-Hop, kreativ und expressiv. Jede Stilrichtung hat ihre eigene Stimmung, ihre leidenschaftliche Fangemeinde und ist für unterschiedliche Stimmungen und Anlässe perfekt. -Programmiersprachen funktionieren genau so! Du würdest nicht dieselbe Sprache verwenden, um ein lustiges Mobile-Spiel zu bauen, wie du sie nutzen würdest, um riesige Datenmengen zum Klima zu verarbeiten – genauso wenig würdest du Death Metal im Yoga-Kurs hören (naja, die meisten Yoga-Kurse jedenfalls! 😄). +Programmiersprachen funktionieren genau so! Du würdest nicht dieselbe Sprache benutzen, um ein lustiges Mobile Game zu machen, wie um riesige Klima-Datenmengen zu verarbeiten, genau so wenig wie du Death Metal beim Yoga hören würdest (naja, bei den meisten Yogakursen jedenfalls! 😄). -Aber hier kommt das, was mich jedes Mal umhaut, wenn ich drüber nachdenke: Diese Sprachen sind wie der geduldigste, brillanteste Dolmetscher der Welt, der direkt neben dir sitzt. Du kannst deine Ideen auf eine Weise ausdrücken, die deinem menschlichen Gehirn natürlich vorkommt, und sie erledigen all die unglaublich komplexe Arbeit, das in die 1en und 0en zu übersetzen, die Computer tatsächlich sprechen. Es ist wie ein Freund, der perfekt zweisprachig ist in „menschlicher Kreativität“ und „Computerlogik“ – und nie müde wird, nie Kaffeepausen braucht und dich auch nicht beurteilt, wenn du dieselbe Frage zweimal stellst! +Aber was mich jedes Mal echt umhaut: Diese Sprachen sind wie der geduldigste und brillante Dolmetscher, der direkt neben dir sitzt. Du kannst deine Ideen so ausdrücken, dass es deinem menschlichen Gehirn natürlich vorkommt, und sie übernehmen die unglaublich komplexe Übersetzung in die 1en und 0en, die Computer tatsächlich sprechen. Es ist wie ein Freund, der perfekt „menschliche Kreativität“ und „Computerlogik“ beherrscht – und der nie müde wird, keine Kaffeepausen braucht und dich nie dafür verurteilt, dieselbe Frage zweimal zu stellen! -### Beliebte Programmiersprachen und ihre Anwendungsgebiete +### Beliebte Programmiersprachen und ihre Einsatzbereiche ```mermaid mindmap @@ -113,7 +112,7 @@ mindmap Systeme & Leistung C++ Spiele - Leistungs-kritisch + Leistungs kritisch Rust Speichersicherheit Systemprogrammierung @@ -121,41 +120,41 @@ mindmap Cloud-Dienste Skalierbares Backend ``` -| Sprache | Am besten geeignet für | Warum sie beliebt ist | -|----------|--------------------------------------|---------------------------------------------| -| **JavaScript** | Webentwicklung, Benutzeroberflächen | Läuft in Browsern und ermöglicht interaktive Websites | -| **Python** | Datenwissenschaft, Automatisierung, KI | Leicht zu lesen und zu lernen, mächtige Bibliotheken | +| Sprache | Am besten geeignet für | Warum es beliebt ist | +|----------|----------|------------------| +| **JavaScript** | Webentwicklung, Benutzeroberflächen | Läuft in Browsern und treibt interaktive Webseiten an | +| **Python** | Datenwissenschaft, Automatisierung, KI | Einfach zu lesen und zu lernen, leistungsstarke Bibliotheken | | **Java** | Unternehmensanwendungen, Android-Apps | Plattformunabhängig, robust für große Systeme | | **C#** | Windows-Anwendungen, Spieleentwicklung | Starke Unterstützung im Microsoft-Ökosystem | -| **Go** | Cloud-Services, Backend-Systeme | Schnell, einfach, für moderne IT konzipiert | +| **Go** | Cloud Services, Backend-Systeme | Schnell, einfach, für moderne IT entwickelt | ### Hochsprachen vs. Maschinensprachen -Okay, das war ehrlich gesagt das Konzept, das mein Gehirn ursprünglich zerschmettert hat, als ich angefangen habe. Deshalb teile ich die Analogie, die das endlich für mich erklärt hat – und ich hoffe sehr, dass sie auch dir hilft! +Okay, das war ehrlich gesagt das Konzept, das mich anfangs echt überfordert hat, deshalb teile ich dir die Analogie, die es für mich klick machen ließ – und ich hoffe, sie hilft dir auch! -Stell dir vor, du bist in einem Land, dessen Sprache du nicht sprichst und brauchst dringend eine Toilette (wir waren doch alle schon mal dort, oder? 😅): +Stell dir vor, du bist in einem Land, dessen Sprache du nicht sprichst, und musst dringend eine Toilette finden (wir waren doch alle schon mal dort, oder? 😅): -- **Low-Level-Programmierung** ist wie das Erlernen des lokalen Dialekts so gut, dass du mit der Großmutter, die an der Ecke Obst verkauft, plaudern kannst – mit kulturellen Anspielungen, Slang und Insider-Witzen, die nur jemand versteht, der dort aufgewachsen ist. Super beeindruckend und unglaublich effizient... wenn du fließend bist! Aber ziemlich überwältigend, wenn du einfach nur eine Toilette finden willst. +- **Low-level Programmierung** ist, als würdest du den lokalen Dialekt so gut lernen, dass du mit der Großmutter am Obststand plaudern kannst, inklusive kultureller Referenzen, regionalem Slang und Insiderwitzen, die nur jemand versteht, der dort aufgewachsen ist. Super beeindruckend und sehr effizient... wenn du zufällig fließend bist! Aber ziemlich überwältigend, wenn du nur eine Toilette suchst. -- **High-Level-Programmierung** ist wie dieser fantastische lokale Freund, der dich einfach versteht. Du kannst auf Englisch sagen „Ich muss dringend zur Toilette“ und er macht die ganze kulturelle Übersetzung und gibt dir eine Wegbeschreibung, die für dein nicht-lokales Gehirn völlig Sinn macht. +- **High-level Programmierung** ist wie dieser wunderbare lokale Freund, der dich einfach versteht. Du sagst „Ich muss dringend eine Toilette finden“ auf einfachem Englisch, und er kümmert sich um alle kulturellen Übersetzungen und gibt dir eine Wegbeschreibung, die für dein nicht-lokales Gehirn total Sinn macht. -In Programmierbegriffen heißt das: -- **Low-Level-Sprachen** (wie Assembly oder C) erlauben dir unglaublich detaillierte Gespräche mit der tatsächlichen Hardware des Computers, aber du musst wie eine Maschine denken, was... naja, sagen wir mal, ein großer mentaler Sprung ist! -- **High-Level-Sprachen** (wie JavaScript, Python oder C#) erlauben dir, wie ein Mensch zu denken, während sie den ganzen Maschinencode hinter den Kulissen erledigen. Plus: Sie haben unglaublich einladende Communities voller Leute, die sich daran erinnern, wie es war, neu zu sein, und wirklich helfen wollen! +In Programmierbegriffen: +- **Low-level Sprachen** (wie Assembly oder C) erlauben es dir, extrem detaillierte Unterhaltungen mit der Hardware des Computers zu führen, aber du musst wie eine Maschine denken, was... naja, eine ziemlich große Umstellung ist! +- **High-level Sprachen** (wie JavaScript, Python oder C#) erlauben es dir, wie ein Mensch zu denken, während sie die Maschinensprache hinter den Kulissen übernehmen. Außerdem gibt es riesige, einladende Communities voller Leute, die sich daran erinnern, wie es war, neu zu sein, und die dir wirklich helfen wollen! -Rate mal, womit ich dir empfehle zu starten? 😉 Hochsprachen sind wie Stützräder, die du eigentlich nie abnehmen willst, weil sie das ganze Erlebnis viel angenehmer machen! +Rate mal, mit welchen ich empfehle zu starten? 😉 Hochsprachen sind wie Stützräder, die du nie wirklich abmachen willst, weil sie das ganze Erlebnis einfach so viel angenehmer machen! ```mermaid flowchart TB - A["👤 Menschlicher Gedanke:
'Ich möchte Fibonacci-Zahlen berechnen'"] --> B{Programmiersprachniveau wählen} + A["👤 Menschlicher Gedanke:
'Ich möchte Fibonacci-Zahlen berechnen'"] --> B{Wählen Sie die Sprachebene} - B -->|Hoch-Level| C["🌟 JavaScript/Python
Einfach zu lesen und zu schreiben"] - B -->|Niedrig-Level| D["⚙️ Assembler/C
Direkte Hardwaresteuerung"] + B -->|Hochsprachen| C["🌟 JavaScript/Python
Einfach zu lesen und zu schreiben"] + B -->|Maschinennah| D["⚙️ Assembly/C
Direkte Hardwaresteuerung"] - C --> E["📝 Schreiben: fibonacci(10)"] - D --> F["📝 Schreiben: mov r0,#00
sub r0,r0,#01"] + C --> E["📝 Schreibe: fibonacci(10)"] + D --> F["📝 Schreibe: mov r0,#00
sub r0,r0,#01"] - E --> G["🤖 Computer-Verständnis:
Übersetzer übernimmt Komplexität"] + E --> G["🤖 Computerverständnis:
Übersetzer übernimmt Komplexität"] F --> G G --> H["💻 Gleiches Ergebnis:
0, 1, 1, 2, 3, 5, 8, 13..."] @@ -164,15 +163,15 @@ flowchart TB style D fill:#fff3e0 style H fill:#e8f5e8 ``` -### Lass mich dir zeigen, warum Hochsprachen viel freundlicher sind +### Ich zeige dir, warum Hochsprachen viel freundlicher sind -Okay, gleich zeige ich dir etwas, das perfekt demonstriert, warum ich mich in Hochsprachen verliebt habe. Aber zuerst – ich brauche dein Versprechen. Wenn du das erste Code-Beispiel siehst, gerate nicht in Panik! Es soll einschüchternd aussehen. Genau das ist der Punkt! +Okay, ich zeige dir jetzt etwas, das perfekt zeigt, warum ich mich in Hochsprachen verliebt habe, aber zuerst – ich brauche dein Versprechen. Wenn du das erste Codebeispiel siehst, gerate nicht in Panik! Es soll einschüchternd aussehen. Genau das will ich zeigen! -Wir werden dieselbe Aufgabe in zwei komplett unterschiedlichen Stilen ansehen. Beide erstellen eine sogenannte Fibonacci-Folge – ein wunderschönes mathematisches Muster, bei dem jede Zahl die Summe der beiden vorherigen ist: 0, 1, 1, 2, 3, 5, 8, 13... (Spaßfakt: Dieses Muster findest du buchstäblich überall in der Natur – Sonnenblumensamen-Spiralen, Tannenzapfenmuster, sogar wie Galaxien entstehen!) +Wir betrachten dieselbe Aufgabe in zwei völlig unterschiedlichen Stilen. Beide erzeugen die sogenannte Fibonacci-Folge – ein wunderschönes mathematisches Muster, bei dem jede Zahl die Summe der beiden vorherigen ist: 0, 1, 1, 2, 3, 5, 8, 13... (Fun Fact: Dieses Muster findet sich buchstäblich überall in der Natur – Sonnenblumenkerne in Spiralen, Zapfenmuster, sogar wie Galaxien entstehen!) Bereit, den Unterschied zu sehen? Los geht’s! -**Hochsprache (JavaScript) – menschenfreundlich:** +**Hochsprache (JavaScript) – Menschlich verständlich:** ```javascript // Schritt 1: Grundlegende Fibonacci-Einrichtung @@ -184,10 +183,10 @@ console.log('Fibonacci sequence:'); ``` **Das macht dieser Code:** -- **Deklariert** eine Konstante, um festzulegen, wie viele Fibonacci-Zahlen wir generieren wollen -- **Initialisiert** zwei Variablen, um die aktuelle und nächste Zahl in der Folge zu verfolgen -- **Setzt** die Anfangswerte (0 und 1), die das Fibonacci-Muster definieren -- **Zeigt** eine Überschrift an, um die Ausgabe zu kennzeichnen +- **Deklariert** eine Konstante, die festlegt, wie viele Fibonacci-Zahlen wir erzeugen wollen +- **Initialisiert** zwei Variablen, um die aktuelle und die nächste Zahl der Folge zu verfolgen +- **Setzt** die Startwerte (0 und 1), die das Fibonacci-Muster definieren +- **Zeigt** eine Überschrift an, um unsere Ausgabe zu kennzeichnen ```javascript // Schritt 2: Erzeuge die Sequenz mit einer Schleife @@ -201,11 +200,11 @@ for (let i = 0; i < fibonacciCount; i++) { } ``` -**So läuft das hier ab:** -- **Schleife** über jede Position in unserer Folge mit einer `for`-Schleife -- **Zeigt** jede Zahl mit ihrer Position unter Verwendung von Template Literal Formatierung an -- **Berechnet** die nächste Fibonacci-Zahl durch Addition der aktuellen und nächsten Werte -- **Aktualisiert** unsere Tracking-Variablen für die nächste Iteration +**So entsteht das hier:** +- **Schleifen** wir durch jede Position in unserer Folge mit einer `for`-Schleife +- **Geben** wir jede Zahl mit ihrer Position formatiert aus +- **Berechnen** wir die nächste Fibonacci-Zahl durch Addition der aktuellen und nächsten Werte +- **Aktualisieren** wir unsere Variablen, um zur nächsten Iteration weiterzugehen ```javascript // Schritt 3: Moderner funktionaler Ansatz @@ -226,11 +225,11 @@ console.log(fibSequence); **Oben haben wir:** - **Eine wiederverwendbare Funktion** mit moderner Pfeilfunktion-Syntax erstellt -- **Ein Array gebaut**, um die gesamte Folge zu speichern statt einzelnen Ausgabezeilen -- **Array-Indizierung verwendet**, um jede neue Zahl aus vorherigen Werten zu berechnen -- **Die komplette Folge zurückgegeben**, um sie flexibel an anderen Stellen zu nutzen +- **Ein Array gebaut,** um die komplette Folge zu speichern anstatt sie einzeln auszugeben +- **Array-Indizes genutzt,** um jede neue Zahl aus vorherigen Werten zu berechnen +- **Die vollständige Folge zurückgegeben,** damit wir sie flexibel anderswo nutzen können -**Niedrigsprache (ARM Assembly) – computerfreundlich:** +**Niedrigsprache (ARM Assembly) – Computer-freundlich:** ```assembly area ascen,code,readonly @@ -257,28 +256,27 @@ back add r0,r1 end ``` -Beachte, wie die JavaScript-Version fast wie englische Anweisungen liest, während die Assembly-Version kryptische Befehle nutzt, die direkt den Prozessor des Computers steuern. Beide lösen exakt dieselbe Aufgabe, aber die Hochsprache ist für Menschen viel leichter zu verstehen, zu schreiben und zu pflegen. - -**Wichtige Unterschiede, die dir auffallen werden:** -- **Lesbarkeit**: JavaScript verwendet beschreibende Namen wie `fibonacciCount`, während Assembly kryptische Bezeichnungen wie `r0`, `r1` nutzt -- **Kommentare**: Hochrangige Sprachen fördern erklärende Kommentare, die den Code selbstdokumentierend machen -- **Struktur**: Der logische Ablauf von JavaScript entspricht der Art, wie Menschen Schritt für Schritt über Probleme nachdenken -- **Wartung**: Das Aktualisieren der JavaScript-Version für verschiedene Anforderungen ist einfach und klar +Beachte, wie die JavaScript-Version fast wie englische Anweisungen liest, während die Assembly-Version kryptische Befehle nutzt, die direkt den Prozessor steuern. Beide erledigen exakt dieselbe Aufgabe, aber die Hochsprache ist für Menschen viel leichter zu verstehen, zu schreiben und zu warten. -✅ **Über die Fibonacci-Folge**: Dieses absolut wunderschöne Zahlenmuster (bei dem jede Zahl der Summe der beiden vorhergehenden entspricht: 0, 1, 1, 2, 3, 5, 8...) taucht buchstäblich *überall* in der Natur auf! Du findest es in Sonnenblumenwirbeln, Tannenzapfenmustern, der Art, wie Nautilus-Schalen sich wölben, und sogar darin, wie Baumzweige wachsen. Es ist ziemlich verblüffend, wie Mathematik und Programmierung uns helfen können, die Muster zu verstehen und nachzubilden, die die Natur nutzt, um Schönheit zu erschaffen! +**Wesentliche Unterschiede, die dir auffallen werden:** +- **Lesbarkeit**: JavaScript verwendet beschreibende Namen wie `fibonacciCount`, während Assembly kryptische Bezeichnungen wie `r0`, `r1` nutzt +- **Kommentare**: Hochsprachen ermutigen zu erklärenden Kommentaren, die den Code selbstdokumentierend machen +- **Struktur**: Der logische Ablauf von JavaScript entspricht, wie Menschen Schritt-für-Schritt über Probleme nachdenken +- **Wartung**: Das Aktualisieren der JavaScript-Version für verschiedene Anforderungen ist unkompliziert und klar +✅ **Über die Fibonacci-Folge**: Dieses absolut wunderschöne Zahlenmuster (bei dem jede Zahl die Summe der beiden vorherigen ist: 0, 1, 1, 2, 3, 5, 8 ...) findet sich buchstäblich *überall* in der Natur! Du findest es in Sonnenblumen-Spiralen, Tannenzapfen-Mustern, der Form von Nautilus-Schalen und sogar im Wachstum von Baumzweigen. Es ist ziemlich verblüffend, wie Mathematik und Code uns helfen können, die Muster zu verstehen und nachzubilden, die die Natur nutzt, um Schönheit zu erschaffen! ## Die Bausteine, die die Magie möglich machen -Also, jetzt wo du gesehen hast, wie Programmiersprachen in Aktion aussehen, lass uns die grundlegenden Bausteine anschauen, aus denen buchstäblich jedes jemals geschriebene Programm besteht. Denk daran wie an die wichtigsten Zutaten in deinem Lieblingsrezept – sobald du verstehst, was jede einzelne tut, wirst du in fast jeder Sprache Code lesen und schreiben können! +Okay, jetzt, wo du gesehen hast, wie Programmiersprachen in Aktion aussehen, lass uns die grundlegenden Bausteine zerlegen, aus denen buchstäblich jedes jemals geschriebene Programm besteht. Denk an sie als die wesentlichen Zutaten in deinem Lieblingsrezept – wenn du verstehst, was jede einzelne bewirkt, kannst du Code in so gut wie jeder Sprache lesen und schreiben! -Das ist ein bisschen wie die Grammatik des Programmierens lernen. Erinnerst du dich noch aus der Schule, als du über Substantive, Verben und Satzbau gelernt hast? Programmieren hat seine eigene Grammatikversion, und ehrlich gesagt ist sie viel logischer und nachsichtiger als die englische Grammatik je war! 😄 +Das ist ein bisschen so, als würdest du die Grammatik des Programmierens lernen. Erinnerst du dich noch aus der Schule, als du Nomen, Verben und wie man Sätze bildet gelernt hast? Programmieren hat seine eigene Grammatik, und ehrlich gesagt ist sie viel logischer und nachsichtiger als die englische Grammatik! 😄 ### Anweisungen: Die Schritt-für-Schritt-Anleitungen -Fangen wir mit **Anweisungen** an – sie sind wie einzelne Sätze in einem Gespräch mit deinem Computer. Jede Anweisung sagt dem Computer, genau eine Sache zu tun, ähnlich wie Wegbeschreibungen: „Hier links abbiegen“, „An der roten Ampel stoppen“, „Auf diesem Parkplatz parken“. +Fangen wir mit **Anweisungen (Statements)** an – das sind einzelne Sätze in einer Konversation mit deinem Computer. Jede Anweisung sagt dem Computer, genau eine Sache zu tun, ähnlich wie Wegbeschreibungen: „Hier links abbiegen“, „An der roten Ampel anhalten“, „Auf diesem Parkplatz parken“. -Was ich an Anweisungen liebe, ist wie lesbar sie meistens sind. Schau dir das an: +Was ich an Anweisungen liebe, ist, wie meist gut lesbar sie sind. Schau dir das an: ```javascript // Grundlegende Anweisungen, die einzelne Aktionen ausführen @@ -286,31 +284,31 @@ const userName = "Alex"; console.log("Hello, world!"); const sum = 5 + 3; ``` - -**Das macht dieser Code:** -- **Deklariert** eine konstante Variable, um den Namen eines Benutzers zu speichern -- **Zeigt** eine Begrüßungsnachricht in der Konsolenausgabe an -- **Berechnet** und speichert das Ergebnis einer mathematischen Operation + +**Das macht dieser Code:** +- **Deklariert** eine Konstantenvariable, um den Namen eines Nutzers zu speichern +- **Zeigt** eine Begrüßungsnachricht in der Konsole an +- **Berechnet** und speichert das Ergebnis einer mathematischen Operation ```javascript // Anweisungen, die mit Webseiten interagieren document.title = "My Awesome Website"; document.body.style.backgroundColor = "lightblue"; ``` - -**Schritt für Schritt passiert hier:** -- **Ändert** den Titel der Webseite, der im Browser-Tab erscheint -- **Verändert** die Hintergrundfarbe des gesamten Seitenkörpers + +**Schritt für Schritt passiert Folgendes:** +- **Ändert** den Titel der Webseite, der im Browser-Tab angezeigt wird +- **Verändert** die Hintergrundfarbe des gesamten Seitenkörpers ### Variablen: Das Speichersystem deines Programms -Okay, **Variablen** sind ehrlich gesagt eines meiner absoluten Lieblingskonzepte zum Lehren, weil sie so sehr wie Dinge sind, die du jeden Tag benutzt! +Okay, **Variablen** sind ehrlich gesagt eines meiner absoluten Lieblingsthemen zum Erklären, weil sie so sehr wie Dinge funktionieren, die du jeden Tag benutzt! -Denk mal an dein Telefonbuch. Du merkst dir nicht die Telefonnummern aller Leute – stattdessen speicherst du „Mama“, „Beste Freundin“ oder „Pizza-Lieferdienst, der bis 2 Uhr nachts liefert“ und lässt dein Telefon die tatsächlichen Nummern merken. Variablen funktionieren genauso! Sie sind wie beschriftete Behälter, in denen dein Programm Informationen speichern und später mit einem aussagekräftigen Namen abrufen kann. +Denk mal an dein Telefon-Adressbuch. Du merkst dir nicht jede Telefonnummer – stattdessen speicherst du „Mama“, „Beste Freundin“ oder „Pizzalieferdienst bis 2 Uhr morgens“ und dein Telefon merkt sich die echten Nummern. Variablen funktionieren genau so! Sie sind wie beschriftete Behälter, in denen dein Programm Informationen speichern und später über einen sinnvollen Namen wiederfinden kann. -Das Coole ist: Variablen können sich ändern, während dein Programm läuft (daher der Name „Variable“ – siehst du, was die da gemacht haben?). So wie du den Kontakt für den Pizza-Lieferdienst updatest, wenn du einen noch besseren findest, können Variablen aktualisiert werden, wenn dein Programm neue Informationen lernt oder sich die Situation ändert! +Das Coole daran: Variablen können sich ändern, während dein Programm läuft (daher der Name „Variable“ – merkst du, was sie gemacht haben?). Genauso wie du den Pizzalieferdienst-Kontakt aktualisierst, wenn du einen besseren gefunden hast, können Variablen aktualisiert werden, wenn dein Programm neue Informationen lernt oder sich Situationen ändern! -Ich zeige dir, wie wunderschön einfach das sein kann: +Ich zeige dir mal, wie einfach das sein kann: ```javascript // Schritt 1: Erstellen von Basisvariablen @@ -319,12 +317,12 @@ let currentWeather = "sunny"; let temperature = 75; let isRaining = false; ``` - -**Was diese Konzepte bedeuten:** -- **Speichere** unveränderliche Werte in `const` Variablen (wie Name der Webseite) -- **Benutze** `let` für Werte, die sich im Programmverlauf ändern können -- **Weise zu** unterschiedliche Datentypen zu: Strings (Text), Zahlen und Booleans (wahr/falsch) -- **Wähle** beschreibende Namen, die erklären, was jede Variable enthält + +**Verstehen dieser Konzepte:** +- **Speichere** unveränderliche Werte in `const`-Variablen (wie den Site-Namen) +- **Nutze** `let` für Werte, die sich im Programm ändern können +- **Weise** verschiedene Datentypen zu: Strings (Text), Zahlen und Booleans (wahr/falsch) +- **Wähle** beschreibende Namen, die erklären, was jede Variable enthält ```javascript // Schritt 2: Arbeiten mit Objekten, um verwandte Daten zu gruppieren @@ -334,11 +332,11 @@ const weatherData = { windSpeed: 12 }; ``` - -**Oben haben wir:** -- **Ein Objekt erstellt**, um zusammengehörige Wetterinformationen zu gruppieren -- **Mehrere Datenstücke unter einem Variablennamen organisiert** -- **Schlüssel-Wert-Paare verwendet**, um jede Information klar zu beschriften + +**Oben haben wir:** +- **Ein Objekt erstellt**, um zusammengehörige Wetterinformationen zu gruppieren +- **Mehrere Datenstücke** unter einem Variablennamen organisiert +- **Schlüssel-Wert-Paare verwendet**, um jede Information klar zu beschriften ```javascript // Schritt 3: Verwendung und Aktualisierung von Variablen @@ -349,33 +347,33 @@ console.log(`Wind speed: ${weatherData.windSpeed} mph`); currentWeather = "cloudy"; temperature = 68; ``` - -**Hier verstehen wir jeden Teil:** -- **Zeige** Informationen mit Template-Literalen und `${}`-Syntax an -- **Greife auf Objekt-Eigenschaften zu** mit Punktnotation (`weatherData.windSpeed`) -- **Aktualisiere** mit `let` deklarierte Variablen, um sich ändernde Bedingungen darzustellen -- **Kombiniere** mehrere Variablen, um sinnvolle Nachrichten zu erzeugen + +**Schauen wir uns die einzelnen Teile an:** +- **Zeige** Informationen mit Template-Literals und der `${}`-Syntax an +- **Greife zu** auf Objekteigenschaften mit Punktnotation (`weatherData.windSpeed`) +- **Aktualisiere** mit `let` deklarierte Variablen, um veränderte Bedingungen widerzuspiegeln +- **Kombiniere** mehrere Variablen, um sinnvolle Nachrichten zu erstellen ```javascript // Schritt 4: Modernes Destructuring für saubereren Code const { location, humidity } = weatherData; console.log(`${location} humidity: ${humidity}%`); ``` + +**Das musst du wissen:** +- **Extrahiere** bestimmte Eigenschaften aus Objekten mit Destructuring Assignment +- **Erzeuge** automatisch neue Variablen mit den gleichen Namen wie die Objekt-Schlüssel +- **Vereinfache** den Code durch Vermeidung mehrfacher Punktnotation -**Was du wissen musst:** -- **Extrahiere** spezifische Eigenschaften aus Objekten mit Destrukturierungszuweisung -- **Erstelle** automatisch neue Variablen mit den gleichen Namen wie die Objektschlüssel -- **Vereinfache** den Code, indem du sich wiederholende Punktnotation vermeidest - -### Steuerung des Programmflusses: Deinem Programm beibringen, zu denken +### Kontrollfluss: Deinem Programm beibringen zu denken -Okay, hier wird Programmieren wirklich verblüffend! **Kontrollfluss** bedeutet im Grunde, deinem Programm beizubringen, wie es kluge Entscheidungen trifft, genau wie du das jeden Tag ganz selbstverständlich tust. +Das hier ist der Teil, an dem Programmieren absolut verblüffend wird! **Kontrollfluss** bedeutet im Grunde, deinem Programm beizubringen, wie es intelligente Entscheidungen treffen kann, genau wie du es jeden Tag ganz automatisch machst. -Stell dir vor: Heute Morgen hast du bestimmt gedacht: „Wenn es regnet, nehme ich einen Regenschirm. Wenn es kalt ist, ziehe ich eine Jacke an. Wenn ich spät dran bin, überspringe ich das Frühstück und hole mir unterwegs Kaffee.“ Dein Gehirn folgt dieser Wenn-Dann-Logik dutzende Male jeden Tag ganz automatisch! +Stell dir vor: Heute Morgen hast du wahrscheinlich etwa gedacht: „Wenn es regnet, nehme ich einen Regenschirm mit. Wenn es kalt ist, ziehe ich eine Jacke an. Wenn ich spät dran bin, überspringe ich das Frühstück und nehme unterwegs einen Kaffee.“ Dein Gehirn folgt ganz natürlich dieser Wenn-Dann-Logik dutzende Male am Tag! -Das ist es, was Programme intelligent und lebendig wirken lässt, statt nur einem langweiligen, vorhersehbaren Drehbuch zu folgen. Sie können eine Situation betrachten, auswerten, was passiert, und angemessen reagieren. Es ist, als hätten sie ein Gehirn, das sich anpasst und Entscheidungen treffen kann! +Das macht Programme intelligent und lebendig, anstatt dass sie nur einem langweiligen, vorhersehbaren Skript folgen. Sie können eine Situation anschauen, bewerten, was los ist, und angemessen reagieren. Es ist fast so, als würdest du deinem Programm ein Gehirn geben, das sich anpassen und Entscheidungen treffen kann! -Willst du sehen, wie schön das funktioniert? Ich zeige es dir: +Willst du sehen, wie genial das funktioniert? Ich zeige es dir: ```javascript // Schritt 1: Grundlegende bedingte Logik @@ -388,12 +386,12 @@ if (userAge >= 18) { console.log(`You'll be able to vote in ${yearsToWait} year(s).`); } ``` - -**Das macht dieser Code:** -- **Überprüft**, ob das Alter des Benutzers für die Wahlberechtigung ausreicht -- **Führt** verschiedene Codeblöcke basierend aufs Ergebnis der Bedingung aus -- **Berechnet** und zeigt an, wie lange es noch bis zur Wahlberechtigung dauert, falls unter 18 -- **Gibt** für jeden Fall spezifisches, hilfreiches Feedback + +**Das macht dieser Code:** +- **Prüft**, ob das Alter des Nutzers die Wahlberechtigung erfüllt +- **Führt** verschiedene Codeblöcke je nach Bedingungsergebnis aus +- **Berechnet** und zeigt an, wie lange es bis zur Wahlberechtigung dauert, falls unter 18 +- **Gibt** spezifisches, hilfreiches Feedback für jedes Szenario ```javascript // Schritt 2: Mehrere Bedingungen mit logischen Operatoren @@ -408,26 +406,26 @@ if (userAge >= 18 && hasPermission) { console.log("Sorry, you must be at least 16 years old."); } ``` - -**Was hier passiert, im Detail:** -- **Kombiniert** mehrere Bedingungen mit dem `&&` (und) Operator -- **Erstellt** eine Hierarchie von Bedingungen mit `else if` für mehrere Szenarien -- **Behandelt** alle möglichen Fälle mit einer abschließenden `else`-Anweisung -- **Gibt** klares, umsetzbares Feedback für jede Situation + +**Das passiert hier im Detail:** +- **Verknüpft** mehrere Bedingungen mit dem `&&` (und)-Operator +- **Erstellt** eine Hierarchie von Bedingungen mit `else if` für verschiedene Szenarien +- **Erfasst** alle möglichen Fälle mit einem abschließenden `else` +- **Gibt** klar verständliches, hilfreiches Feedback für jede Situation ```javascript -// Schritt 3: Kurzform der Bedingung mit ternärem Operator +// Schritt 3: Prägnante Bedingung mit ternärem Operator const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; console.log(`Status: ${votingStatus}`); ``` - -**Merke dir:** -- **Verwende** den ternären Operator (`? :`) für einfache Zwei-Optionen-Bedingungen -- **Schreibe** zuerst die Bedingung, dann `?`, dann Ergebnis, wenn wahr, dann `:`, dann Ergebnis, wenn falsch -- **Wende** dieses Muster an, wenn du Werte auf Basis von Bedingungen zuweisen willst + +**Das solltest du dir merken:** +- **Nutze** den ternären Operator (`? :`) für einfache Zwei-Option-Bedingungen +- **Schreibe** zuerst die Bedingung, dann `?`, dann die wahre Ausgabe, dann `:`, dann die falsche Ausgabe +- **Verwende** dieses Muster, wenn du Werte basierend auf Bedingungen zuweisen willst ```javascript -// Schritt 4: Umgang mit mehreren speziellen Fällen +// Schritt 4: Umgang mit mehreren spezifischen Fällen const dayOfWeek = "Tuesday"; switch (dayOfWeek) { @@ -446,55 +444,55 @@ switch (dayOfWeek) { console.log("Invalid day of the week"); } ``` + +**Dieser Code macht Folgendes:** +- **Vergleicht** den Variablenwert mit mehreren spezifischen Fällen +- **Fasst** ähnliche Fälle zusammen (Werktage vs. Wochenenden) +- **Führt** den passenden Codeblock aus, wenn eine Übereinstimmung gefunden wird +- **Beinhaltet** einen `default`-Fall für unerwartete Werte +- **Verwendet** `break`-Anweisungen, um zu verhindern, dass der Code in weitere Fälle läuft -**Dieser Code macht Folgendes:** -- **Vergleicht** den Variablenwert mit mehreren spezifischen Fällen -- **Gruppiert** ähnliche Fälle zusammen (Wochentage vs. Wochenenden) -- **Führt** den passenden Codeblock aus, wenn ein Treffer vorliegt -- **Beinhaltet** einen `default`-Fall für unerwartete Werte -- **Verwendet** `break`-Anweisungen, um zu verhindern, dass der Code in den nächsten Fall weiterläuft - -> 💡 **Echtes Beispiel**: Stell dir Kontrollfluss wie das geduldigste GPS der Welt vor, das dir Anweisungen gibt. Es könnte sagen: „Wenn auf der Hauptstraße Verkehr ist, nimm die Autobahn. Wenn die Autobahn gesperrt ist, versuche die landschaftlich schöne Route.“ Programme verwenden genau dieselbe Art bedingter Logik, um intelligent auf verschiedene Situationen zu reagieren und immer das beste Nutzererlebnis zu bieten. +> 💡 **Alltagsvergleich**: Stell dir den Kontrollfluss wie das geduldigste GPS der Welt vor, das dir Anweisungen gibt. Es sagt: „Wenn auf der Hauptstraße Stau ist, nimm lieber die Autobahn. Wenn Baustellen die Autobahn blockieren, versuch die malerische Strecke.“ Programme nutzen genau diese Art von bedingter Logik, um intelligent auf verschiedene Situationen zu reagieren und Nutzern immer die beste Erfahrung zu bieten. -### 🎯 **Konzept-Check: Baustein-Meisterschaft** +### 🎯 **Konzept-Check: Bausteine meistern** -**Mal sehen, wie du mit den Grundlagen zurechtkommst:** -- Kannst du den Unterschied zwischen einer Variable und einer Anweisung mit eigenen Worten erklären? -- Denk an ein Beispiel aus der echten Welt, in dem du eine Wenn-Dann-Entscheidung treffen würdest (wie in unserem Wahl-Beispiel) -- Was hat dich an der Programmierlogik am meisten überrascht? +**Lass uns mal schauen, wie es mit den Grundlagen steht:** +- Kannst du in deinen eigenen Worten den Unterschied zwischen einer Variable und einer Anweisung erklären? +- Denk an ein Beispiel aus dem echten Leben, in dem du eine Wenn-Dann-Entscheidung treffen würdest (wie bei unserem Wahlrecht-Beispiel) +- Was hat dich an der Programmierlogik am meisten überrascht? -**Schneller Selbstvertrauens-Aufbau:** +**Kleiner Selbstvertrauens-Kick:** ```mermaid flowchart LR - A["📝 Anweisungen
(Instruktionen)"] --> B["📦 Variablen
(Speicher)"] --> C["🔀 Programmfluss
(Entscheidungen)"] --> D["🎉 Funktionierendes Programm!"] + A["📝 Anweisungen
(Anweisungen)"] --> B["📦 Variablen
(Speicher)"] --> C["🔀 Programmfluss
(Entscheidungen)"] --> D["🎉 Funktionierendes Programm!"] style A fill:#ffeb3b style B fill:#4caf50 style C fill:#2196f3 style D fill:#ff4081 -``` -✅ **Was als Nächstes kommt**: Wir werden absolut viel Spaß haben, diese Konzepte immer weiter zu vertiefen, während wir diese unglaubliche Reise zusammen fortsetzen! Konzentriere dich jetzt einfach darauf, die Vorfreude auf all die erstaunlichen Möglichkeiten zu spüren, die vor dir liegen. Die speziellen Fähigkeiten und Techniken wirst du ganz natürlich lernen, wenn wir zusammen üben – ich verspreche, das macht viel mehr Spaß, als du vielleicht denkst! +``` +✅ **Was als Nächstes kommt:** Wir werden richtig viel Spaß haben, wenn wir diese Konzepte weiter vertiefen und gemeinsam diese unglaubliche Reise fortsetzen! Konzentriere dich erstmal darauf, dich auf all die fantastischen Möglichkeiten zu freuen, die vor dir liegen. Die speziellen Fähigkeiten und Techniken werden sich ganz natürlich festigen, wenn wir gemeinsam üben – ich verspreche, das wird viel mehr Spaß machen, als du erwartest! -## Werkzeuge des Handwerks +## Werkzeuge des Fachs -Okay, hier werde ich ehrlich so aufgeregt, dass ich mich kaum beherrschen kann! 🚀 Wir werden jetzt über die unglaublichen Werkzeuge sprechen, die dir das Gefühl geben werden, als hättest du gerade die Schlüssel zu einem digitalen Raumschiff bekommen. +Okay, ehrlich gesagt bekomme ich hier richtig Gänsehaut vor Aufregung! 🚀 Wir sprechen jetzt über die unglaublichen Werkzeuge, mit denen du dich fühlen wirst, als hättest du gerade die Schlüssel zu einem digitalen Raumschiff in die Hand bekommen. -Kennst du das, wenn ein Koch diese perfekt ausbalancierten Messer hat, die sich wie eine Verlängerung seiner Hände anfühlen? Oder wenn ein Musiker eine Gitarre hat, die zu singen scheint, sobald er sie berührt? Entwickler haben ihre eigene Version solcher magischen Werkzeuge, und hier kommt etwas, das dich absolut umhauen wird – die meisten davon sind komplett kostenlos! +Du kennst doch sicher diese perfekt ausgewogenen Messer, die ein Koch hat und die sich fast wie eine Verlängerung der eigenen Hände anfühlen? Oder den Musiker, der eine Gitarre besitzt, die förmlich zu singen beginnt, sobald er sie berührt? Entwickler haben ihre ganz eigene Version dieser magischen Werkzeuge, und das, was dich umhauen wird – die meisten davon sind absolut kostenlos! -Ich hüpfe praktisch auf meinem Stuhl, weil ich es kaum erwarten kann, diese mit dir zu teilen, denn sie haben die Art revolutioniert, wie wir Software entwickeln. Wir sprechen von KI-gestützten Code-Assistenten, die dir beim Schreiben deines Codes helfen können (kein Scherz!), Cloud-Umgebungen, in denen du ganze Anwendungen von buchstäblich überall mit WLAN bauen kannst, und Debugging-Tools, die so ausgefeilt sind, dass sie wie Röntgenblick für deine Programme sind. +Ich freue mich so sehr, dir das zu zeigen, denn diese Tools haben die Softwareentwicklung komplett revolutioniert. Wir reden von KI-gestützten Programmierassistenten, die deinen Code schreiben helfen können (ernsthaft!), Cloud-Entwicklungsumgebungen, in denen du ganze Apps von überall mit WLAN bauen kannst, und so ausgefeilten Debuggern, dass sie beinahe als Röntgenblick für deine Programme gelten könnten. -Und hier kommt der Teil, der mir immer noch eine Gänsehaut macht: Das sind keine „Anfänger-Werkzeuge“, die du irgendwann überholst. Das sind genau die gleichen professionellen Werkzeuge, die Entwickler bei Google, Netflix und dem Indie-App-Studio, das du liebst, gerade jetzt verwenden. Du wirst dich wie ein Profi fühlen, wenn du sie benutzt! +Und hier kommt der Teil, der mir immer noch eine Gänsehaut macht: Das sind keine „Anfänger-Werkzeuge“, mit denen du schnell rauswächst. Das sind exakt die gleichen professionellen Tools, die Entwickler bei Google, Netflix und dem Indie-App-Studio, das du liebst, gerade in diesem Moment benutzen. Du wirst dich fühlen wie ein absoluter Profi! ```mermaid graph TD A["💡 Deine Idee"] --> B["⌨️ Code-Editor
(VS Code)"] B --> C["🌐 Browser DevTools
(Testen & Debuggen)"] C --> D["⚡ Befehlszeile
(Automatisierung & Werkzeuge)"] - D --> E["📚 Dokumentation
(Lernen & Referenz)"] - E --> F["🚀 Unglaubliche Webanwendung!"] + D --> E["📚 Dokumentation
(Lernen & Nachschlagen)"] + E --> F["🚀 Unglaubliche Web-App!"] B -.-> G["🤖 KI-Assistent
(GitHub Copilot)"] - C -.-> H["📱 Gerätetests
(Responsives Design)"] + C -.-> H["📱 Gerätetest
(Responsives Design)"] D -.-> I["📦 Paketmanager
(npm, yarn)"] E -.-> J["👥 Gemeinschaft
(Stack Overflow)"] @@ -504,97 +502,97 @@ graph TD style H fill:#f3e5f5 style I fill:#ffccbc style J fill:#e8eaf6 -``` +``` ### Code-Editoren und IDEs: Deine neuen digitalen besten Freunde -Lass uns über Code-Editoren sprechen – die werden wirklich bald zu deinen Lieblingsplätzen zum Abhängen! Stell dir vor, es ist dein persönliches Programmier-Heiligtum, wo du die meiste Zeit verbringen wirst, um deine digitalen Kreationen zu gestalten und zu perfektionieren. +Lass uns über Code-Editoren sprechen – die werden wirklich bald zu deinen Lieblingsorten zum Abhängen! Stell sie dir als deinen persönlichen Code-Sanctuary vor, in dem du die meiste Zeit damit verbringst, deine digitalen Kreationen zu erschaffen und zu perfektionieren. -Aber das Wahre Wunder an modernen Editoren ist: Sie sind nicht nur schicke Texteditoren. Sie sind wie der brillanteste, unterstützendste Programmier-Mentor, der 24/7 direkt neben dir sitzt. Sie fangen deine Tippfehler ab, bevor du sie überhaupt bemerkst, schlagen Verbesserungen vor, die dich wie ein Genie aussehen lassen, helfen dir zu verstehen, was jeder Codeabschnitt macht, und manche können sogar vorhersagen, was du als Nächstes tippen willst, und bieten an, deine Gedanken zu vervollständigen! +Aber das absolut Magische an modernen Editoren ist: Sie sind nicht einfach nur schicke Texteditoren. Sie sind wie der brillanteste, unterstützendste Programmier-Mentor, der rund um die Uhr neben dir sitzt. Sie fangen Tippfehler ab, bevor du sie überhaupt bemerkst, schlagen Verbesserungen vor, die dich zum Genie machen, helfen dir zu verstehen, was jeder Codeabschnitt tut, und manche von ihnen können sogar antizipieren, was du gleich tippen willst und bieten dir an, deine Gedanken fertigzuschreiben! -Ich erinnere mich daran, wie ich das erste Mal Autovervollständigung entdeckt habe – ich hatte wirklich das Gefühl, in der Zukunft zu leben. Du beginnst etwas zu tippen und dein Editor sagt: „Hey, wolltest du diese Funktion nutzen, die genau das macht, was du brauchst?“ Es ist, als hättest du einen Gedankenleser als Programmierkumpel! +Ich erinnere mich noch, als ich zum ersten Mal Auto-Completion entdeckt habe – ich hatte das Gefühl, in der Zukunft zu leben. Du fängst an zu tippen, und dein Editor sagt: „Hey, wolltest du nicht diese Funktion, die genau das macht, was du brauchst?“ Es ist fast wie ein Gedankenleser als dein Coding-Buddy! **Was macht diese Editoren so unglaublich?** -Moderne Code-Editoren bieten eine beeindruckende Reihe von Funktionen, die deine Produktivität steigern: +Moderne Code-Editoren bieten eine beeindruckende Anzahl an Funktionen, die deine Produktivität steigern: -| Funktion | Was sie macht | Warum sie hilft | +| Funktion | Was es macht | Warum es hilft | |---------|--------------|--------------| -| **Syntaxhervorhebung** | Färbt verschiedene Teile deines Codes ein | Macht Code lesbarer und Fehler leichter erkennbar | -| **Autovervollständigung** | Schlägt Code beim Tippen vor | Beschleunigt das Programmieren und reduziert Tippfehler | -| **Debugging-Tools** | Helfen dir Fehler zu finden und zu beheben | Spart Stunden bei der Fehlersuche | -| **Erweiterungen** | Fügen spezielle Features hinzu | Passe deinen Editor an jede Technologie an | -| **KI-Assistenten** | Schlagen Code und Erklärungen vor | Beschleunigen das Lernen und die Produktivität | +| **Syntax-Hervorhebung** | Färbt verschiedene Teile deines Codes | Macht den Code leichter lesbar und Fehler sichtbar | +| **Auto-Vervollständigung** | Schlägt Code während des Tippens vor | Beschleunigt das Programmieren und reduziert Tippfehler | +| **Debugging-Tools** | Hilft Fehler zu finden und zu beheben | Spart Stunden an Fehlersuche | +| **Erweiterungen** | Fügen spezialisierte Funktionen hinzu | Passe deinen Editor für jede Technologie an | +| **KI-Assistenten** | Schlagen Code und Erklärungen vor | Beschleunigen Lernen und Produktivität | -> 🎥 **Video-Ressource**: Möchtest du diese Werkzeuge in Aktion sehen? Schau dir dieses [Tools of the Trade Video](https://youtube.com/watch?v=69WJeXGBdxg) für einen umfassenden Überblick an. +> 🎥 **Video-Ressource**: Willst du diese Werkzeuge in Aktion sehen? Schau dir dieses [Tools of the Trade Video](https://youtube.com/watch?v=69WJeXGBdxg) für einen umfassenden Überblick an. #### Empfohlene Editoren für Webentwicklung -**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (kostenlos) -- Am beliebtesten bei Webentwicklern -- Ausgezeichnetes Erweiterungs-Ökosystem -- Eingebautes Terminal und Git-Integration -- **Must-Have-Erweiterungen**: - - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) – KI-gestützte Codevorschläge - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) – Echtzeit-Zusammenarbeit - - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) – Automatische Codeformatierung - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) – Rechtschreibprüfung im Code +**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (Kostenlos) +- Bei Webentwicklern am beliebtesten +- Hervorragendes Erweiterungs-Ökosystem +- Integriertes Terminal und Git +- **Unverzichtbare Erweiterungen**: + - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) – KI-gestützte Codevorschläge + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) – Echtzeit-Zusammenarbeit + - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) – Automatisches Codeformatieren + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) – Fängt Tippfehler im Code auf -**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (kostenpflichtig, kostenlos für Studenten) -- Fortgeschrittene Debugging- und Testtools -- Intelligente Codevervollständigung -- Integrierte Versionskontrolle +**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (Bezahlt, kostenlos für Studierende) +- Fortgeschrittene Debugging- und Testwerkzeuge +- Intelligente Code-Vervollständigung +- Integrierte Versionskontrolle -**Cloud-basierte IDEs** (verschiedene Preise) -- [GitHub Codespaces](https://github.com/features/codespaces) – Volles VS Code im Browser -- [Replit](https://replit.com/) – Super zum Lernen und Teilen von Code -- [StackBlitz](https://stackblitz.com/) – Sofortige Full-Stack-Webentwicklung +**Cloud-basierte IDEs** (Verschiedene Preise) +- [GitHub Codespaces](https://github.com/features/codespaces) – Vollständiges VS Code im Browser +- [Replit](https://replit.com/) – Ideal zum Lernen und Teilen von Code +- [StackBlitz](https://stackblitz.com/) – Sofortige Full-Stack-Webentwicklung -> 💡 **Einstiegstipp**: Fang mit Visual Studio Code an – es ist kostenlos, in der Branche weit verbreitet und hat eine riesige Community, die hilfreiche Tutorials und Erweiterungen erstellt. +> 💡 **Einstiegstipp**: Starte mit Visual Studio Code – es ist kostenlos, in der Branche weit verbreitet und hat eine riesige Community, die hilfreiche Tutorials und Erweiterungen erstellt. ### Webbrowser: Dein geheimes Entwicklungslabor -Bereite dich darauf vor, völlig begeistert zu sein! Du weißt, wie du Browser benutzt, um durch soziale Medien zu scrollen und Videos anzusehen? Nun, es stellt sich heraus, dass sie die ganze Zeit diesen unglaublichen geheimen Entwickler-Laborraum versteckt hatten, nur darauf wartend, dass du ihn entdeckst! +Okay, mach dich bereit, total überrascht zu werden! Du nutzt Browser ja bisher, um durch Social Media zu scrollen und Videos zu schauen, richtig? Dabei haben sie die ganze Zeit ein unglaubliches geheimes Entwicklerlabor versteckt – und warten nur darauf, dass du es entdeckst! -Jedes Mal, wenn du mit der rechten Maustaste auf eine Webseite klickst und „Element untersuchen“ wählst, öffnest du eine verborgene Welt von Entwicklerwerkzeugen, die ehrlich gesagt mächtiger sind als manche teure Software, für die ich früher hunderte Euro bezahlt habe. Es ist, als würdest du entdecken, dass deine ganz normale Küche hinter einer geheimen Tür ein Labor für Profiköche versteckt! -Als mir zum ersten Mal jemand die Browser-DevTools gezeigt hat, habe ich etwa drei Stunden damit verbracht, einfach nur herumzuklicken und zu denken: "WARTEN, DAS KANN DAS AUCH?!" Du kannst wirklich jede Website in Echtzeit bearbeiten, genau sehen, wie schnell alles lädt, testen, wie deine Seite auf verschiedenen Geräten aussieht, und sogar JavaScript wie ein echter Profi debuggen. Das ist absolut verblüffend! +Jedes Mal, wenn du mit der rechten Maustaste auf eine Webseite klickst und „Element untersuchen“ wählst, öffnest du eine verborgene Welt von Entwicklerwerkzeugen, die ehrlicherweise mächtiger sind als manche teure Software, für die ich früher hunderte von Euro bezahlt habe. Es ist, als würdest du entdecken, dass deine ganz normale Küche hinter einer geheimen Klappe ein Profi-Küchenlabor beherbergt! +Als mir zum ersten Mal jemand die Browser-DevTools zeigte, verbrachte ich etwa drei Stunden damit, einfach nur herumzuklicken und zu denken: „WARTEN, DAS KANN ER AUCH?!“ Du kannst buchstäblich jede Website in Echtzeit bearbeiten, genau sehen, wie schnell alles lädt, testen, wie deine Seite auf verschiedenen Geräten aussieht, und sogar JavaScript wie ein echter Profi debuggen. Es ist absolut faszinierend! -**Deshalb sind Browser dein geheimer Trumpf:** +**Darum sind Browser deine Geheimwaffe:** -Wenn du eine Website oder Webanwendung erstellst, musst du sehen, wie sie in der realen Welt aussieht und sich verhält. Browser zeigen nicht nur deine Arbeit an, sondern liefern auch detailliertes Feedback zu Leistung, Zugänglichkeit und möglichen Problemen. +Wenn du eine Website oder Webanwendung erstellst, musst du sehen, wie sie in der realen Welt aussieht und sich verhält. Browser zeigen nicht nur dein Werk an, sondern liefern auch detailliertes Feedback zur Performance, Zugänglichkeit und zu potenziellen Problemen. -#### Browser-Entwicklertools (DevTools) +#### Browser Developer Tools (DevTools) -Moderne Browser enthalten umfassende Entwicklungspakete: +Moderne Browser beinhalten umfangreiche Entwicklungstools: -| Tool-Kategorie | Was es macht | Beispielanwendung | -|---------------|--------------|------------------| -| **Element-Inspektor** | HTML/CSS in Echtzeit ansehen und bearbeiten | Styling anpassen, um sofortige Ergebnisse zu sehen | +| Toolkategorie | Was es macht | Beispielanwendung | +|---------------|--------------|-------------------| +| **Element-Inspektor** | HTML/CSS in Echtzeit ansehen und editieren | Stil anpassen und sofortige Ergebnisse sehen | | **Konsole** | Fehlermeldungen ansehen und JavaScript testen | Probleme debuggen und mit Code experimentieren | -| **Netzwerk-Monitor** | Nachverfolgen, wie Ressourcen geladen werden | Leistung und Ladezeiten optimieren | -| **Zugänglichkeits-Prüfer** | Inklusives Design testen | Sicherstellen, dass deine Seite für alle Nutzer funktioniert | -| **Geräte-Simulator** | Vorschau auf verschiedenen Bildschirmgrößen | Responsives Design ohne mehrere Geräte testen | +| **Netzwerkmonitor** | Nachverfolgen, wie Ressourcen geladen werden | Performance und Ladezeiten optimieren | +| **Zugänglichkeitsprüfer** | Auf inklusive Gestaltung testen | Sicherstellen, dass deine Seite für alle Nutzer funktioniert | +| **Gerätesimulator** | Vorschau auf verschiedenen Bildschirmgrößen | Responsive Design ohne mehrere Geräte testen | #### Empfohlene Browser für die Entwicklung - **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** – Industriestandard DevTools mit umfangreicher Dokumentation -- **[Firefox](https://developer.mozilla.org/docs/Tools)** – Hervorragende CSS Grid- und Zugänglichkeits-Tools -- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** – Aufbau auf Chromium mit Microsofts Entwicklerressourcen +- **[Firefox](https://developer.mozilla.org/docs/Tools)** – Hervorragende CSS Grid- und Zugänglichkeitswerkzeuge +- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** – Auf Chromium basierend mit Microsofts Entwicklerressourcen -> ⚠️ **Wichtiger Test-Tipp**: Teste deine Websites immer in mehreren Browsern! Was in Chrome perfekt funktioniert, kann in Safari oder Firefox anders aussehen. Professionelle Entwickler testen in allen großen Browsern, um konsistente Nutzererfahrungen zu gewährleisten. +> ⚠️ **Wichtiger Test-Tipp**: Teste deine Websites immer in mehreren Browsern! Was in Chrome perfekt funktioniert, kann in Safari oder Firefox anders aussehen. Professionelle Entwickler testen in allen wichtigen Browsern, um eine konsistente Nutzererfahrung sicherzustellen. -### Kommandozeilen-Tools: Dein Tor zu Entwickler-Superkräften +### Kommandozeilen-Tools: Dein Zugang zu Entwickler-Superkräften -Okay, jetzt mal ehrlich zum Thema Kommandozeile, denn ich will, dass du das von jemandem hörst, der es wirklich versteht. Als ich sie zum ersten Mal sah – nur dieser furchteinflößende schwarze Bildschirm mit blinkendem Text – dachte ich buchstäblich: „Nee, auf keinen Fall! Das sieht aus wie aus einem Hackerfilm der 1980er, und ich bin auf keinen Fall schlau genug dafür!“ 😅 +Okay, lass uns ganz ehrlich sein über die Kommandozeile, denn ich möchte, dass du das von jemandem hörst, der es wirklich versteht. Als ich sie zum ersten Mal sah – nur dieser beängstigende schwarze Bildschirm mit blinkendem Text – dachte ich buchstäblich: „Nein, auf keinen Fall! Das sieht aus wie aus einem Hacker-Film der 80er, und ich bin definitiv nicht klug genug dafür!“ 😅 -Aber hier ist, was ich mir damals gewünscht hätte, dass mir jemand sagt, und was ich dir jetzt sage: Die Kommandozeile ist nicht gruselig – sie ist tatsächlich wie ein direktes Gespräch mit deinem Computer. Stell sie dir vor wie den Unterschied zwischen Essen über eine schicke App mit Bildern und Menüs zu bestellen (was nett und einfach ist) und deinem Lieblingsrestaurant vor Ort, wo der Koch genau weiß, was du magst, und dir etwas Perfektes zaubert, nur weil du sagst „Überrasche mich mit etwas Großartigem.“ +Aber hier ist, was ich mir damals gewünscht hätte, dass mir jemand sagt, und was ich dir gerade jetzt erzähle: Die Kommandozeile ist nicht beängstigend – sie ist eigentlich wie ein direkter Dialog mit deinem Computer. Stell es dir vor wie der Unterschied zwischen Essen über eine schicke App mit Bildern und Menüs zu bestellen (was nett und einfach ist) und deinem Lieblingsrestaurant vor Ort, wo der Koch genau weiß, was du magst und etwas Perfektes zaubert, wenn du sagst: „Überrasche mich mit etwas Tollem.“ -Die Kommandozeile ist der Ort, an dem Entwickler sich wie absolute Zauberer fühlen. Du tippst ein paar scheinbar magische Worte ein (okay, es sind nur Befehle, aber sie fühlen sich magisch an!), drückst Enter und BOOM – du hast komplette Projektstrukturen erstellt, leistungsstarke Werkzeuge aus der ganzen Welt installiert oder deine App ins Internet für Millionen von Menschen gestellt. Wenn du diesen ersten Vorgeschmack auf diese Macht hast, ist das ehrlich gesagt ziemlich süchtig machend! +Die Kommandozeile ist der Ort, an dem Entwickler sich wie absolute Zauberer fühlen. Du tippst ein paar scheinbar magische Wörter (okay, es sind Befehle, aber sie fühlen sich magisch an!), drückst Enter und BOOM – du hast ganze Projektstrukturen erstellt, mächtige Tools aus der ganzen Welt installiert oder deine App ins Internet gestellt, damit Millionen sie sehen können. Wenn du einmal diese Macht gespürt hast, wird es ehrlich gesagt ziemlich süchtig machen! -**Warum die Kommandozeile dein Lieblingswerkzeug wird:** +**Darum wird die Kommandozeile dein Lieblingstool sein:** -Während grafische Oberflächen für viele Aufgaben großartig sind, glänzt die Kommandozeile bei Automatisierung, Präzision und Geschwindigkeit. Viele Entwicklungswerkzeuge funktionieren hauptsächlich über Kommandozeilen-Schnittstellen, und das effiziente Lernen ihrer Nutzung kann deine Produktivität dramatisch steigern. +Während grafische Oberflächen für viele Aufgaben großartig sind, glänzt die Kommandozeile bei Automatisierung, Präzision und Geschwindigkeit. Viele Entwicklungstools arbeiten hauptsächlich über Kommandozeilenschnittstellen, und sie effizient zu nutzen, kann deine Produktivität drastisch steigern. ```bash # Schritt 1: Erstellen und navigieren Sie zum Projektverzeichnis @@ -603,8 +601,8 @@ cd my-awesome-website ``` **Das macht dieser Code:** -- **Ein neues Verzeichnis namens "my-awesome-website"** für dein Projekt erstellen -- **Ins neu erstellte Verzeichnis wechseln,** um mit der Arbeit zu beginnen +- **Erstellt** ein neues Verzeichnis namens „my-awesome-website“ für dein Projekt +- **Wechselt** in das neu erstellte Verzeichnis, um die Arbeit zu beginnen ```bash # Schritt 2: Projekt mit package.json initialisieren @@ -616,13 +614,13 @@ npm install --save-dev @eslint/js ``` **Schritt für Schritt passiert Folgendes:** -- **Initialisierung** eines neuen Node.js-Projekts mit Standardeinstellungen via `npm init -y` -- **Installation** von Vite als modernes Build-Tool für schnelle Entwicklung und Produktions-Builds -- **Hinzufügen** von Prettier für automatische Code-Formatierung und ESLint für Code-Qualitätsprüfungen -- **Verwendung** des `--save-dev` Flags, um diese als reine Entwicklungsabhängigkeiten zu markieren +- **Initialisiert** ein neues Node.js-Projekt mit den Standard-Einstellungen via `npm init -y` +- **Installiert** Vite als modernes Build-Tool für schnelle Entwicklung und Produktions-Builds +- **Fügt hinzu** Prettier für automatische Code-Formatierung und ESLint für Code-Qualitätsprüfungen +- **Verwendet** den `--save-dev`-Schalter, um diese als reine Entwicklungsabhängigkeiten zu markieren ```bash -# Schritt 3: Projektstruktur und Dateien erstellen +# Schritt 3: Erstellen Sie die Projektstruktur und Dateien mkdir src assets echo 'My Site

Hello World

' > index.html @@ -631,30 +629,30 @@ npx vite ``` **Oben haben wir:** -- **Unser Projekt organisiert,** indem wir separate Ordner für Quellcode und Assets erstellt haben -- **Eine einfache HTML-Datei** mit korrekter Dokumentstruktur generiert -- **Den Vite-Entwicklungsserver gestartet** für Live Reloading und Hot Module Replacement +- **Organisiert** unser Projekt durch separate Ordner für Quellcode und Assets +- **Generiert** eine einfache HTML-Datei mit korrektem Dokumentaufbau +- **Gestartet** den Vite-Entwicklungsserver für Live-Reloading und Hot-Module-Replacement -#### Unverzichtbare Kommandozeilen-Tools für Webentwicklung +#### Unverzichtbare Kommandozeilentools für Webentwicklung | Tool | Zweck | Warum du es brauchst | |------|---------|-----------------| -| **[Git](https://git-scm.com/)** | Versionskontrolle | Änderungen nachverfolgen, mit anderen zusammenarbeiten, Arbeit sichern | -| **[Node.js & npm](https://nodejs.org/)** | JavaScript-Laufzeit & Paketverwaltung | JavaScript außerhalb des Browsers ausführen, moderne Entwicklungswerkzeuge installieren | -| **[Vite](https://vitejs.dev/)** | Build-Tool & Entwicklungsserver | Blitzschnelle Entwicklung mit Hot Module Replacement | -| **[ESLint](https://eslint.org/)** | Code-Qualität | Automatisch Probleme im JavaScript finden und beheben | -| **[Prettier](https://prettier.io/)** | Code-Formatierung | Deinen Code einheitlich formatiert und lesbar halten | +| **[Git](https://git-scm.com/)** | Versionskontrolle | Änderungen verfolgen, mit anderen zusammenarbeiten, Backup erstellen | +| **[Node.js & npm](https://nodejs.org/)** | JavaScript-Laufzeit & Paketverwaltung | JavaScript außerhalb von Browsern ausführen, moderne Entwicklungstools installieren | +| **[Vite](https://vitejs.dev/)** | Build-Tool & Dev-Server | Sehr schnelle Entwicklung mit Hot-Module-Replacement | +| **[ESLint](https://eslint.org/)** | Codequalität | Probleme im JavaScript automatisch finden und beheben | +| **[Prettier](https://prettier.io/)** | Codeformatierung | Deinen Code durchgängig formatiert und lesbar halten | #### Plattform-spezifische Optionen **Windows:** - **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** – Moderner, funktionsreicher Terminal -- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 – Leistungsstarke Skriptumgebung -- **[Eingabeaufforderung (Command Prompt)](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 – Traditionelle Windows-Kommandozeile +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 – Leistungsfähige Skriptumgebung +- **[Eingabeaufforderung](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 – Traditionelle Windows-Kommandozeile **macOS:** -- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 – Eingebaute Terminal-Anwendung -- **[iTerm2](https://iterm2.com/)** – Erweiterter Terminal mit erweiterten Funktionen +- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 – Eingebautes Terminalprogramm +- **[iTerm2](https://iterm2.com/)** – Erweitertes Terminal mit zusätzlichen Features **Linux:** - **[Bash](https://www.gnu.org/software/bash/)** 💻 – Standard-Linux-Shell @@ -662,124 +660,124 @@ npx vite > 💻 = Vorinstalliert im Betriebssystem -> 🎯 **Lernpfad**: Beginne mit grundlegenden Befehlen wie `cd` (Verzeichnis wechseln), `ls` oder `dir` (Dateien auflisten) und `mkdir` (Ordner erstellen). Übe mit modernen Workflow-Befehlen wie `npm install`, `git status` und `code .` (öffnet das aktuelle Verzeichnis in VS Code). Mit zunehmendem Komfort wirst du automatisch fortgeschrittenere Befehle und Automatisierungstechniken lernen. +> 🎯 **Lernpfad**: Starte mit Basisbefehlen wie `cd` (Verzeichnis wechseln), `ls` oder `dir` (Dateien auflisten) und `mkdir` (Ordner erstellen). Übe moderne Workflow-Befehle wie `npm install`, `git status` und `code .` (öffnet das aktuelle Verzeichnis in VS Code). Je sicherer du wirst, desto mehr wirst du fortgeschrittene Befehle und Automatisierungstechniken kennenlernen. -### Dokumentation: Dein immer verfügbarer Lernmentor +### Dokumentation: Dein jederzeit verfügbarer Lernmentor -Okay, ich verrate dir ein kleines Geheimnis, das dich als Anfänger wirklich erleichtern wird: Selbst die erfahrensten Entwickler verbringen einen riesigen Teil ihrer Zeit mit dem Lesen von Dokumentation. Und das liegt nicht daran, dass sie nicht wissen, was sie tun – es ist tatsächlich ein Zeichen von Weisheit! +Okay, ich teile ein kleines Geheimnis, das dich viel entspannter macht, Anfänger zu sein: Selbst die erfahrensten Entwickler verbringen einen großen Teil ihrer Zeit mit Lesen von Dokumentationen. Und das nicht, weil sie keine Ahnung haben – sondern es ist tatsächlich ein Zeichen von Weisheit! -Denk an Dokumentation wie an den Zugang zu den geduldigsten, wissendsten Lehrern der Welt, die jederzeit verfügbar sind. Bei einem Problem um 2 Uhr nachts? Dokumentation ist da mit einer warmen virtuellen Umarmung und genau der Antwort, die du brauchst. Du willst etwas über ein cooles neues Feature lernen, über das alle sprechen? Dokumentation unterstützt dich mit Schritt-für-Schritt-Beispielen. Du versuchst zu verstehen, warum etwas so funktioniert, wie es tut? Genau, die Dokumentation erklärt es dir auf eine Art, die endlich Sinn macht! +Sieh Dokumentation wie den Zugang zu den geduldigsten und kenntnisreichsten Lehrern der Welt, die 24/7 für dich da sind. Stehst du um 2 Uhr nachts vor einem Problem? Die Dokumentation ist da mit einer warmen virtuellen Umarmung und genau der Antwort, die du brauchst. Willst du eine coole neue Funktion lernen, über die alle sprechen? Die Dokumentation steht dir mit Schritt-für-Schritt-Beispielen zur Seite. Versucht du zu verstehen, warum etwas so funktioniert, wie es funktioniert? Genau, die Dokumentation erklärt dir alles, bis es endlich klick macht! -Etwas, das meine Perspektive komplett verändert hat: Die Welt der Webentwicklung bewegt sich unglaublich schnell, und niemand (wirklich niemand!) behält alles im Kopf. Ich habe Senior-Entwickler mit über 15 Jahren Erfahrung gesehen, die grundlegende Syntax nachschlagen, und weißt du was? Das ist nicht peinlich – das ist schlau! Es geht nicht darum, ein perfektes Gedächtnis zu haben; es geht darum, zu wissen, wo man verlässliche Antworten schnell findet und wie man sie anwendet. +Hier ist etwas, was meine Perspektive komplett verändert hat: Die Webentwicklung bewegt sich unglaublich schnell, und niemand (wirklich niemand!) behält alles im Kopf. Ich habe Senior Entwickler mit 15+ Jahren Erfahrung gesehen, wie sie grundlegende Syntax nachgeschlagen haben, und weißt du was? Das ist nicht peinlich – das ist schlau! Es geht nicht um perfektes Gedächtnis, sondern darum zu wissen, wo du verlässliche Antworten schnell findest und wie du sie anwendest. -**Hier passiert die eigentliche Magie:** +**Hier passiert die wahre Magie:** -Professionelle Entwickler verbringen einen bedeutenden Teil ihrer Zeit mit dem Lesen von Dokumentation – nicht weil sie nicht wissen, was sie tun, sondern weil der Webentwicklungsbereich sich so schnell entwickelt, dass es kontinuierliches Lernen braucht, um auf dem Laufenden zu bleiben. Gute Dokumentation hilft dir zu verstehen, nicht nur *wie* man etwas benutzt, sondern *warum* und *wann*. +Professionelle Entwickler verbringen viel Zeit mit Dokumentation – nicht weil sie keine Ahnung hätten, sondern weil die Webentwicklung sich so schnell verändert, dass kontinuierliches Lernen nötig ist. Gute Dokumentation hilft dir nicht nur zu verstehen, *wie* man etwas benutzt, sondern auch *warum* und *wann*. #### Unverzichtbare Dokumentationsressourcen **[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** -- Der Goldstandard für Webtechnologie-Dokumentation -- Umfassende Leitfäden für HTML, CSS und JavaScript -- Beinhaltet Informationen zur Browser-Kompatibilität -- Enthält praxisnahe Beispiele und interaktive Demos +- Goldstandard für Webtechnologie-Dokumentationen +- Umfassende Anleitungen zu HTML, CSS und JavaScript +- Enthält Browserkompatibilitätsinformationen +- Beinhaltet praktische Beispiele und interaktive Demos **[Web.dev](https://web.dev)** (von Google) - Moderne Best Practices der Webentwicklung - Leitfäden zur Performance-Optimierung -- Prinzipien für Zugänglichkeit und inklusives Design +- Zugänglichkeits- und inklusive Designprinzipien - Fallstudien aus echten Projekten **[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** -- Ressourcen zur Entwicklung für den Edge-Browser -- Progressive Web-App-Anleitungen +- Ressourcen für die Entwicklung mit Edge Browser +- Progressive Web App-Anleitungen - Einblicke in plattformübergreifende Entwicklung **[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** - Strukturierte Lerncurricula - Videokurse von Branchenexperten -- Praxisnahe Programmierübungen +- Praktische Programmierübungen -> 📚 **Lernstrategie**: Versuche nicht, Dokumentation auswendig zu lernen – lerne vielmehr, wie du sie effizient navigierst. Lege häufig genutzte Referenzen als Lesezeichen an und übe die Suchfunktionen, um gezielt Informationen schnell zu finden. +> 📚 **Lernstrategie**: Versuche nicht, Dokumentation auswendig zu lernen – sondern lerne, sie effizient zu navigieren. Lege dir Lesezeichen für häufig genutzte Referenzen an und übe, die Suchfunktion zu nutzen, um schnell spezifische Informationen zu finden. -### 🔧 **Tool-Beherrschungs-Check: Was spricht dich an?** +### 🔧 **Tool-Mastery-Check: Was spricht dich am meisten an?** **Nimm dir einen Moment und überlege:** -- Welches Tool möchtest du als erstes ausprobieren? (Es gibt keine falsche Antwort!) -- Fühlt sich die Kommandozeile noch einschüchternd an oder bist du neugierig? -- Kannst du dir vorstellen, mit den Browser-DevTools hinter die Kulissen deiner Lieblingswebsites zu schauen? +- Welches Tool möchtest du zuerst ausprobieren? (Es gibt kein falsches Ergebnis!) +- Fühlst du dich von der Kommandozeile noch eingeschüchtert, oder bist du neugierig geworden? +- Kannst du dir vorstellen, Browser-DevTools zu nutzen, um hinter die Kulissen deiner Lieblingswebsites zu blicken? ```mermaid -pie title "Mit Werkzeugen verbrachte Entwicklerzeit" +pie title "Entwicklerzeit mit Werkzeugen" "Code Editor" : 40 - "Browser Testen" : 25 - "Kommandozeile" : 15 - "Dokumentation Lesen" : 15 + "Browser Testing" : 25 + "Command Line" : 15 + "Dokumentation lesen" : 15 "Debugging" : 5 ``` -> **Interessanter Einblick**: Die meisten Entwickler verbringen etwa 40 % ihrer Zeit im Code-Editor, aber schau mal, wie viel Zeit fürs Testen, Lernen und Problemlösen draufgeht. Programmieren ist nicht nur Code schreiben – es geht darum, Erlebnisse zu gestalten! +> **Interessante Erkenntnis**: Die meisten Entwickler verbringen etwa 40 % ihrer Zeit im Code-Editor, aber achte mal darauf, wie viel Zeit fürs Testen, Lernen und Problemlösen draufgeht. Programmieren ist nicht nur Code schreiben – es geht darum, Erlebnisse zu schaffen! -✅ **Zum Nachdenken**: Hier ist etwas Interessantes – wie denkst du, unterscheiden sich die Werkzeuge zum Erstellen von Websites (Entwicklung) von denen, die das Aussehen gestalten (Design)? Es ist wie der Unterschied zwischen einem Architekten, der ein schönes Haus entwirft, und dem Bauunternehmer, der es tatsächlich baut. Beides ist wichtig, aber sie brauchen unterschiedliche Werkzeugkästen! Diese Denkweise wird dir wirklich helfen, das große Ganze zu sehen, wie Websites lebendig werden. +✅ **Denk mal drüber nach**: Hier eine interessante Frage – wie denkst du, unterscheiden sich Tools für die Entwicklung von Webseiten von denen zum Design der Optik? Es ist wie der Unterschied zwischen einem Architekten, der ein schönes Haus plant, und dem Bauunternehmer, der es tatsächlich baut. Beides ist wichtig, aber sie brauchen unterschiedliche Werkzeugkästen! Diese Denkweise hilft dir wirklich, das große Ganze zu sehen, wie Websites entstehen. -## GitHub Copilot Agent Challenge 🚀 +## GitHub Copilot Agent Herausforderung 🚀 -Nutze den Agentenmodus, um die folgende Herausforderung zu meistern: +Nutze den Agent-Modus, um folgende Herausforderung zu meistern: -**Beschreibung:** Erkunde die Funktionen eines modernen Code-Editors oder einer IDE und zeige, wie sie deinen Arbeitsfluss als Webentwickler verbessern können. +**Beschreibung:** Erkunde die Funktionen eines modernen Code-Editors oder einer IDE und zeige, wie er deinen Workflow als Webentwickler verbessern kann. -**Anweisung:** Wähle einen Code-Editor oder eine IDE (wie Visual Studio Code, WebStorm oder eine cloudbasierte IDE). Liste drei Funktionen oder Erweiterungen auf, die dir helfen, Code effizienter zu schreiben, zu debuggen oder zu verwalten. Gib für jede eine kurze Erklärung, wie sie deinen Workflow unterstützt. +**Aufgabe:** Wähle einen Code-Editor oder eine IDE (z. B. Visual Studio Code, WebStorm oder eine Cloud-basierte IDE). Liste drei Features oder Erweiterungen auf, die dir helfen, Code effizienter zu schreiben, zu debuggen oder zu verwalten. Erläutere für jedes kurz, wie es deinen Workflow unterstützt. --- ## 🚀 Herausforderung -**Bereit für deinen ersten Fall, Detektiv?** +**Also, Detektiv, bereit für deinen ersten Fall?** -Jetzt, wo du diese tolle Grundlage hast, wartet ein Abenteuer auf dich, das dir zeigt, wie unglaublich vielfältig und faszinierend die Programmierwelt wirklich ist. Und keine Sorge – es geht noch nicht darum, Code zu schreiben, also kein Stress! Stell dir vor, du bist ein Programmiersprachen-Detektiv bei deinem allerersten spannenden Fall! +Jetzt, wo du diese tolle Grundlage hast, habe ich ein Abenteuer für dich, das dir zeigt, wie unglaublich vielfältig und faszinierend die Programmierwelt wirklich ist. Und hör zu – es geht hier noch nicht ums Programmieren, also kein Druck! Denk an dich wie an einen Programmier-Sprachdetektiv bei deinem allerersten spannenden Fall! -**Deine Mission, solltest du sie annehmen:** -1. **Werde ein Sprachentdecker:** Wähle drei Programmiersprachen aus völlig unterschiedlichen Welten – vielleicht eine zum Erstellen von Websites, eine für mobile Apps und eine für die Datenverarbeitung in der Wissenschaft. Finde Beispiele für dieselbe einfache Aufgabe, geschrieben in jeder Sprache. Ich verspreche dir, du wirst erstaunt sein, wie unterschiedlich sie aussehen können, obwohl sie das Gleiche tun! +**Deine Mission, falls du sie annimmst:** +1. **Werde Sprachentdecker**: Wähle drei Programmiersprachen aus völlig unterschiedlichen Welten – vielleicht eine, die Websites baut, eine, die mobile Apps erstellt, und eine, die Daten für Wissenschaftler auswertet. Finde Beispiele für die gleiche einfache Aufgabe, jeweils in jeder Sprache geschrieben. Ich verspreche dir, du wirst absolut erstaunt sein, wie unterschiedlich sie aussehen, obwohl sie genau dasselbe machen! -2. **Ergründe ihre Ursprungsgeschichten:** Was macht jede Sprache besonders? Ein cooler Fakt – jede einzelne Programmiersprache wurde erstellt, weil jemand dachte: „Weißt du was? Es muss einen besseren Weg geben, dieses spezielle Problem zu lösen.“ Kannst du herausfinden, welche Probleme das waren? Einige dieser Geschichten sind wirklich faszinierend! +2. **Entdecke ihre Ursprungsgeschichten**: Was macht jede Sprache besonders? Hier ein cooler Fakt – jede Programmiersprache wurde geschaffen, weil jemand dachte: „Weißt du was? Es muss einen besseren Weg geben, genau dieses Problem zu lösen.“ Kannst du herausfinden, welche Probleme das waren? Einige dieser Geschichten sind wirklich faszinierend! -3. **Lerne die Communities kennen:** Schau dir an, wie einladend und leidenschaftlich die Community jeder Sprache ist. Manche haben Millionen Entwickler, die Wissen teilen und sich gegenseitig helfen, andere sind kleiner, aber unglaublich eng verbunden und unterstützend. Du wirst die verschiedenen Persönlichkeiten dieser Communities lieben! +3. **Lerne die Communities kennen**: Sieh dir an, wie willkommen heißend und leidenschaftlich die Community jeder Sprache ist. Manche haben Millionen von Entwicklern, die Wissen teilen und einander helfen, andere sind kleiner aber sehr eng verbunden und unterstützend. Du wirst die verschiedenen Persönlichkeiten dieser Communities lieben! -4. **Folge deinem Bauchgefühl:** Welche Sprache fühlt sich gerade am zugänglichsten für dich an? Mach dir keinen Stress mit der „perfekten“ Wahl – hör einfach auf dein Bauchgefühl! Es gibt wirklich keine falsche Antwort, und du kannst später immer weitere Sprachen erkunden. +4. **Vertrau deinem Bauchgefühl**: Welche Sprache wirkt gerade am zugänglichsten für dich? Mach dir keinen Stress wegen der „perfekten“ Wahl – hör einfach auf dein Gefühl! Es gibt ehrlich gesagt keine falsche Antwort, und du kannst später immer andere erkunden. -**Bonus-Detektivarbeit:** Finde heraus, welche großen Websites oder Apps mit jeder Sprache gebaut sind. Ich garantiere dir, du wirst überrascht sein, zu erfahren, was Instagram, Netflix oder dieses mobile Spiel antreibt, das du einfach nicht mehr aus der Hand legen kannst! +**Bonus-Detektivarbeit**: Finde heraus, welche großen Websites oder Apps mit jeder Sprache gebaut wurden. Ich garantiere dir, du wirst schockiert sein, was Instagram, Netflix oder dein Lieblings-Mobilspiel antreibt! -> 💡 **Denke daran:** Du versuchst heute nicht, Experte in einer dieser Sprachen zu werden. Du lernst erstmal nur die Nachbarschaft kennen, bevor du dich entscheidest, wo du dich niederlassen willst. Nimm dir Zeit, hab Spaß dabei und lass dich von deiner Neugier leiten! +> 💡 **Denke daran**: Du musst heute kein Experte in irgendeiner dieser Sprachen werden. Du lernst nur die Nachbarschaft kennen, bevor du entscheidest, wo du dich niederlassen möchtest. Nimm dir Zeit, hab Spaß dabei und lass deine Neugier leiten! ## Lass uns feiern, was du entdeckt hast! -Wow, du hast heute so viele unglaubliche Informationen aufgenommen! Ich freue mich wirklich darauf zu sehen, wie viel von dieser großartigen Reise bei dir hängen geblieben ist. Und denk daran – das ist kein Test, bei dem du alles perfekt machen musst. Das ist eher eine Feier all der coolen Dinge, die du über diese faszinierende Welt gelernt hast, in die du bald eintauchst! +Heilige Makrele, du hast heute so viele unglaubliche Informationen aufgenommen! Ich freue mich wirklich darauf zu sehen, wie viel von dieser fantastischen Reise bei dir hängen geblieben ist. Und denk daran – das ist kein Test, bei dem du alles perfekt machen musst. Das ist eher eine Feier von all den coolen Dingen, die du über diese faszinierende Welt gelernt hast, in die du eintauchst! [Mach das Quiz nach der Lektion](https://ff-quizzes.netlify.app/web/) -## Überprüfung & Selbststudium -**Nimm dir Zeit, um zu erkunden und dabei Spaß zu haben!** +## Rückblick & Selbststudium -Du hast heute viel geschafft, und darauf kannst du stolz sein! Jetzt kommt der spaßige Teil – die Themen zu erforschen, die deine Neugier geweckt haben. Denk daran, das ist keine Hausaufgabe – es ist ein Abenteuer! +**Nimm dir Zeit, um zu erkunden und Spaß zu haben!** +Du hast heute eine Menge geschafft, und darauf kannst du wirklich stolz sein! Jetzt kommt der spaßige Teil – das Erkunden der Themen, die deine Neugier geweckt haben. Denk daran, das ist keine Hausaufgabe – es ist ein Abenteuer! **Tauche tiefer ein in das, was dich begeistert:** -**Arbeite praktisch mit Programmiersprachen:** +**Werde praktisch mit Programmiersprachen:** - Besuche die offiziellen Webseiten von 2-3 Sprachen, die deine Aufmerksamkeit erregt haben. Jede hat ihre eigene Persönlichkeit und Geschichte! -- Probiere einige Online-Coding-Playgrounds wie [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/) oder [Replit](https://replit.com/). Hab keine Angst zu experimentieren – du kannst nichts kaputt machen! -- Lies darüber, wie deine Lieblingssprache entstanden ist. Wirklich, einige dieser Ursprungsgeschichten sind faszinierend und helfen dir zu verstehen, warum Sprachen so funktionieren, wie sie es tun. +- Probiere einige Online-Coding-Spielplätze wie [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), oder [Replit](https://replit.com/) aus. Hab keine Angst zu experimentieren – du kannst nichts kaputt machen! +- Lies darüber, wie deine Lieblingssprache entstanden ist. Ehrlich, einige dieser Ursprungsgeschichten sind faszinierend und helfen dir zu verstehen, warum Sprachen so funktionieren, wie sie es tun. -**Mache dich vertraut mit deinen neuen Werkzeugen:** -- Lade Visual Studio Code herunter, falls du es noch nicht getan hast – es ist kostenlos und du wirst es lieben! -- Verbringe ein paar Minuten beim Stöbern im Extensions-Marktplatz. Es ist wie ein App-Store für deinen Code-Editor! -- Öffne die Entwicklerwerkzeuge deines Browsers und klicke einfach mal herum. Mach dir keine Sorgen, alles zu verstehen – lerne einfach, was dort ist. +**Werde vertraut mit deinen neuen Werkzeugen:** +- Lade Visual Studio Code herunter, falls du das noch nicht getan hast – es ist kostenlos und du wirst es lieben! +- Verbringe ein paar Minuten damit, im Extensions-Marktplatz zu stöbern. Es ist wie ein App-Store für deinen Code-Editor! +- Öffne die Entwicklertools deines Browsers und klicke dich einfach mal durch. Mach dir keine Sorgen, alles zu verstehen – gewöhne dich einfach an das, was dort ist. **Tritt der Community bei:** -- Folge einigen Entwickler-Communities auf [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/) oder [GitHub](https://github.com/). Die Programmier-Community ist für Neulinge unglaublich einladend! -- Schau dir einige anfängerfreundliche Coding-Videos auf YouTube an. Es gibt so viele großartige Creators, die sich daran erinnern, wie es ist, neu anzufangen. -- Ziehe in Erwägung, lokalen Meetups oder Online-Communities beizutreten. Vertrau mir, Entwickler helfen gerne Neulingen! +- Folge einigen Entwickler-Communities auf [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), oder [GitHub](https://github.com/). Die Programmier-Community ist unglaublich offen und freundlich zu Neulingen! +- Schaue dir anfängerfreundliche Programmier-Videos auf YouTube an. Es gibt so viele großartige Creator, die sich daran erinnern, wie es ist, am Anfang zu stehen. +- Ziehe in Betracht, lokalen Meetups oder Online-Communities beizutreten. Vertrau mir, Entwickler lieben es, Neulingen zu helfen! -> 🎯 **Hör zu, das ist, was du dir merken sollst**: Du musst über Nacht kein Programmiergenie werden! Im Moment lernst du einfach diese erstaunliche neue Welt kennen, der du bald angehören wirst. Nimm dir Zeit, genieße die Reise, und denk daran – jeder Entwickler, den du bewunderst, saß einmal genau dort, wo du jetzt sitzt, voller Vorfreude und vielleicht ein wenig überwältigt. Das ist ganz normal und bedeutet, dass du es richtig machst! +> 🎯 **Merk dir Folgendes**: Von dir wird nicht erwartet, dass du über Nacht zum Programmier-Profi wirst! Im Moment lernst du gerade einfach nur diese erstaunliche neue Welt kennen, deren Teil du bald sein wirst. Nimm dir Zeit, genieße die Reise und denk daran – jeder Entwickler, den du bewunderst, saß einmal genau da, wo du jetzt sitzt, fühlte sich aufgeregt und vielleicht ein bisschen überfordert. Das ist völlig normal und zeigt, dass du auf dem richtigen Weg bist! @@ -787,70 +785,70 @@ Du hast heute viel geschafft, und darauf kannst du stolz sein! Jetzt kommt der s [Reading the Docs](assignment.md) -> 💡 **Ein kleiner Anstoß für deine Aufgabe**: Ich würde mich sehr freuen, wenn du einige Tools entdeckst, die wir noch nicht behandelt haben! Überspringe die Editoren, Browser und Kommandozeilen-Tools, über die wir schon gesprochen haben – da draußen gibt es ein ganzes unglaubliches Universum an großartigen Entwicklungstools, die nur darauf warten, entdeckt zu werden. Suche nach solchen, die aktiv gepflegt werden und lebendige, hilfsbereite Communities haben (diese haben meist die besten Tutorials und die unterstützendsten Menschen, wenn du mal festhängst und eine freundliche Hand brauchst). +> 💡 **Ein kleiner Anstoß für deine Aufgabe**: Ich würde es sehr lieben, wenn du einige Tools entdeckst, die wir noch nicht behandelt haben! Überspring die Editoren, Browser und Kommandozeilen-Tools, über die wir schon gesprochen haben – da draußen gibt es eine ganze unglaubliche Welt erstaunlicher Entwicklungstools, die nur darauf warten, entdeckt zu werden. Suche nach solchen, die aktiv gepflegt werden und lebendige, hilfsbereite Communities haben (diese bieten meist die besten Tutorials und die unterstützendsten Menschen, wenn du irgendwann mal feststeckst und eine helfende Hand brauchst). --- -## 🚀 Deine Programmierreise-Zeitleiste +## 🚀 Dein Programmier-Reiseplan ### ⚡ **Was du in den nächsten 5 Minuten tun kannst** -- [ ] Lesezeichen für 2-3 Webseiten von Programmiersprachen setzen, die dich angesprochen haben +- [ ] Lesezeichen für 2-3 Webseiten von Programmiersprachen setzen, die dein Interesse geweckt haben - [ ] Visual Studio Code herunterladen, falls noch nicht geschehen -- [ ] Die DevTools deines Browsers (F12) öffnen und auf irgendeiner Webseite herumklicken -- [ ] Einer Programmier-Community beitreten (Dev.to, Reddit r/webdev oder Stack Overflow) +- [ ] Die DevTools (F12) deines Browsers öffnen und auf irgendeiner Webseite herumklicken +- [ ] Einer Programmierer-Community beitreten (Dev.to, Reddit r/webdev oder Stack Overflow) ### ⏰ **Was du in dieser Stunde schaffen kannst** -- [ ] Das Quiz nach der Lektion abschließen und deine Antworten reflektieren +- [ ] Das Quiz nach der Lektion absolvieren und deine Antworten reflektieren - [ ] VS Code mit der GitHub Copilot-Erweiterung einrichten -- [ ] Ein "Hello World"-Beispiel online in 2 verschiedenen Programmiersprachen ausprobieren -- [ ] Ein "Day in the Life of a Developer"-Video auf YouTube anschauen -- [ ] Mit deiner Programmier-Sprachdetektivarbeit beginnen (aus der Challenge) +- [ ] Ein "Hello World"-Beispiel in 2 unterschiedlichen Programmiersprachen online ausprobieren +- [ ] Ein "Day in the Life of a Developer"-Video auf YouTube ansehen +- [ ] Mit deiner Programmiersprachen-Detektivarbeit beginnen (aus der Challenge) ### 📅 **Dein einwöchiges Abenteuer** - [ ] Die Aufgabe abschließen und 3 neue Entwicklungstools erkunden - [ ] 5 Entwickler oder Programmier-Accounts in sozialen Medien folgen -- [ ] Versuche, etwas Kleines in CodePen oder Replit zu bauen (auch nur "Hallo, [Dein Name]!") -- [ ] Einen Entwicklerblogpost über jemandes Programmierreise lesen +- [ ] Versuche, etwas Kleines in CodePen oder Replit zu bauen (selbst „Hello, [Dein Name]!“ zählt) +- [ ] Einen Entwickler-Blogbeitrag über die Programmierreise von jemandem lesen - [ ] An einem virtuellen Meetup teilnehmen oder einen Programmier-Vortrag anschauen -- [ ] Mit deinem gewählten Sprachlernprogramm online starten +- [ ] Beginne, deine gewählte Sprache mit Online-Tutorials zu lernen ### 🗓️ **Deine einmonatige Transformation** -- [ ] Dein erstes kleines Projekt bauen (auch eine einfache Webseite zählt!) -- [ ] Zu einem Open-Source-Projekt beitragen (fang mit Dokumentationskorrekturen an) -- [ ] Jemanden mentorieren, der gerade erst mit dem Programmieren beginnt -- [ ] Deine Entwickler-Portfolio-Webseite erstellen -- [ ] Dich mit lokalen Entwickler-Communities oder Lerngruppen verbinden -- [ ] Deinen nächsten Lern-Meilenstein planen +- [ ] Baue dein erstes kleines Projekt (selbst eine einfache Webseite zählt!) +- [ ] Trage zu einem Open-Source-Projekt bei (fang mit Dokumentationskorrekturen an) +- [ ] Mentoriere jemanden, der gerade erst mit dem Programmieren anfängt +- [ ] Erstelle deine Entwickler-Portfolio-Webseite +- [ ] Vernetze dich mit lokalen Entwickler-Communities oder Lerngruppen +- [ ] Fang an, deinen nächsten Lern-Meilenstein zu planen ### 🎯 **Abschließende Reflexion** **Bevor du weitermachst, nimm dir einen Moment zum Feiern:** -- Was hat dich heute am Programmieren besonders begeistert? -- Welches Tool oder Konzept möchtest du als Erstes erforschen? -- Wie fühlst du dich beim Start dieser Programmierreise? -- Welche Frage würdest du einem Entwickler gerade gerne stellen? +- Was hat dich heute beim Programmieren besonders begeistert? +- Welches Tool oder Konzept möchtest du zuerst erkunden? +- Wie fühlst du dich bei dem Start deiner Programmierreise? +- Welche Frage würdest du einem Entwickler gerade jetzt gern stellen? ```mermaid journey title Deine Reise zum Aufbau von Selbstvertrauen section Heute - Neugierig: 3: Du - Überwältigt: 4: Du - Aufgeregt: 5: Du + Neugierig: 3: You + Überwältigt: 4: You + Aufgeregt: 5: You section Diese Woche - Erkunden: 4: Du - Lernen: 5: Du - Verbinden: 4: Du + Erkunden: 4: You + Lernen: 5: You + Vernetzen: 4: You section Nächster Monat - Aufbauen: 5: Du - Selbstbewusst: 5: Du - Anderen Helfen: 5: Du + Aufbau: 5: You + Selbstbewusst: 5: You + Anderen Helfen: 5: You ``` -> 🌟 **Denk daran**: Jeder Experte war einmal Anfänger. Jeder erfahrene Entwickler hat sich genau so gefühlt wie du jetzt – begeistert, vielleicht ein wenig überwältigt und auf jeden Fall neugierig, was möglich ist. Du bist in großartiger Gesellschaft, und diese Reise wird unglaublich sein. Willkommen in der wundervollen Welt des Programmierens! 🎉 +> 🌟 **Denk daran**: Jeder Experte war einmal Anfänger. Jeder Senior-Entwickler hat sich genau so gefühlt wie du jetzt – aufgeregt, vielleicht etwas überfordert und definitiv neugierig, was alles möglich ist. Du bist in großartiger Gesellschaft, und diese Reise wird unglaublich sein. Willkommen in der wundervollen Welt des Programmierens! 🎉 --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, kann nicht ausgeschlossen werden, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten. Das Originaldokument in der jeweiligen Originalsprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die durch die Nutzung dieser Übersetzung entstehen. +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, bitten wir zu beachten, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle zu betrachten. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die durch die Verwendung dieser Übersetzung entstehen. \ No newline at end of file diff --git a/translations/de/AGENTS.md b/translations/de/AGENTS.md index de9b07739..0499a5845 100644 --- a/translations/de/AGENTS.md +++ b/translations/de/AGENTS.md @@ -2,42 +2,42 @@ ## Projektübersicht -Dies ist ein Bildungs-Curriculum-Repository zum Lehren der Grundlagen der Webentwicklung für Anfänger. Das Curriculum ist ein umfassender 12-Wochen-Kurs, entwickelt von Microsoft Cloud Advocates, mit 24 praxisorientierten Lektionen, die JavaScript, CSS und HTML abdecken. +Dies ist ein Bildungs-Curriculum-Repository zum Erlernen der Grundlagen der Webentwicklung für Einsteiger. Das Curriculum ist ein umfassender 12-Wochen-Kurs, der von Microsoft Cloud Advocates entwickelt wurde und 24 praxisorientierte Lektionen zu JavaScript, CSS und HTML umfasst. ### Hauptkomponenten - **Bildungsinhalte**: 24 strukturierte Lektionen, organisiert in projektbasierten Modulen -- **Praktische Projekte**: Terrarium, Tipp-Spiel, Browser-Erweiterung, Weltraumspiel, Banking-App, Code-Editor und KI-Chat-Assistent -- **Interaktive Quizze**: 48 Quizze mit jeweils 3 Fragen (Vor- und Nach-Lektionsbewertungen) -- **Mehrsprachige Unterstützung**: Automatisierte Übersetzungen für 50+ Sprachen über GitHub Actions +- **Praktische Projekte**: Terrarium, Tipp-Spiel, Browser-Erweiterung, Weltraumspiel, Bank-App, Code-Editor und KI-Chat-Assistent +- **Interaktive Quizze**: 48 Quizze mit jeweils 3 Fragen (Vor-/Nach-Lektion-Bewertungen) +- **Mehrsprachige Unterstützung**: Automatisierte Übersetzungen für über 50 Sprachen via GitHub Actions - **Technologien**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (für KI-Projekte) ### Architektur -- Bildungsrepository mit lektionbasierter Struktur -- Jeder Lektionen-Ordner enthält README, Codebeispiele und Lösungen +- Bildungs-Repository mit lektionenbasierter Struktur +- Jeder Lektionen-Ordner enthält README, Code-Beispiele und Lösungen - Eigenständige Projekte in separaten Verzeichnissen (quiz-app, verschiedene Lektionenprojekte) - Übersetzungssystem mit GitHub Actions (co-op-translator) -- Dokumentation bereitgestellt via Docsify und als PDF verfügbar +- Dokumentation bereitgestellt über Docsify und als PDF verfügbar ## Setup-Befehle -Dieses Repository dient primär dem Konsumieren von Bildungsinhalten. Für das Arbeiten mit spezifischen Projekten: +Dieses Repository dient hauptsächlich dem Konsum von Bildungsinhalten. Für die Arbeit mit bestimmten Projekten: -### Haupt-Repository Setup +### Haupt-Repository-Setup ```bash git clone https://github.com/microsoft/Web-Dev-For-Beginners.git cd Web-Dev-For-Beginners ``` -### Quiz App Setup (Vue 3 + Vite) +### Quiz-App Setup (Vue 3 + Vite) ```bash cd quiz-app npm install npm run dev # Entwicklungsserver starten -npm run build # Für die Produktion bauen +npm run build # Für Produktion erstellen npm run lint # ESLint ausführen ``` @@ -51,7 +51,7 @@ npm run lint # ESLint ausführen npm run format # Mit Prettier formatieren ``` -### Browser-Erweiterungsprojekte +### Browser-Erweiterungs-Projekte ```bash cd 5-browser-extension/solution @@ -59,12 +59,12 @@ npm install # Befolgen Sie die browserspezifischen Anweisungen zum Laden der Erweiterung ``` -### Space Game Projekte +### Weltraumspiel-Projekte ```bash cd 6-space-game/solution npm install -# Öffnen Sie index.html im Browser oder verwenden Sie Live Server +# Öffne index.html im Browser oder verwende Live Server ``` ### Chat-Projekt (Python Backend) @@ -78,148 +78,148 @@ python api.py ## Entwicklungs-Workflow -### Für Inhaltsbeitragende +### Für Inhaltsbeiträge -1. **Repository forken** in dein GitHub-Konto -2. **Fork lokal klonen** -3. **Neuen Branch** für Änderungen erstellen -4. Änderungen an Lektionstexten oder Codebeispielen vornehmen -5. Codeänderungen in relevanten Projektordnern testen -6. Pull Requests gemäß den Beitragsrichtlinien einreichen +1. **Forken Sie das Repository** in Ihr GitHub-Konto +2. **Klonen Sie Ihren Fork** lokal +3. **Erstellen Sie einen neuen Branch** für Ihre Änderungen +4. Nehmen Sie Änderungen am Lektionstext oder Codebeispielen vor +5. Testen Sie Codeänderungen in relevanten Projektverzeichnissen +6. Reichen Sie Pull-Requests gemäß den Beitragsrichtlinien ein ### Für Lernende 1. Repository forken oder klonen -2. Lektionen-Ordner nacheinander durchgehen -3. README-Dateien jeder Lektion lesen -4. Pre-Lesson Quizze auf https://ff-quizzes.netlify.app/web/ absolvieren -5. Codebeispiele in Lektionen bearbeiten -6. Aufgaben und Herausforderungen abschließen -7. Post-Lektion Quizze durchführen +2. Navigieren Sie sequentiell durch die Lektionen-Ordner +3. Lesen Sie die README-Dateien für jede Lektion +4. Machen Sie Vor-Lektionen-Quizze unter https://ff-quizzes.netlify.app/web/ +5. Arbeiten Sie die Codebeispiele in den Lektionen-Ordnern durch +6. Erledigen Sie Aufgaben und Herausforderungen +7. Nehmen Sie an Nach-Lektionen-Quizzen teil ### Live-Entwicklung -- **Dokumentation**: `docsify serve` im Root-Verzeichnis ausführen (Port 3000) -- **Quiz-App**: `npm run dev` im quiz-app-Verzeichnis ausführen -- **Projekte**: VS Code Live Server Extension für HTML-Projekte nutzen -- **API-Projekte**: `npm start` in jeweiligen API-Ordnern ausführen +- **Dokumentation**: Führen Sie `docsify serve` im Root-Verzeichnis aus (Port 3000) +- **Quiz-App**: Führen Sie `npm run dev` im quiz-app-Verzeichnis aus +- **Projekte**: Verwenden Sie die VS Code Live Server-Erweiterung für HTML-Projekte +- **API-Projekte**: Führen Sie `npm start` in den jeweiligen API-Verzeichnissen aus ## Testanweisungen -### Quiz App Testen +### Quiz-App Testen ```bash cd quiz-app npm run lint # Überprüfen Sie auf Stilprobleme im Code -npm run build # Überprüfen Sie, ob der Build erfolgreich ist +npm run build # Stellen Sie sicher, dass der Build erfolgreich ist ``` -### Bank API Testen +### Bank-API Testen ```bash cd 7-bank-project/api npm run lint # Überprüfe auf Code-Stilprobleme -node server.js # Überprüfen, ob der Server ohne Fehler startet +node server.js # Verifiziere, dass der Server ohne Fehler startet ``` ### Allgemeiner Testansatz -- Dies ist ein Bildungsrepository ohne umfassende automatisierte Tests -- Manueller Test fokussiert auf: - - Codebeispiele laufen fehlerfrei - - Links in Dokumentation funktionieren korrekt - - Projekt-Builds laufen erfolgreich durch - - Beispiele folgen Best-Practices +- Dies ist ein Bildungs-Repository ohne umfassende automatisierte Tests +- Manuelles Testen konzentriert sich auf: + - Fehlerfreies Ausführen der Codebeispiele + - Funktionierende Links in der Dokumentation + - Erfolgreiche Projekt-Builds + - Einhaltung von Best Practices in den Beispielen -### Vor-Einreichungs-Checks +### Prüfungen vor dem Einreichen -- `npm run lint` in Verzeichnissen mit package.json ausführen -- Markdown-Links auf Gültigkeit prüfen -- Codebeispiele im Browser oder Node.js testen -- Übersetzungen auf korrekte Struktur prüfen +- Führen Sie `npm run lint` in Verzeichnissen mit package.json aus +- Überprüfen Sie die Gültigkeit der Markdown-Links +- Testen Sie Codebeispiele im Browser oder Node.js +- Stellen Sie sicher, dass Übersetzungen die Struktur beibehalten -## Code-Stil-Richtlinien +## Code-Stilrichtlinien ### JavaScript -- Moderne ES6+ Syntax verwenden -- Standard ESLint-Konfigurationen in Projekten einhalten -- Sinnvolle Variablen- und Funktionsnamen für Bildungszwecke nutzen -- Kommentare zur Erklärung von Konzepten hinzufügen -- Formatierung mit Prettier, wo konfiguriert +- Verwenden Sie moderne ES6+-Syntax +- Folgen Sie den standardmäßigen ESLint-Konfigurationen in den Projekten +- Verwenden Sie aussagekräftige Variablen- und Funktionsnamen zur besseren Verständlichkeit +- Fügen Sie Kommentare zur Erklärung von Konzepten für Lernende hinzu +- Formatieren Sie mit Prettier, wo konfiguriert ### HTML/CSS -- Semantische HTML5-Elemente verwenden -- Responsive Design-Prinzipien beachten +- Semantische HTML5-Elemente +- Prinzipien des responsiven Designs - Klare Klassennamen-Konventionen - Kommentare zur Erklärung von CSS-Techniken für Lernende ### Python -- PEP 8 Stilrichtlinien einhalten -- Klare, erklärende Codebeispiele -- Type-Hints wo sinnvoll für Lernzwecke +- PEP 8 Stilrichtlinien +- Klare, didaktische Codebeispiele +- Typ-Hinweise, wo hilfreich für das Lernen ### Markdown-Dokumentation -- Klare Überschriftenhierarchie +- Klare Gliederungshierarchie - Codeblöcke mit Sprachangabe -- Links zu weiterführenden Ressourcen -- Screenshots und Bilder in `images/` Verzeichnissen -- Alt-Text für Bilder zur Barrierefreiheit +- Verlinkung zu weiteren Ressourcen +- Screenshots und Bilder in `images/`-Verzeichnissen +- Alternativtexte für Bilder zur Barrierefreiheit ### Dateiorganisation -- Lektionen sequenziell nummeriert (1-getting-started-lessons, 2-js-basics, etc.) +- Lektionen fortlaufend nummeriert (1-getting-started-lessons, 2-js-basics usw.) - Jedes Projekt hat `solution/` und oft `start/` oder `your-work/` Verzeichnisse -- Bilder in lektionenspezifischen `images/` Ordnern gespeichert -- Übersetzungen in `translations/{language-code}/` Struktur +- Bilder in lektionenspezifischen `images/`-Ordnern gespeichert +- Übersetzungen in `translations/{language-code}/` Unterordnern ## Build und Deployment -### Quiz App Deployment (Azure Static Web Apps) +### Quiz-App Deployment (Azure Static Web Apps) -Die quiz-app ist für das Deployment auf Azure Static Web Apps konfiguriert: +Die quiz-app ist für Azure Static Web Apps Deployment konfiguriert: ```bash cd quiz-app npm run build # Erstellt den Ordner dist/ -# Führt Deployment über GitHub Actions Workflow bei Push auf main durch +# Führt die Bereitstellung über den GitHub Actions-Workflow bei Push auf main durch ``` Azure Static Web Apps Konfiguration: - **App-Standort**: `/quiz-app` -- **Ausgabestandort**: `dist` +- **Output-Standort**: `dist` - **Workflow**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` -### Dokumentation PDF-Erstellung +### PDF-Erstellung der Dokumentation ```bash npm install # Installiere docsify-to-pdf -npm run convert # Generiere PDF aus Docs +npm run convert # Erzeuge PDF aus docs ``` ### Docsify Dokumentation ```bash npm install -g docsify-cli # Docsify global installieren -docsify serve # Lokalhost:3000 bedienen +docsify serve # Auf localhost:3000 bereitstellen ``` -### Projektspezifische Builds +### Projekt-spezifische Builds -Jedes Projektverzeichnis kann einen eigenen Build-Prozess haben: +Jedes Projektverzeichnis kann seinen eigenen Build-Prozess haben: - Vue-Projekte: `npm run build` erzeugt Produktions-Bundles - Statische Projekte: Kein Build-Schritt, Dateien werden direkt bereitgestellt ## Pull-Request-Richtlinien -### Titelformat +### Titel-Format -Klare, beschreibende Titel verwenden, die den Änderungsbereich angeben: +Verwenden Sie klare, beschreibende Titel, die den Änderungsbereich angeben: - `[Quiz-app] Neues Quiz für Lektion X hinzufügen` -- `[Lesson-3] Tippfehler im Terrarium-Projekt beheben` +- `[Lesson-3] Tippfehler im Terrarium-Projekt korrigieren` - `[Translation] Spanische Übersetzung für Lektion 5 hinzufügen` - `[Docs] Setup-Anweisungen aktualisieren` @@ -228,55 +228,55 @@ Klare, beschreibende Titel verwenden, die den Änderungsbereich angeben: Vor dem Einreichen eines PR: 1. **Codequalität**: - - `npm run lint` in betroffenen Projektordnern ausführen - - Alle Linting-Fehler und -Warnungen beheben + - Führen Sie `npm run lint` in den betroffenen Projektverzeichnissen aus + - Beheben Sie alle Linting-Fehler und Warnungen 2. **Build-Verifikation**: - - `npm run build` ausführen, falls zutreffend - - Keine Build-Fehler zulassen + - Führen Sie ggf. `npm run build` aus + - Stellen Sie sicher, dass keine Build-Fehler auftreten 3. **Linkprüfung**: - - Alle Markdown-Links testen - - Funktionalität der Bildreferenzen prüfen + - Testen Sie alle Markdown-Links + - Überprüfen Sie Bildreferenzen 4. **Inhaltsprüfung**: - - Rechtschreibung und Grammatik prüfen - - Codebeispiele auf Korrektheit und pädagogischen Wert kontrollieren - - Übersetzungen auf Bedeutungstreue überprüfen + - Korrekturlesen auf Rechtschreibung und Grammatik + - Sicherstellen, dass Codebeispiele korrekt und didaktisch sind + - Überprüfen, dass Übersetzungen die Originalbedeutung wahren ### Beitragsanforderungen -- Microsoft CLA zustimmen (automatische Prüfung im ersten PR) -- Microsoft Open Source Code of Conduct einhalten: https://opensource.microsoft.com/codeofconduct/ -- Details in [CONTRIBUTING.md](./CONTRIBUTING.md) nachlesen -- Issue-Nummern wenn möglich im PR-Beschreibung referenzieren +- Zustimmung zur Microsoft CLA (automatische Prüfung beim ersten PR) +- Befolgung des [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) +- Siehe [CONTRIBUTING.md](./CONTRIBUTING.md) für detaillierte Richtlinien +- Referenzierung von Issue-Nummern in der PR-Beschreibung, falls zutreffend -### Review-Prozess +### Überprüfungsprozess -- PRs werden von Maintainers und Community überprüft -- Pädagogische Klarheit hat Priorität -- Codebeispiele sollten aktuellen Best Practices folgen -- Übersetzungen auf Genauigkeit und kulturelle Angemessenheit geprüft +- PRs werden von Maintainers und Community geprüft +- Didaktische Klarheit hat Priorität +- Codebeispiele sollten den aktuellen Best Practices folgen +- Übersetzungen werden auf Genauigkeit und kulturelle Angemessenheit geprüft ## Übersetzungssystem ### Automatisierte Übersetzung -- Nutzt GitHub Actions mit co-op-translator Workflow -- Übersetzt automatisch in 50+ Sprachen -- Quelldateien in Hauptverzeichnissen -- Übersetzte Dateien in `translations/{language-code}/` Verzeichnissen +- Verwendet GitHub Actions mit co-op-translator Workflow +- Übersetzt automatisch in über 50 Sprachen +- Quelldateien in den Hauptverzeichnissen +- Übersetzte Dateien in `translations/{language-code}/` Ordnern -### Manuelle Verbesserungen hinzufügen +### Manuelle Übersetzungsverbesserungen hinzufügen 1. Datei in `translations/{language-code}/` finden -2. Verbesserungen vornehmen, Struktur erhalten +2. Verbesserungen vornehmen und dabei die Struktur bewahren 3. Sicherstellen, dass Codebeispiele weiterhin funktionieren -4. Lokalisierte Quizinhalte testen +4. Eventuell lokalisierte Quiz-Inhalte testen ### Übersetzungs-Metadaten -Übersetzte Dateien enthalten Metadaten-Header: +Übersetzte Dateien enthalten Metadaten-Kopfzeile: ```markdown ``` -## Debugging und Fehlerbehebung +## Fehlerbehebung und Problembehandlung ### Häufige Probleme **Quiz-App startet nicht**: -- Node.js Version prüfen (v14+ empfohlen) -- `node_modules` und `package-lock.json` löschen, `npm install` neu ausführen -- Prüfen auf Port-Konflikte (Standard: Vite nutzt Port 5173) +- Überprüfen der Node.js-Version (v14+ empfohlen) +- Löschen von `node_modules` und `package-lock.json`, danach `npm install` ausführen +- Prüfen auf Port-Konflikte (Standard: Vite verwendet Port 5173) **API-Server startet nicht**: -- Node.js Version mindestens 10 prüfen +- Node.js-Version prüfen (node >=10) - Prüfen, ob Port bereits belegt ist -- Alle Abhängigkeiten mit `npm install` installieren +- Sicherstellen, dass alle Abhängigkeiten mit `npm install` installiert sind **Browser-Erweiterung lädt nicht**: -- Manifest.json korrekt formatiert prüfen +- Manifest.json auf korrekte Formatierung prüfen - Browser-Konsole auf Fehler überprüfen -- Browser-spezifische Installationsanweisungen befolgen +- Browser-spezifische Installationsanweisungen beachten -**Python Chat-Projekt Probleme**: +**Probleme mit Python-Chat-Projekt**: - OpenAI-Paket installiert? `pip install openai` - Umgebungsvariable GITHUB_TOKEN gesetzt? -- Zugriffsrechte für GitHub Modelle prüfen +- Zugriff auf GitHub-Modelle prüfen -**Docsify liefert keine Docs**: +**Docsify liefert keine Dokumentation aus**: - docsify-cli global installieren: `npm install -g docsify-cli` -- Vom Root-Verzeichnis des Repositorys starten +- Im Root-Verzeichnis des Repositories ausführen - Sicherstellen, dass `docs/_sidebar.md` existiert -### Tipps für Entwicklungsumgebung +### Tipps zur Entwicklungsumgebung -- VS Code mit Live Server Erweiterung für HTML-Projekte verwenden -- ESLint und Prettier Extensions für konsistentes Formatieren installieren -- Browser DevTools zum Debuggen von JavaScript nutzen -- Für Vue Projekte Vue DevTools Browser-Erweiterung verwenden +- VS Code mit Live Server-Erweiterung für HTML-Projekte verwenden +- ESLint- und Prettier-Erweiterungen für konsistente Formatierung installieren +- Browser-DevTools zum Debuggen von JavaScript nutzen +- Für Vue-Projekte Vue DevTools Browser-Erweiterung installieren -### Performance Überlegungen +### Performance-Überlegungen - Große Anzahl übersetzter Dateien (50+ Sprachen) führt zu großen Klonen -- Bei nur Content-Arbeiten shallow clone verwenden: `git clone --depth 1` -- Übersetzungen bei Suche nach englischem Inhalt ausnehmen -- Build-Prozesse können im ersten Lauf langsam sein (npm install, Vite Build) +- Verwenden Sie ein flaches Klon mit `git clone --depth 1`, wenn nur Inhalte bearbeitet werden +- Übersetzungen bei der Suche ausnehmen, wenn englische Inhalte bearbeitet werden +- Build-Prozesse können beim ersten Lauf langsam sein (npm install, Vite build) ## Sicherheitsüberlegungen ### Umgebungsvariablen -- API-Schlüssel dürfen niemals ins Repository gelangen -- `.env` Dateien verwenden (bereits in `.gitignore`) -- Benötigte Umgebungsvariablen in Projekt-READMEs dokumentieren +- API-Schlüssel dürfen nie im Repository gespeichert werden +- Verwenden Sie `.env` Dateien (bereits in `.gitignore` enthalten) +- Erforderliche Umgebungsvariablen in den Projekt-READMEs dokumentieren ### Python-Projekte -- Virtuelle Umgebungen nutzen: `python -m venv venv` +- Virtuelle Umgebungen verwenden: `python -m venv venv` - Abhängigkeiten aktuell halten -- GitHub Token mit minimal notwendigen Rechten nutzen +- GitHub-Tokens sollten nur minimale erforderliche Berechtigungen haben -### GitHub Modelle Zugriff +### Zugriff auf GitHub-Modelle -- Personal Access Tokens (PAT) für GitHub Modelle erforderlich +- Persönliche Zugriffstoken (PAT) werden für GitHub-Modelle benötigt - Tokens als Umgebungsvariablen speichern -- Tokens oder Zugangsdaten niemals committen +- Nie Tokens oder Anmeldedaten im Repository commiten -## Weitere Hinweise +## Zusätzliche Hinweise ### Zielgruppe -- Komplettanfänger in Webentwicklung +- Komplettanfänger in der Webentwicklung - Studierende und Selbstlernende - Lehrkräfte, die das Curriculum im Unterricht einsetzen -- Inhalte sind auf Zugänglichkeit und schrittweises Lernen ausgelegt +- Inhalte sind auf Zugänglichkeit und schrittweisen Kompetenzaufbau ausgelegt ### Pädagogische Philosophie -- Projektbasierter Lernansatz -- Regelmäßige Wissensabfragen (Quizze) -- Praktische Programmierübungen -- Beispiele aus der Praxis +- Projektbasiertes Lernen +- Häufige Wissensüberprüfungen (Quizze) +- Praktische Coding-Übungen +- Praxisnahe Beispiele - Fokus auf Grundlagen vor Frameworks -### Repository Wartung +### Repository-Wartung - Aktive Community von Lernenden und Beitragenden -- Regelmäßige Aktualisierungen von Abhängigkeiten und Inhalten +- Regelmäßige Updates von Abhängigkeiten und Inhalten - Issues und Diskussionen werden von Maintainers überwacht - Übersetzungsupdates automatisiert via GitHub Actions @@ -381,28 +381,28 @@ CO_OP_TRANSLATOR_METADATA: - [Microsoft Learn Module](https://docs.microsoft.com/learn/) - [Student Hub Ressourcen](https://docs.microsoft.com/learn/student-hub/) - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) empfohlen für Lernende -- Weitere Kurse: Generative AI, Data Science, ML, IoT Curricula verfügbar +- Weitere Kurse: Generative KI, Data Science, ML, IoT Curricula verfügbar ### Arbeiten mit spezifischen Projekten -Detaillierte Anweisungen zu einzelnen Projekten in den README-Dateien: +Für detaillierte Anweisungen zu einzelnen Projekten siehe README-Dateien in: - `quiz-app/README.md` - Vue 3 Quiz-Anwendung -- `7-bank-project/README.md` - Banking-Anwendung mit Authentifizierung -- `5-browser-extension/README.md` - Browsererweiterungsentwicklung +- `7-bank-project/README.md` - Bankanwendung mit Authentifizierung +- `5-browser-extension/README.md` - Entwicklung von Browser-Erweiterungen - `6-space-game/README.md` - Canvas-basiertes Spiel -- `9-chat-project/README.md` - KI-Chat-Assistent Projekt +- `9-chat-project/README.md` - KI-Chat-Assistent-Projekt ### Monorepo-Struktur -Obwohl kein klassisches Monorepo, enthält dieses Repository mehrere unabhängige Projekte: +Obwohl kein traditionelles Monorepo, enthält dieses Repository mehrere unabhängige Projekte: - Jede Lektion ist eigenständig - Projekte teilen keine Abhängigkeiten -- Arbeit an einzelnen Projekten ohne Beeinträchtigung anderer -- Gesamtes Repo klonen für komplettes Curriculum-Erlebnis +- Arbeiten Sie an einzelnen Projekten, ohne andere zu beeinflussen +- Klonen Sie das gesamte Repository für die vollständige Curriculum-Erfahrung --- -**Haftungsausschluss**: -Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir auf Genauigkeit achten, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle, menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die durch die Nutzung dieser Übersetzung entstehen. +**Haftungsausschluss**: +Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir nach Genauigkeit streben, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache ist als maßgebliche Quelle anzusehen. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen. \ No newline at end of file diff --git a/translations/de/README.md b/translations/de/README.md index a6358fac4..046d7a0f7 100644 --- a/translations/de/README.md +++ b/translations/de/README.md @@ -10,259 +10,271 @@ [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -# Webentwicklung für Anfänger – Ein Lehrplan +# Webentwicklung für Anfänger - Ein Lehrplan -Lernen Sie die Grundlagen der Webentwicklung mit unserem 12-wöchigen umfassenden Kurs von Microsoft Cloud Advocates. Jede der 24 Lektionen behandelt JavaScript, CSS und HTML durch praktische Projekte wie Terrarien, Browsererweiterungen und Weltraumspiele. Arbeiten Sie mit Quizzen, Diskussionen und praktischen Aufgaben. Verbessern Sie Ihre Fähigkeiten und optimieren Sie die Wissensspeicherung mit unserer effektiven projektbasierten Pädagogik. Beginnen Sie noch heute Ihre Programmierreise! +Lerne die Grundlagen der Webentwicklung mit unserem umfassenden 12-wöchigen Kurs von Microsoft Cloud Advocates. Jede der 24 Lektionen vertieft JavaScript, CSS und HTML durch praktische Projekte wie Terrarien, Browser-Erweiterungen und Weltraumspiele. Engagiere dich mit Quizzen, Diskussionen und praktischen Aufgaben. Verbessere deine Fähigkeiten und optimiere dein Wissensspeicher mit unserer effektiven projektbasierten Didaktik. Starte noch heute deine Programmierreise! -Treten Sie der Azure AI Foundry Discord-Community bei +Tritt der Azure AI Foundry Discord Community bei [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -Folgen Sie diesen Schritten, um mit diesen Ressourcen zu starten: -1. **Repository forken**: Klicken Sie auf [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) +Folge diesen Schritten, um die Ressourcen zu nutzen: +1. **Repository forken**: Klicke [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) 2. **Repository klonen**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -3. [**Treten Sie dem Azure AI Foundry Discord bei und treffen Sie Experten und andere Entwickler**](https://discord.com/invite/ByRwuEEgH4) +3. [**Tritt dem Azure AI Foundry Discord bei und triff Experten und andere Entwickler**](https://discord.com/invite/ByRwuEEgH4) ### 🌐 Mehrsprachige Unterstützung -#### Unterstützt durch GitHub Action (Automatisiert & Immer Aktuell) +#### Unterstützt über GitHub Action (Automatisiert & immer aktuell) -[Arabisch](../ar/README.md) | [Bengalisch](../bn/README.md) | [Bulgarisch](../bg/README.md) | [Birmanisch (Myanmar)](../my/README.md) | [Chinesisch (vereinfacht)](../zh-CN/README.md) | [Chinesisch (traditionell, Hongkong)](../zh-HK/README.md) | [Chinesisch (traditionell, Macau)](../zh-MO/README.md) | [Chinesisch (traditionell, Taiwan)](../zh-TW/README.md) | [Kroatisch](../hr/README.md) | [Tschechisch](../cs/README.md) | [Dänisch](../da/README.md) | [Niederländisch](../nl/README.md) | [Estnisch](../et/README.md) | [Finnisch](../fi/README.md) | [Französisch](../fr/README.md) | [Deutsch](./README.md) | [Griechisch](../el/README.md) | [Hebräisch](../he/README.md) | [Hindi](../hi/README.md) | [Ungarisch](../hu/README.md) | [Indonesisch](../id/README.md) | [Italienisch](../it/README.md) | [Japanisch](../ja/README.md) | [Kannada](../kn/README.md) | [Koreanisch](../ko/README.md) | [Litauisch](../lt/README.md) | [Malaiisch](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalesisch](../ne/README.md) | [Nigerianisches Pidgin](../pcm/README.md) | [Norwegisch](../no/README.md) | [Persisch (Farsi)](../fa/README.md) | [Polnisch](../pl/README.md) | [Portugiesisch (Brasilien)](../pt-BR/README.md) | [Portugiesisch (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumänisch](../ro/README.md) | [Russisch](../ru/README.md) | [Serbisch (Kyrillisch)](../sr/README.md) | [Slowakisch](../sk/README.md) | [Slowenisch](../sl/README.md) | [Spanisch](../es/README.md) | [Swahili](../sw/README.md) | [Schwedisch](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thailändisch](../th/README.md) | [Türkisch](../tr/README.md) | [Ukrainisch](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamesisch](../vi/README.md) +[Arabisch](../ar/README.md) | [Bengalisch](../bn/README.md) | [Bulgarisch](../bg/README.md) | [Birmanisch (Myanmar)](../my/README.md) | [Chinesisch (vereinfacht)](../zh-CN/README.md) | [Chinesisch (traditionell, Hongkong)](../zh-HK/README.md) | [Chinesisch (traditionell, Macau)](../zh-MO/README.md) | [Chinesisch (traditionell, Taiwan)](../zh-TW/README.md) | [Kroatisch](../hr/README.md) | [Tschechisch](../cs/README.md) | [Dänisch](../da/README.md) | [Niederländisch](../nl/README.md) | [Estnisch](../et/README.md) | [Finnisch](../fi/README.md) | [Französisch](../fr/README.md) | [Deutsch](./README.md) | [Griechisch](../el/README.md) | [Hebräisch](../he/README.md) | [Hindi](../hi/README.md) | [Ungarisch](../hu/README.md) | [Indonesisch](../id/README.md) | [Italienisch](../it/README.md) | [Japanisch](../ja/README.md) | [Kannada](../kn/README.md) | [Koreanisch](../ko/README.md) | [Litauisch](../lt/README.md) | [Malaiisch](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepalesisch](../ne/README.md) | [Nigerianisches Pidgin](../pcm/README.md) | [Norwegisch](../no/README.md) | [Persisch (Farsi)](../fa/README.md) | [Polnisch](../pl/README.md) | [Portugiesisch (Brasilien)](../pt-BR/README.md) | [Portugiesisch (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Rumänisch](../ro/README.md) | [Russisch](../ru/README.md) | [Serbisch (Kyrillisch)](../sr/README.md) | [Slowakisch](../sk/README.md) | [Slowenisch](../sl/README.md) | [Spanisch](../es/README.md) | [Suaheli](../sw/README.md) | [Schwedisch](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thailändisch](../th/README.md) | [Türkisch](../tr/README.md) | [Ukrainisch](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamesisch](../vi/README.md) > **Lieber lokal klonen?** - -> Dieses Repository enthält über 50 Sprachübersetzungen, was die Download-Größe erheblich erhöht. Um ohne Übersetzungen zu klonen, nutzen Sie sparse checkout: +> +> Dieses Repository enthält über 50 Sprachübersetzungen, was die Download-Größe erheblich erhöht. Um ohne Übersetzungen zu klonen, verwende Sparse Checkout: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` -> So erhalten Sie alles, was Sie benötigen, um den Kurs mit einem viel schnelleren Download abzuschließen. +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> +> Damit erhältst du alles, um den Kurs zu absolvieren – und der Download geht viel schneller. -**Wenn Sie weitere Übersetzungssprachen wünschen, finden Sie die unterstützten Sprachen [hier](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** +**Wenn du weitere Übersetzungen wünschst, findest du die unterstützten Sprachen [hier](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** [![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) #### 🧑‍🎓 _Bist du Student?_ -Besuche die [**Student Hub Seite**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), wo du Ressourcen für Anfänger, Studierendenpakete und sogar Möglichkeiten findest, einen kostenlosen Zertifikatgutschein zu erhalten. Das ist die Seite, die du als Lesezeichen speichern und von Zeit zu Zeit überprüfen solltest, da wir monatlich Inhalt austauschen. +Besuche die [**Student Hub-Seite**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon), wo du Anfängerressourcen, Studentenpakete und sogar Möglichkeiten findest, einen kostenlosen Zertifikatsgutschein zu erhalten. Diese Seite solltest du als Lesezeichen speichern und regelmäßig besuchen, da wir monatlich Inhalte austauschen. ### 📣 Ankündigung – Neue GitHub Copilot Agent Mode Herausforderungen zum Abschließen! -Neue Herausforderung hinzugefügt, suche in den meisten Kapiteln nach „GitHub Copilot Agent Challenge 🚀“. Das ist eine neue Herausforderung, die du mit GitHub Copilot und dem Agent-Modus abschließen kannst. Wenn du den Agent-Modus noch nicht benutzt hast, er kann nicht nur Text generieren, sondern auch Dateien erstellen und bearbeiten, Befehle ausführen und vieles mehr. +Neue Herausforderung hinzugefügt, suche nach "GitHub Copilot Agent Challenge 🚀" in den meisten Kapiteln. Das ist eine neue Challenge für dich, die du mit GitHub Copilot und dem Agent Mode abschließen kannst. Falls du den Agent Mode noch nicht benutzt hast: Er erzeugt nicht nur Text, sondern kann auch Dateien erstellen und bearbeiten, Befehle ausführen und mehr. -### 📣 Ankündigung – _Neues Projekt mit Generativer KI bauen_ +### 📣 Ankündigung – _Neues Projekt mit Generativer KI_ -Neues AI-Assistenten-Projekt hinzugefügt, schau es dir an [Projekt](./9-chat-project/README.md) +Neues KI-Assistent-Projekt gerade hinzugefügt, schau es dir an [Projekt](./9-chat-project/README.md) ### 📣 Ankündigung – _Neuer Lehrplan_ zu Generativer KI für JavaScript wurde gerade veröffentlicht -Verpasse nicht unseren neuen Lehrplan zur Generativen KI! +Verpasse nicht unseren neuen Generative AI Lehrplan! -Besuche [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course), um zu starten! +Besuche [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course), um loszulegen! ![Background](../../translated_images/de/background.148a8d43afde5730.webp) - Lektionen, die alles von den Grundlagen bis zu RAG abdecken. -- Interagiere mit historischen Charakteren mittels GenAI und unserer Begleit-App. -- Spaßige und fesselnde Erzählweise, du wirst durch die Zeit reisen! +- Interagiere mit historischen Figuren mit GenAI und unserer Begleit-App. +- Spaßige und fesselnde Erzählweise, du reist durch die Zeit! ![character](../../translated_images/de/character.5c0dd8e067ffd693.webp) -Jede Lektion beinhaltet eine Aufgabe, einen Wissenscheck und eine Challenge, die dich in Themen wie: + +Jede Lektion enthält eine Aufgabe, einen Wissenscheck und eine Challenge, die dich beim Lernen von Themen wie den folgenden leitet: - Prompting und Prompt-Engineering -- Text- und Bild-App-Generierung -- Suchanwendungen -anleiten. +- Text- und Bildanwendungs-Generierung +- Suchanwendungen + +Besuche [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course), um loszulegen! + -Besuche [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course), um zu starten! ## 🌱 Erste Schritte -> **Lehrkräfte**, wir haben [einige Vorschläge](for-teachers.md) aufgenommen, wie Sie diesen Lehrplan verwenden können. Wir freuen uns auf Ihr Feedback [in unserem Diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! +> **Lehrkräfte**, wir haben [einige Vorschläge](for-teachers.md) aufgenommen, wie ihr diesen Lehrplan nutzen könnt. Wir freuen uns über euer Feedback [in unserem Diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! -**[Lernende](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)** starten für jede Lektion mit einem Pre-Lecture-Quiz und folgen mit dem Lesen des Vorlesungsmaterials, dem Abschließen der verschiedenen Aktivitäten und überprüfen ihr Verständnis mit dem Post-Lecture-Quiz. +**[Lernende](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, beginne jede Lektion mit einem Pre-Lecture-Quiz, lese dann das Vorlesungsmaterial, bearbeite die verschiedenen Aktivitäten und überprüfe dein Verständnis mit dem Post-Lecture-Quiz. -Um dein Lernerlebnis zu verbessern, verbinde dich mit deinen Mitlernenden, um gemeinsam an den Projekten zu arbeiten! Diskussionen sind erwünscht in unserem [Diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions), wo unser Moderatorenteam für deine Fragen zur Verfügung steht. +Um dein Lernen zu verbessern, vernetze dich mit deinen Mitlernenden, um gemeinsam an Projekten zu arbeiten! Diskussionen sind in unserem [Diskussionsforum](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) erwünscht, wo unser Moderatorenteam deine Fragen beantwortet. -Für deine weitere Bildung empfehlen wir dringend, [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) zu erkunden, um zusätzliches Lernmaterial zu finden. +Für eine weiterführende Ausbildung empfehlen wir dringend, [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) für zusätzliche Lernmaterialien zu erkunden. ### 📋 Einrichtung deiner Umgebung -Dieser Lehrplan verfügt über eine sofort einsatzfertige Entwicklungsumgebung! Zu Beginn kannst du wählen, ob du den Lehrplan in einem [Codespace](https://github.com/features/codespaces/) (_einer browserbasierten Umgebung ohne Installation_) oder lokal auf deinem Computer mit einem Texteditor wie [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) ausführen möchtest. +Dieser Lehrplan verfügt über eine sofort einsatzbereite Entwicklungsumgebung! Du kannst zu Beginn wählen, ob du den Lehrplan in einem [Codespace](https://github.com/features/codespaces/) (_eine browserbasierte, installfreie Umgebung_) oder lokal auf deinem Computer mit einem Texteditor wie [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) ausführen möchtest. -#### Erstelle dein Repository -Damit du deine Arbeit einfach speichern kannst, empfehlen wir dir, eine eigene Kopie dieses Repositories anzulegen. Das kannst du tun, indem du oben auf der Seite den Button **Use this template** anklickst. Dadurch wird ein neues Repository in deinem GitHub-Konto mit einer Kopie des Lehrplans erstellt. +#### Erstelle dein eigenes Repository +Damit du deine Arbeit leicht speichern kannst, wird empfohlen, eine eigene Kopie dieses Repositorys zu erstellen. Dazu klicke auf den Button **Use this template** oben auf der Seite. Damit wird ein neues Repository in deinem GitHub-Konto mit einer Kopie des Lehrplans erstellt. Folge diesen Schritten: -1. **Repository forken**: Klicke auf den „Fork“-Button oben rechts auf dieser Seite. +1. **Repository forken**: Klicke auf den „Fork“-Button rechts oben auf dieser Seite. 2. **Repository klonen**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -#### Betrieb des Lehrplans in einem Codespace +#### Ausführen des Lehrplans in einem Codespace -In deiner erstellten Kopie des Repositories klickst du auf den **Code**-Button und wählst **Open with Codespaces** aus. Dadurch wird ein neuer Codespace zum Arbeiten für dich erstellt. +In deiner eigenen Kopie dieses Repositorys, klicke auf den Button **Code** und wähle **Open with Codespaces**. Dies erstellt einen neuen Codespace, in dem du arbeiten kannst. ![Codespace](../../translated_images/de/createcodespace.0238bbf4d7a8d955.webp) -#### Betrieb des Lehrplans lokal auf deinem Computer - -Um diesen Lehrplan lokal auf deinem Computer auszuführen, benötigst du einen Texteditor, einen Browser und ein Kommandozeilen-Tool. Unsere erste Lektion, [Einführung in Programmiersprachen und Werkzeuge](../../1-getting-started-lessons/1-intro-to-programming-languages), führt dich durch verschiedene Optionen für diese Tools, damit du das auswählen kannst, was am besten für dich passt. +#### Ausführen des Lehrplans lokal auf deinem Computer -Unsere Empfehlung ist es, [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) als Editor zu verwenden, der auch ein integriertes [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) besitzt. Du kannst Visual Studio Code [hier herunterladen](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +Um diesen Lehrplan lokal auf deinem Computer auszuführen, benötigst du einen Texteditor, einen Browser und ein Kommandozeilen-Tool. Unsere erste Lektion, [Einführung in Programmiersprachen und Werkzeuge](../../1-getting-started-lessons/1-intro-to-programming-languages), führt dich durch verschiedene Optionen für diese Werkzeuge, sodass du wählen kannst, was am besten zu dir passt. -1. Klone dein Repository auf deinen Computer. Das kannst du tun, indem du den **Code**-Button anklickst und die URL kopierst: +Wir empfehlen die Nutzung von [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) als Editor, der auch ein integriertes [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) bietet. Visual Studio Code kannst du [hier herunterladen](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +1. Klone dein Repository auf deinen Computer. Du kannst dies tun, indem du auf die **Code**-Schaltfläche klickst und die URL kopierst: [CodeSpace](./images/createcodespace.png) -Dann öffnen Sie das [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) innerhalb von [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) und führen Sie den folgenden Befehl aus, wobei Sie `` durch die URL ersetzen, die Sie gerade kopiert haben: + + Öffne dann [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) innerhalb von [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) und führe den folgenden Befehl aus, wobei du `` durch die gerade kopierte URL ersetzt: ```bash git clone ``` -2. Öffnen Sie den Ordner in Visual Studio Code. Dies können Sie tun, indem Sie auf **Datei** > **Ordner öffnen** klicken und den gerade geklonten Ordner auswählen. +2. Öffne den Ordner in Visual Studio Code. Du kannst dies tun, indem du auf **Datei** > **Ordner öffnen** klickst und den gerade geklonten Ordner auswählst. -> Empfohlene Visual Studio Code Erweiterungen: +> Empfohlene Visual Studio Code-Erweiterungen: > -> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - um HTML-Seiten innerhalb von Visual Studio Code vorzuschauen -> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - um Ihnen beim schnelleren Schreiben von Code zu helfen +> * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - um HTML-Seiten direkt in Visual Studio Code vorzuschauen +> * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - um dir beim schnelleren Schreiben von Code zu helfen ## 📂 Jede Lektion beinhaltet: -- optionale Sketchnote +- optionales Sketchnote - optionales ergänzendes Video -- Aufwärm-Quiz vor der Lektion +- Aufwärmquiz vor der Lektion - schriftliche Lektion -- bei projektbasierten Lektionen Schritt-für-Schritt-Anleitungen zum Aufbau des Projekts -- Wissenskontrollen +- für projektbasierte Lektionen Schritt-für-Schritt-Anleitungen zum Erstellen des Projekts +- Wissensüberprüfungen - eine Herausforderung - ergänzende Lektüre - Aufgabe - [Quiz nach der Lektion](https://ff-quizzes.netlify.app/web/) -> **Eine Anmerkung zu den Quizzen**: Alle Quizze befinden sich im Quiz-app-Ordner, insgesamt 48 Quizze mit je drei Fragen. Sie sind [hier](https://ff-quizzes.netlify.app/web/) verfügbar, die Quiz-App kann lokal ausgeführt oder auf Azure bereitgestellt werden; folgen Sie der Anleitung im `quiz-app`-Ordner. +> **Ein Hinweis zu den Quizzen**: Alle Quizze sind im Ordner Quiz-app enthalten, insgesamt 48 Quizze mit jeweils drei Fragen. Sie sind [hier](https://ff-quizzes.netlify.app/web/) verfügbar. Die Quiz-App kann lokal ausgeführt oder auf Azure bereitgestellt werden; folge den Anweisungen im Ordner `quiz-app`. ## 🗃️ Lektionen -| | Projektname | Vermittelte Konzepte | Lernziele | Verlinkte Lektion | Autor | -| :-: | :------------------------------------------------------: | :--------------------------------------------------------------------: | -------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | -| 01 | Einstieg | Einführung in Programmierung und Werkzeuge | Lernen Sie die grundlegenden Grundlagen der meisten Programmiersprachen und über Software, die professionellen Entwicklern hilft | [Einführung in Programmiersprachen und Werkzeuge](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | -| 02 | Einstieg | Grundlagen von GitHub, einschließlich Teamarbeit | Wie man GitHub im Projekt verwendet und mit anderen an einem Code-Repository zusammenarbeitet | [Einführung in GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | -| 03 | Einstieg | Barrierefreiheit | Lernen Sie die Grundlagen der Web-Barrierefreiheit | [Grundlagen Barrierefreiheit](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | -| 04 | JS-Grundlagen | JavaScript Datentypen | Die Grundlagen von JavaScript-Datentypen | [Datentypen](./2-js-basics/1-data-types/README.md) | Jasmine | -| 05 | JS-Grundlagen | Funktionen und Methoden | Lernen Sie Funktionen und Methoden zur Steuerung des Anwendungslogikflusses | [Funktionen und Methoden](./2-js-basics/2-functions-methods/README.md) | Jasmine und Christopher | -| 06 | JS-Grundlagen | Entscheidungen mit JS treffen | Lernen Sie, wie Sie Bedingungen in Ihrem Code mit Entscheidungsstrukturen erstellen | [Entscheidungen treffen](./2-js-basics/3-making-decisions/README.md) | Jasmine | -| 07 | JS-Grundlagen | Arrays und Schleifen | Arbeiten Sie mit Daten unter Verwendung von Arrays und Schleifen in JavaScript | [Arrays und Schleifen](./2-js-basics/4-arrays-loops/README.md) | Jasmine | -| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML in der Praxis | Erstellen Sie das HTML, um ein Online-Terrarium anzulegen, mit Fokus auf den Aufbau eines Layouts | [Einführung in HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | -| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS in der Praxis | Erstellen Sie das CSS zur Gestaltung des Online-Terrariums, mit Fokus auf die Grundlagen von CSS und responsive Design | [Einführung in CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | -| 10 | [Terrarium](./3-terrarium/solution/README.md) | JavaScript Closures, DOM-Manipulation | Erstellen Sie das JavaScript, um das Terrarium als Drag/Drop-Oberfläche zu gestalten, mit Fokus auf Closures und DOM-Manipulation | [JavaScript Closures, DOM-Manipulation](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | -| 11 | [Typing Game](./4-typing-game/solution/README.md) | Aufbau eines Tipp-Spiels | Lernen Sie, wie Sie Tastatureignisse verwenden, um die Logik Ihrer JavaScript-App zu steuern | [Ereignisgesteuerte Programmierung](./4-typing-game/typing-game/README.md) | Christopher | -| 12 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Arbeiten mit Browsern | Lernen Sie, wie Browser funktionieren, ihre Geschichte und wie Sie die ersten Elemente einer Browsererweiterung gestalten | [Über Browser](./5-browser-extension/1-about-browsers/README.md) | Jen | -| 13 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Erstellen eines Formulars, Aufrufen einer API und Speichern von Variablen im lokalen Speicher | Erstellen Sie die JavaScript-Elemente Ihrer Browser-Erweiterung zum Aufrufen einer API unter Verwendung von Variablen im lokalen Speicher | [APIs, Formulare und lokaler Speicher](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | -| 14 | [Green Browser Extension](./5-browser-extension/solution/README.md) | Hintergrundprozesse im Browser, Web-Performance | Verwenden Sie die Hintergrundprozesse des Browsers, um das Symbol der Erweiterung zu verwalten; lernen Sie über Web-Performance und Optimierungen | [Hintergrundaufgaben und Performance](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | -| 15 | [Space Game](./6-space-game/solution/README.md) | Fortgeschrittene Spieleentwicklung mit JavaScript | Lernen Sie Vererbung mit Klassen und Komposition sowie das Pub/Sub-Muster, als Vorbereitung auf den Spielebau | [Einführung in die fortgeschrittene Spieleentwicklung](./6-space-game/1-introduction/README.md) | Chris | -| 16 | [Space Game](./6-space-game/solution/README.md) | Zeichnen auf Canvas | Lernen Sie die Canvas-API kennen, die zum Zeichnen von Elementen auf einem Bildschirm verwendet wird | [Zeichnen auf Canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | -| 17 | [Space Game](./6-space-game/solution/README.md) | Bewegen von Elementen auf dem Bildschirm | Entdecken Sie, wie Elemente mit kartesischen Koordinaten und der Canvas-API Bewegung erhalten | [Bewegen von Elementen](./6-space-game/3-moving-elements-around/README.md) | Chris | -| 18 | [Space Game](./6-space-game/solution/README.md) | Kollisions­erkennung | Lassen Sie Elemente kollidieren und aufeinander reagieren, basierend auf Tastatureingaben, und fügen Sie eine Cooldown-Funktion hinzu | [Kollisionserkennung](./6-space-game/4-collision-detection/README.md) | Chris | -| 19 | [Space Game](./6-space-game/solution/README.md) | Punkteverwaltung | Führen Sie mathematische Berechnungen basierend auf dem Status und der Leistung des Spiels durch | [Punkteverwaltung](./6-space-game/5-keeping-score/README.md) | Chris | -| 20 | [Space Game](./6-space-game/solution/README.md) | Beenden und Neustarten des Spiels | Lernen Sie, wie Sie das Spiel beenden und neu starten, einschließlich der Bereinigung von Assets und Zurücksetzen von Variablen | [Die Endbedingung](./6-space-game/6-end-condition/README.md) | Chris | -| 21 | [Banking App](./7-bank-project/solution/README.md) | HTML-Vorlagen und Routen in einer Webanwendung | Lernen Sie, wie Sie das Gerüst einer mehrseitigen Website-Architektur mit Routing und HTML-Vorlagen erstellen | [HTML-Vorlagen und Routen](./7-bank-project/1-template-route/README.md) | Yohan | -| 22 | [Banking App](./7-bank-project/solution/README.md) | Login- und Registrierungsformular erstellen | Lernen Sie, wie man Formulare erstellt und Validierungsroutinen handhabt | [Formulare](./7-bank-project/2-forms/README.md) | Yohan | -| 23 | [Banking App](./7-bank-project/solution/README.md) | Methoden zum Abrufen und Verwalten von Daten | Wie Daten in Ihre App hinein- und herausfließen, wie man sie abruft, speichert und entsorgt | [Daten](./7-bank-project/3-data/README.md) | Yohan | -| 24 | [Banking App](./7-bank-project/solution/README.md) | Konzepte des State Managements | Lernen Sie, wie Ihre App den Zustand beibehält und diesen programmatisch verwaltet | [State Management](./7-bank-project/4-state-management/README.md) | Yohan | -| 25 | [Browser/VScode-Code](../../8-code-editor) | Arbeiten mit VScode | Lernen Sie, wie man einen Code-Editor benutzt | [Verwendung des VScode Code Editors](./8-code-editor/1-using-a-code-editor/README.md) | Chris | -| 26 | [AI Assistants](./9-chat-project/README.md) | Arbeiten mit KI | Lernen Sie, wie Sie Ihren eigenen KI-Assistenten erstellen | [KI-Assistent-Projekt](./9-chat-project/README.md) | Chris | +| | Projektname | Erlernte Konzepte | Lernziele | Verknüpfte Lektion | Autor | +| :-: | :----------------------------------------------------: | :------------------------------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------: | :----------------: | +| 01 | Erste Schritte | Einführung in Programmierung und Werkzeuge | Erlerne die grundlegenden Konzepte der meisten Programmiersprachen und Software, die professionelle Entwickler verwenden | [Einführung in Programmiersprachen und Werkzeuge](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | +| 02 | Erste Schritte | Grundlagen von GitHub, inklusive Teamarbeit | Wie man GitHub im Projekt nutzt und mit anderen an einer Codebasis zusammenarbeitet | [Einführung in GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | +| 03 | Erste Schritte | Barrierefreiheit | Erlerne die Grundlagen der Web-Barrierefreiheit | [Grundlagen der Barrierefreiheit](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | +| 04 | JS-Grundlagen | JavaScript-Datentypen | Die Grundlagen der JavaScript-Datentypen | [Datentypen](./2-js-basics/1-data-types/README.md) | Jasmine | +| 05 | JS-Grundlagen | Funktionen und Methoden | Lerne Funktionen und Methoden kennen, um den Ablauf einer Anwendung zu steuern | [Funktionen und Methoden](./2-js-basics/2-functions-methods/README.md) | Jasmine und Christopher | +| 06 | JS-Grundlagen | Entscheidungen in JS treffen | Lerne, wie man Bedingungen im Code mit Entscheidungsstrukturen erstellt | [Entscheidungen treffen](./2-js-basics/3-making-decisions/README.md) | Jasmine | +| 07 | JS-Grundlagen | Arrays und Schleifen | Arbeite mit Daten in JavaScript mithilfe von Arrays und Schleifen | [Arrays und Schleifen](./2-js-basics/4-arrays-loops/README.md) | Jasmine | +| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML in der Praxis | Erstelle das HTML, um ein Online-Terrarium zu bauen, mit Schwerpunkt auf Layout | [Einführung in HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | +| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS in der Praxis | Erstelle das CSS, um das Online-Terrarium zu stylen, mit Fokus auf CSS-Grundlagen und responsives Design | [Einführung in CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | +| 10 | [Terrarium](./3-terrarium/solution/README.md) | JavaScript Closures, DOM-Manipulation | Erstelle das JavaScript, damit das Terrarium als Drag/Drop-Oberfläche funktioniert, Fokus auf Closures und DOM-Manipulation | [JavaScript Closures, DOM-Manipulation](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | +| 11 | [Tipp-Spiel](./4-typing-game/solution/README.md) | Ein Tipp-Spiel bauen | Lerne, wie Tastaturereignisse zur Steuerung der Logik deiner JavaScript-App verwendet werden | [Ereignisgesteuerte Programmierung](./4-typing-game/typing-game/README.md) | Christopher | +| 12 | [Grüne Browsererweiterung](./5-browser-extension/solution/README.md) | Arbeiten mit Browsern | Lerne, wie Browser funktionieren, ihre Geschichte und wie man erste Elemente einer Browsererweiterung erstellt | [Über Browser](./5-browser-extension/1-about-browsers/README.md) | Jen | +| 13 | [Grüne Browsererweiterung](./5-browser-extension/solution/README.md) | Formular erstellen, API aufrufen und Variablen im lokalen Speicher ablegen | Erstelle JavaScript-Elemente deiner Browsererweiterung, um eine API unter Verwendung lokal gespeicherter Variablen zu nutzen | [APIs, Formulare und lokaler Speicher](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | +| 14 | [Grüne Browsererweiterung](./5-browser-extension/solution/README.md) | Hintergrundprozesse im Browser, Web-Performance | Nutze die Hintergrundprozesse des Browsers, um das Symbol der Erweiterung zu verwalten; lerne über Web-Performance und Optimierungen | [Hintergrundaufgaben und Performance](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | +| 15 | [Weltraum-Spiel](./6-space-game/solution/README.md) | Fortgeschrittene Spieleentwicklung mit JavaScript | Lerne Vererbung mittels Klassen und Komposition sowie das Pub/Sub-Muster, als Vorbereitung für den Bau eines Spiels | [Einführung in die fortgeschrittene Spieleentwicklung](./6-space-game/1-introduction/README.md) | Chris | +| 16 | [Weltraum-Spiel](./6-space-game/solution/README.md) | Zeichnen auf Canvas | Lerne die Canvas-API kennen, um Elemente auf einem Bildschirm zu zeichnen | [Zeichnen auf Canvas](./6-space-game/2-drawing-to-canvas/README.md) | Chris | +| 17 | [Weltraum-Spiel](./6-space-game/solution/README.md) | Elemente auf dem Bildschirm bewegen | Entdecke, wie Elemente Bewegung mit kartesischen Koordinaten und der Canvas-API erhalten | [Elemente bewegen](./6-space-game/3-moving-elements-around/README.md) | Chris | +| 18 | [Weltraum-Spiel](./6-space-game/solution/README.md) | Kollisions-Erkennung | Lasse Elemente kollidieren und aufeinander reagieren, nutze Tastendrucke und implementiere eine Abklingfunktion zur Leistungssteigerung | [Kollisions-Erkennung](./6-space-game/4-collision-detection/README.md) | Chris | +| 19 | [Weltraum-Spiel](./6-space-game/solution/README.md) | Punkte zählen | Führe mathematische Berechnungen basierend auf Spielstatus und Leistung durch | [Punkte zählen](./6-space-game/5-keeping-score/README.md) | Chris | +| 20 | [Weltraum-Spiel](./6-space-game/solution/README.md) | Spiel beenden und neu starten | Lerne, wie man das Spiel beendet und neu startet, inklusive Bereinigung von Ressourcen und Zurücksetzen von Variablen | [Die Endbedingung](./6-space-game/6-end-condition/README.md) | Chris | +| 21 | [Bankanwendung](./7-bank-project/solution/README.md) | HTML-Templates und Routen in einer Web-App | Lerne, wie man das Gerüst einer mehrseitigen Webseite mithilfe von Routing und HTML-Templates erstellt | [HTML-Templates und Routen](./7-bank-project/1-template-route/README.md) | Yohan | +| 22 | [Bankanwendung](./7-bank-project/solution/README.md) | Login- und Registrierungsformular erstellen | Lerne, wie man Formulare baut und Validierungsroutinen behandelt | [Formulare](./7-bank-project/2-forms/README.md) | Yohan | +| 23 | [Bankanwendung](./7-bank-project/solution/README.md) | Methoden zum Abrufen und Nutzen von Daten | Wie Daten in die App gelangen und wieder herausfließen, wie man sie abruft, speichert und entfernt | [Daten](./7-bank-project/3-data/README.md) | Yohan | +| 24 | [Bankanwendung](./7-bank-project/solution/README.md) | Konzepte des State-Managements | Lerne, wie deine App Zustände behält und wie man diese programmatisch verwaltet | [State-Management](./7-bank-project/4-state-management/README.md) | Yohan | +| 25 | [Browser/VScode Code](../../8-code-editor) | Arbeiten mit VScode | Lerne, wie du einen Code-Editor benutzt | [Visual Studio Code Editor verwenden](./8-code-editor/1-using-a-code-editor/README.md) | Chris | +| 26 | [KI-Assistenten](./9-chat-project/README.md) | Arbeiten mit KI | Lerne, wie du deinen eigenen KI-Assistenten baust | [KI-Assistenten-Projekt](./9-chat-project/README.md) | Chris | ## 🏫 Pädagogik -Unser Lehrplan ist nach zwei wesentlichen pädagogischen Prinzipien gestaltet: +Unser Curriculum basiert auf zwei zentralen pädagogischen Prinzipien: * projektbasiertes Lernen * häufige Quizze -Das Programm vermittelt die Grundlagen von JavaScript, HTML und CSS sowie die neuesten Werkzeuge und Techniken, die heutige Webentwickler verwenden. Studierende haben die Möglichkeit, praktische Erfahrungen zu sammeln, indem sie ein Tipp-Spiel, ein virtuelles Terrarium, eine umweltfreundliche Browsererweiterung, ein Space-Invaders-artiges Spiel und eine Banking-App für Unternehmen entwickeln. Am Ende der Reihe haben die Studierenden ein solides Verständnis der Webentwicklung erworben. +Das Programm vermittelt die Grundlagen von JavaScript, HTML und CSS sowie die neuesten Werkzeuge und Techniken, die heutige Webentwickler nutzen. Die Studierenden haben die Gelegenheit, praktische Erfahrungen zu sammeln, indem sie ein Tipp-Spiel, ein virtuelles Terrarium, eine umweltfreundliche Browser-Erweiterung, ein Weltraum-Invader-artiges Spiel und eine Bankanwendung für Unternehmen bauen. Am Ende der Reihe verfügen die Studierenden über ein solides Verständnis der Webentwicklung. -> 🎓 Sie können die ersten Lektionen dieses Curriculums als [Lernpfad](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) bei Microsoft Learn absolvieren! +> 🎓 Die ersten Lektionen dieses Curriculums kannst du auch als [Learning Path](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) auf Microsoft Learn absolvieren! -Indem sichergestellt wird, dass die Inhalte mit Projekten übereinstimmen, wird der Prozess für die Studierenden ansprechender gestaltet und die Beibehaltung der Konzepte verbessert. Wir haben außerdem mehrere Einsteigerlektionen zu den Grundlagen von JavaScript geschrieben, um Konzepte einzuführen, begleitet von einem Video aus der Tutorialsammlung „[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)“, deren Autoren teilweise zum Curriculum beigetragen haben. +Indem sichergestellt wird, dass die Inhalte auf Projekte abgestimmt sind, wird der Prozess für die Lernenden spannender und die Behaltensrate der Konzepte verbessert. Wir haben auch mehrere Einstiegskapitel zu den Grundlagen von JavaScript geschrieben und mit Videos aus der Tutorial-Reihe "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" kombiniert – einige der Autoren haben zu diesem Curriculum beigetragen. -Zudem setzt ein niedrigschwelliges Quiz vor einer Unterrichtsstunde die Lernintention der Studierenden, während ein zweites Quiz nach dem Unterricht die weitere Beibehaltung sichert. Dieses Curriculum wurde so gestaltet, dass es flexibel und unterhaltsam ist und ganz oder teilweise absolviert werden kann. Die Projekte starten klein und werden bis zum Ende des 12-Wochen-Zyklus zunehmend komplexer. +Darüber hinaus setzt ein niedrigschwelliges Quiz vor der Lektion die Lernabsicht der Studierenden, während ein weiteres Quiz danach die Behaltensrate sicherstellt. Das Curriculum wurde so konzipiert, dass es flexibel und unterhaltsam ist und sowohl vollständig als auch teilweise absolviert werden kann. Die Projekte starten klein und werden im Verlauf des 12-Wochen-Zyklus zunehmend komplexer. -Während wir bewusst darauf verzichtet haben, JavaScript-Frameworks einzuführen, um uns auf die grundlegenden Fähigkeiten für Webentwickler zu konzentrieren, bevor ein Framework eingesetzt wird, wäre ein guter nächster Schritt zum Abschluss dieses Curriculums, Node.js über eine weitere Videosammlung zu lernen: „[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)“. +Während wir bewusst darauf verzichtet haben, JavaScript-Frameworks einzuführen, um uns auf die grundlegenden Fähigkeiten eines Webentwicklers vor der Anwendung eines Frameworks zu konzentrieren, wäre ein guter nächster Schritt nach Abschluss dieses Curriculums das Erlernen von Node.js anhand einer weiteren Videoserie: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". -> Besuchen Sie unsere [Verhaltensregeln](CODE_OF_CONDUCT.md) und [Beitragsrichtlinien](CONTRIBUTING.md). Wir freuen uns über Ihr konstruktives Feedback! +> Besuche unsere [Verhaltensregeln](CODE_OF_CONDUCT.md) und [Beitragsrichtlinien](CONTRIBUTING.md). Wir freuen uns über dein konstruktives Feedback! ## 🧭 Offline-Zugriff -Sie können diese Dokumentation offline mit [Docsify](https://docsify.js.org/#/) ausführen. Forken Sie dieses Repository, [installieren Sie Docsify](https://docsify.js.org/#/quickstart) auf Ihrem lokalen Rechner und geben Sie dann im Stammordner dieses Repositories `docsify serve` ein. Die Website wird auf Port 3000 auf Ihrem lokalen Host bereitgestellt: `localhost:3000`. +Du kannst diese Dokumentation offline mit [Docsify](https://docsify.js.org/#/) verwenden. Forke dieses Repo, [installiere Docsify](https://docsify.js.org/#/quickstart) auf deinem lokalen Rechner und gib dann im Stammordner dieses Repos `docsify serve` ein. Die Website wird auf Port 3000 auf deinem localhost ausgeführt: `localhost:3000`. ## 📘 PDF +Eine PDF mit allen Lektionen ist [hier](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf) zu finden. -Ein PDF aller Lektionen finden Sie [hier](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). +## 🎒 Andere Kurse -## 🎒 Weitere Kurse Unser Team produziert weitere Kurse! Schau dir an: ### LangChain -[![LangChain4j for Beginners](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners) -[![LangChain.js for Beginners](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin) -[![LangChain for Beginners](https://img.shields.io/badge/LangChain%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin) +[![LangChain4j für Anfänger](https://img.shields.io/badge/LangChain4j%20for%20Beginners-22C55E?style=for-the-badge&&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchain4j-for-beginners) +[![LangChain.js für Anfänger](https://img.shields.io/badge/LangChain.js%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://aka.ms/langchainjs-for-beginners?WT.mc_id=m365-94501-dwahlin) +[![LangChain für Anfänger](https://img.shields.io/badge/LangChain%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=0553D6)](https://github.com/microsoft/langchain-for-beginners?WT.mc_id=m365-94501-dwahlin) --- -### Azure / Edge / MCP / Agents -[![AZD for Beginners](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) -[![Edge AI for Beginners](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) -[![MCP for Beginners](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) -[![AI Agents for Beginners](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) +### Azure / Edge / MCP / Agenten +[![AZD für Anfänger](https://img.shields.io/badge/AZD%20for%20Beginners-0078D4?style=for-the-badge&labelColor=E5E7EB&color=0078D4)](https://github.com/microsoft/AZD-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Edge AI für Anfänger](https://img.shields.io/badge/Edge%20AI%20for%20Beginners-00B8E4?style=for-the-badge&labelColor=E5E7EB&color=00B8E4)](https://github.com/microsoft/edgeai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![MCP für Anfänger](https://img.shields.io/badge/MCP%20for%20Beginners-009688?style=for-the-badge&labelColor=E5E7EB&color=009688)](https://github.com/microsoft/mcp-for-beginners?WT.mc_id=academic-105485-koreyst) +[![KI-Agenten für Anfänger](https://img.shields.io/badge/AI%20Agents%20for%20Beginners-00C49A?style=for-the-badge&labelColor=E5E7EB&color=00C49A)](https://github.com/microsoft/ai-agents-for-beginners?WT.mc_id=academic-105485-koreyst) --- -### Generative AI Series -[![Generative AI for Beginners](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) -[![Generative AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) -[![Generative AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) -[![Generative AI (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) +### Generative KI-Serie +[![Generative KI für Anfänger](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) +[![Generative KI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) +[![Generative KI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) +[![Generative KI (JavaScript)](https://img.shields.io/badge/Generative%20AI%20(JavaScript)-E879F9?style=for-the-badge&labelColor=E5E7EB&color=E879F9)](https://github.com/microsoft/generative-ai-with-javascript?WT.mc_id=academic-105485-koreyst) --- -### Core Learning -[![ML for Beginners](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) -[![Data Science for Beginners](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) -[![AI for Beginners](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) -[![Cybersecurity for Beginners](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) -[![Web Dev for Beginners](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) -[![IoT for Beginners](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) -[![XR Development for Beginners](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) +### Kernlernen +[![ML für Anfänger](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) +[![Datenwissenschaft für Anfänger](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) +[![KI für Anfänger](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) +[![Cybersicherheit für Anfänger](https://img.shields.io/badge/Cybersecurity%20for%20Beginners-F97316?style=for-the-badge&labelColor=E5E7EB&color=F97316)](https://github.com/microsoft/Security-101?WT.mc_id=academic-96948-sayoung) +[![Webentwicklung für Anfänger](https://img.shields.io/badge/Web%20Dev%20for%20Beginners-EC4899?style=for-the-badge&labelColor=E5E7EB&color=EC4899)](https://aka.ms/webdev-beginners?WT.mc_id=academic-105485-koreyst) +[![IoT für Anfänger](https://img.shields.io/badge/IoT%20for%20Beginners-14B8A6?style=for-the-badge&labelColor=E5E7EB&color=14B8A6)](https://aka.ms/iot-beginners?WT.mc_id=academic-105485-koreyst) +[![XR-Entwicklung für Anfänger](https://img.shields.io/badge/XR%20Development%20for%20Beginners-38BDF8?style=for-the-badge&labelColor=E5E7EB&color=38BDF8)](https://github.com/microsoft/xr-development-for-beginners?WT.mc_id=academic-105485-koreyst) --- -### Copilot Series -[![Copilot for AI Paired Programming](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) -[![Copilot for C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) -[![Copilot Adventure](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) +### Copilot-Serie +[![Copilot für KI-Paired-Programming](https://img.shields.io/badge/Copilot%20for%20AI%20Paired%20Programming-FACC15?style=for-the-badge&labelColor=E5E7EB&color=FACC15)](https://aka.ms/GitHubCopilotAI?WT.mc_id=academic-105485-koreyst) +[![Copilot für C#/.NET](https://img.shields.io/badge/Copilot%20for%20C%23/.NET-FBBF24?style=for-the-badge&labelColor=E5E7EB&color=FBBF24)](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers?WT.mc_id=academic-105485-koreyst) +[![Copilot-Abenteuer](https://img.shields.io/badge/Copilot%20Adventure-FDE68A?style=for-the-badge&labelColor=E5E7EB&color=FDE68A)](https://github.com/microsoft/CopilotAdventures?WT.mc_id=academic-105485-koreyst) ## Hilfe erhalten -Wenn du feststeckst oder Fragen zum Erstellen von KI-Anwendungen hast. Schließe dich anderen Lernenden und erfahrenen Entwicklern an, um über MCP zu diskutieren. Es ist eine unterstützende Community, in der Fragen willkommen sind und Wissen frei geteilt wird. +Wenn du festhängst oder Fragen zum Erstellen von KI-Anwendungen hast: Trete anderen Lernenden und erfahrenen Entwicklern in den Diskussionen über MCP bei. Es ist eine unterstützende Community, in der Fragen willkommen sind und Wissen frei geteilt wird. [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -Wenn du Feedback zum Produkt hast oder Fehler beim Erstellen auftreten, besuche: +Wenn du Produktfeedback hast oder beim Bauen auf Fehler stößt, besuche: [![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum) ## Lizenz -Dieses Repository ist unter der MIT-Lizenz lizenziert. Weitere Informationen findest du in der [LICENSE](../../LICENSE) Datei. +Dieses Repository ist unter der MIT-Lizenz lizenziert. Siehe die [LICENSE](../../LICENSE) Datei für weitere Informationen. --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, bitten wir zu beachten, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen. +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir um Genauigkeit bemüht sind, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner Ursprungssprache gilt als maßgebliche Quelle. Für wichtige Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Nutzung dieser Übersetzung entstehen. \ No newline at end of file diff --git a/translations/el/.co-op-translator.json b/translations/el/.co-op-translator.json index 7be17fd6b..a7db4fd3c 100644 --- a/translations/el/.co-op-translator.json +++ b/translations/el/.co-op-translator.json @@ -1,7 +1,7 @@ { "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { - "original_hash": "d45ddcc54eb9232a76d08328b09d792e", - "translation_date": "2026-01-06T21:16:19+00:00", + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T12:05:54+00:00", "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", "language_code": "el" }, @@ -493,7 +493,7 @@ }, "AGENTS.md": { "original_hash": "a362efd06d64d4134a0cfe8515a86d34", - "translation_date": "2026-02-06T17:12:15+00:00", + "translation_date": "2026-03-06T12:18:30+00:00", "source_file": "AGENTS.md", "language_code": "el" }, @@ -516,8 +516,8 @@ "language_code": "el" }, "README.md": { - "original_hash": "6d6385fd098088cb2d690fb0a6cdaedc", - "translation_date": "2026-02-06T17:07:46+00:00", + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T12:00:55+00:00", "source_file": "README.md", "language_code": "el" }, diff --git a/translations/el/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/el/1-getting-started-lessons/1-intro-to-programming-languages/README.md index 5b41d1d82..d170856ca 100644 --- a/translations/el/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/el/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,15 +1,15 @@ # Εισαγωγή στις Γλώσσες Προγραμματισμού και τα Σύγχρονα Εργαλεία Ανάπτυξης -Γεια σου, μελλοντικέ προγραμματιστή! 👋 Μπορώ να σου πω κάτι που ακόμα με συγκλονίζει κάθε μέρα; Είσαι έτοιμος να ανακαλύψεις ότι ο προγραμματισμός δεν αφορά μόνο τους υπολογιστές – αφορά το να έχεις πραγματικές υπερδυνάμεις για να ζωντανέψεις τις πιο τρελές σου ιδέες! +Γεια σου, μελλοντικέ προγραμματιστή! 👋 Μπορώ να σου πω κάτι που ακόμα μου προκαλεί ρίγος κάθε μέρα; Είσαι έτοιμος να ανακαλύψεις ότι ο προγραμματισμός δεν είναι απλώς για υπολογιστές – είναι σαν να έχεις πραγματικές υπερδυνάμεις για να ζωντανέψεις τις πιο τρελές σου ιδέες! -Ξέρεις εκείνη τη στιγμή που χρησιμοποιείς την αγαπημένη σου εφαρμογή και όλα απλά συνδυάζονται τέλεια; Όταν πατάς ένα κουμπί και συμβαίνει κάτι μαγικό που σε κάνει να πεις "ουάου, πώς ΤΟ ΕΚΑΝΑΝ αυτό;" Λοιπόν, κάποιος ακριβώς σαν κι εσένα – πιθανόν να είναι καθισμένος στο αγαπημένο του καφέ στις 2 τα ξημερώματα με τον τρίτο του εσπρέσο – έγραψε τον κώδικα που δημιούργησε αυτή τη μαγεία. Και να τι θα σε εντυπωσιάσει: στο τέλος αυτού του μαθήματος, όχι μόνο θα καταλάβεις πώς το έκαναν, αλλά θα θέλεις κι εσύ να το δοκιμάσεις! +Ξέρεις εκείνη τη στιγμή που χρησιμοποιείς την αγαπημένη σου εφαρμογή και όλα ταιριάζουν τέλεια; Όταν πατάς ένα κουμπί και συμβαίνει κάτι μαγικό που σε κάνει να λες "ουάου, πώς το ΕΚΑΝΑΝ αυτό;" Λοιπόν, κάποιος σαν εσένα – πιθανώς καθισμένος στο αγαπημένο του καφέ στις 2 το πρωί με τον τρίτο εσπρέσο του – έγραψε τον κώδικα που δημιούργησε αυτή τη μαγεία. Και αυτό που θα σε αφήσει άφωνο: στο τέλος αυτού του μαθήματος, όχι μόνο θα καταλάβεις πώς το έκαναν, αλλά θα ανυπομονείς να το δοκιμάσεις ο ίδιος! -Κοίτα, καταλαβαίνω αν ο προγραμματισμός σου φαίνεται τρομακτικός αυτή τη στιγμή. Όταν ξεκίνησα, πίστευα ειλικρινά ότι έπρεπε να είσαι κάποιος μαθηματικός ιδιοφυής ή να προγραμματίζεις από τότε που ήσουν πέντε χρονών. Αλλά αυτό που άλλαξε εντελώς την οπτική μου ήταν: ο προγραμματισμός είναι ακριβώς όπως να μαθαίνεις να κάνεις συζητήσεις σε μια νέα γλώσσα. Ξεκινάς με το "γεια" και το "ευχαριστώ", μετά μαθαίνεις να παραγγέλνεις καφέ, και πριν το καταλάβεις κάνεις βαθιές φιλοσοφικές συζητήσεις! Μόνο που εδώ, κάνεις συζητήσεις με υπολογιστές, και ειλικρινά; Είναι οι πιο υπομονετικοί συνομιλητές που θα έχεις ποτέ – ποτέ δεν κρίνουν τα λάθη σου και πάντα ενθουσιάζονται να προσπαθήσουν ξανά! +Κοίτα, καταλαβαίνω απόλυτα αν ο προγραμματισμός σου φαίνεται τρομακτικός τώρα. Όταν άρχισα, πίστευα ειλικρινά ότι χρειάζεται να είσαι κάποιο είδος μαθηματικού ιδιοφυΐα ή να προγραμματίζεις από πέντε χρονών. Αλλά αυτό που άλλαξε τελείως την οπτική μου: ο προγραμματισμός είναι ακριβώς σαν να μαθαίνεις να κάνεις συζητήσεις σε μια νέα γλώσσα. Ξεκινάς με "γεια" και "ευχαριστώ", μετά μαθαίνεις να παραγγέλνεις καφέ, και προτού το καταλάβεις, κάνεις βαθιές φιλοσοφικές συζητήσεις! Εκτός από το ότι σε αυτή την περίπτωση κάνεις συζητήσεις με υπολογιστές, και ειλικρινά; Είναι οι πιο υπομονετικοί συνομιλητές που θα έχεις ποτέ – δεν κρίνουν ποτέ τα λάθη σου και πάντα ενθουσιάζονται να προσπαθήσουν ξανά! -Σήμερα, θα εξερευνήσουμε τα απίστευτα εργαλεία που κάνουν την σύγχρονη ανάπτυξη ιστοσελίδων όχι μόνο δυνατή, αλλά και σοβαρά εθιστική. Μιλάω για τους ίδιους ακριβώς επεξεργαστές, προγράμματα περιήγησης και ροές εργασίας που χρησιμοποιούν οι προγραμματιστές στη Netflix, Spotify και το αγαπημένο σου indie studio εφαρμογών κάθε μέρα. Και να το μέρος που θα σε κάνει να χορέψεις από χαρά: τα περισσότερα από αυτά τα επαγγελματικά, βιομηχανικά πρότυπα εργαλεία είναι εντελώς δωρεάν! +Σήμερα, θα εξερευνήσουμε τα απίστευτα εργαλεία που κάνουν τη σύγχρονη ανάπτυξη ιστοσελίδων όχι απλά εφικτή, αλλά σοβαρά εθιστική. Μιλάω για τους ίδιους επεξεργαστές κώδικα, φυλλομετρητές και ροές εργασίας που χρησιμοποιούν οι προγραμματιστές της Netflix, της Spotify και του αγαπημένου σου ανεξάρτητου στούντιο εφαρμογών κάθε μέρα. Και εδώ είναι το κομμάτι που θα σε κάνει να χορέψεις από χαρά: τα περισσότερα από αυτά τα επαγγελματικά, βιομηχανικά αναγνωρισμένα εργαλεία είναι εντελώς δωρεάν! ![Intro Programming](../../../../translated_images/el/webdev101-programming.d6e3f98e61ac4bff.webp) -> Σκέτς από [Tomomi Imura](https://twitter.com/girlie_mac) +> Σημείωση σκίτσου από την [Tomomi Imura](https://twitter.com/girlie_mac) ```mermaid journey @@ -22,84 +22,85 @@ journey Επεξεργαστές Κώδικα: 4: You Περιηγητές & Εργαλεία Ανάπτυξης: 5: You Γραμμή Εντολών: 3: You - section Εξάσκηση - Ντετέκτιβ Γλωσσών: 4: You + section Άσκηση + Ντετέκτιβ Γλώσσας: 4: You Εξερεύνηση Εργαλείων: 5: You Σύνδεση Κοινότητας: 5: You ``` ## Ας Δούμε Τι Ξέρεις Ήδη! -Πριν βουτήξουμε στα διασκεδαστικά, έχω περιέργεια – τι ξέρεις ήδη για αυτόν τον κόσμο του προγραμματισμού; Και άκου, αν κοιτάς αυτές τις ερωτήσεις και σκέφτεσαι "Δεν έχω απολύτως καμία ιδέα για τίποτα από αυτά", αυτό δεν είναι απλώς εντάξει, είναι τέλειο! Σημαίνει ότι είσαι στο ακριβώς σωστό μέρος. Σκέψου αυτό το κουίζ σαν τέντωμα πριν την άσκηση – απλώς ζεσταίνουμε τους μυς του εγκεφάλου! +Πριν βουτήξουμε στα διασκεδαστικά, είμαι περίεργος – τι ήδη ξέρεις για αυτόν τον κόσμο του προγραμματισμού; Και άκου, αν κοιτάς αυτές τις ερωτήσεις και σκέφτεσαι "Δεν έχω απολύτως καμία ιδέα για τίποτα από όλα αυτά," αυτό δεν είναι απλά εντάξει, είναι τέλειο! Αυτό σημαίνει ότι βρίσκεσαι ακριβώς στο σωστό μέρος. Σκέψου αυτό το κουίζ σαν ένα ζέσταμα πριν την προπόνηση – απλώς "ζεσταίνουμε" τους μυς του εγκεφάλου! -[Κάνε το προ-μάθημα κουίζ](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) +[Κάνε το προκαταρκτικό κουίζ](https://ff-quizzes.netlify.app/web/) -## Η Περιπέτεια που Ετοιμαζόμαστε να Κάνουμε Μαζί -Εντάξει, είμαι πραγματικά γεμάτος ενθουσιασμό για όσα θα εξερευνήσουμε σήμερα! Σοβαρά, εύχομαι να μπορούσα να δω το πρόσωπό σου όταν καταλάβεις μερικές από αυτές τις έννοιες. Να το απίστευτο ταξίδι που θα κάνουμε μαζί: +## Η Περιπέτεια που Θα Ζήσουμε Μαζί -- **Τι είναι ο προγραμματισμός πραγματικά (και γιατί είναι το πιο κουλ πράγμα στον κόσμο!)** – Θα ανακαλύψουμε πώς ο κώδικας είναι στην ουσία η αόρατη μαγεία που κινεί τα πάντα γύρω σου, από το ξυπνητήρι που ξαφνικά ξέρει ότι είναι Δευτέρα το πρωί, μέχρι τον αλγόριθμο που επιμελεί τέλεια τις Netflix προτάσεις σου -- **Γλώσσες προγραμματισμού και οι εκπληκτικές προσωπικότητές τους** – Φαντάσου να μπαίνεις σε ένα πάρτι όπου ο καθένας έχει τελείως διαφορετικές υπερδυνάμεις και τρόπους να λύνει προβλήματα. Έτσι είναι ο κόσμος των γλωσσών προγραμματισμού, και θα λατρέψεις να τις γνωρίσεις! -- **Τα βασικά δομικά στοιχεία που κάνουν τη ψηφιακή μαγεία να συμβαίνει** – Σκέψου τα σαν το απόλυτο δημιουργικό σετ LEGO. Μόλις καταλάβεις πώς ενώνονται αυτά τα κομμάτια, θα συνειδητοποιήσεις ότι μπορείς να φτιάξεις κυριολεκτικά οτιδήποτε ονειρευτεί το μυαλό σου -- **Επαγγελματικά εργαλεία που θα σε κάνουν να νιώσεις σαν να σου έδωσαν το ραβδί ενός μάγου** – Δεν υπερβάλλω εδώ – αυτά τα εργαλεία θα σε κάνουν πραγματικά να νιώσεις ότι έχεις υπερδυνάμεις, και το καλύτερο; Είναι τα ίδια που χρησιμοποιούν οι επαγγελματίες! +Εντάξει, είμαι πραγματικά γεμάτος ενθουσιασμό για αυτά που θα ανακαλύψουμε σήμερα! Σοβαρά, θα ήθελα να σου δω το πρόσωπο όταν μερικές από αυτές τις έννοιες "κουμπώσουν." Αυτή είναι η απίστευτη διαδρομή που θα πάρουμε μαζί: -> 💡 **Να το θυμάσαι**: Μην προσπαθήσεις καν να απομνημονεύσεις τα πάντα σήμερα! Τώρα απλώς θέλω να νιώσεις αυτήν την σπίθα ενθουσιασμού για το τι είναι δυνατό. Οι λεπτομέρειες θα κολλήσουν φυσικά καθώς θα εξασκούμαστε μαζί – έτσι συμβαίνει η αληθινή μάθηση! +- **Τι ακριβώς είναι ο προγραμματισμός (και γιατί είναι το πιο κουλ πράγμα!)** – Θα ανακαλύψουμε πώς ο κώδικας είναι κυριολεκτικά η αόρατη μαγεία που τροφοδοτεί τα πάντα γύρω σου, από αυτό το ξυπνητήρι που με κάποιον τρόπο ξέρει ότι είναι Δευτέρα πρωί μέχρι τον αλγόριθμο που επιμελείται τέλεια τις προτάσεις σου στο Netflix +- **Οι γλώσσες προγραμματισμού και οι υπέροχες προσωπικότητές τους** – Φαντάσου να πηγαίνεις σε ένα πάρτυ όπου κάθε άτομο έχει εντελώς διαφορετικές υπερδυνάμεις και τρόπους επίλυσης προβλημάτων. Έτσι είναι ο κόσμος των γλωσσών προγραμματισμού, και θα λατρέψεις να τις γνωρίσεις! +- **Τα βασικά δομικά στοιχεία που κάνουν την ψηφιακή μαγεία να συμβαίνει** – Σκέψου τα σαν το απόλυτο δημιουργικό σετ LEGO. Μόλις καταλάβεις πώς ταιριάζουν αυτά τα κομμάτια, θα καταλάβεις ότι μπορείς κυριολεκτικά να φτιάξεις οτιδήποτε ονειρεύεται το μυαλό σου +- **Επαγγελματικά εργαλεία που θα σε κάνουν να νιώσεις σαν να σου έδωσαν το ξύλο ενός μάγου** – Δεν υπερβάλλω εδώ – αυτά τα εργαλεία θα σε κάνουν πραγματικά να νιώσεις ότι έχεις υπερδυνάμεις, και το καλύτερο; Είναι τα ίδια που χρησιμοποιούν οι επαγγελματίες! -> Μπορείς να κάνεις αυτό το μάθημα στο [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! +> 💡 **Να θυμάσαι το εξής**: Μην προσπαθήσεις καν να τα αποστηθίσεις όλα σήμερα! Αυτή τη στιγμή, θέλω απλώς να νιώσεις αυτόν τον σπινθήρα ενθουσιασμού για το τι είναι δυνατό. Οι λεπτομέρειες θα μείνουν φυσικά όσο εξασκούμαστε μαζί – έτσι μαθαίνει κανείς πραγματικά! -## Τι Είναι Ακριβώς ο Προγραμματισμός; +> Μπορείς να παρακολουθήσεις αυτό το μάθημα στο [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! -Εντάξει, ας απαντήσουμε στην ερώτηση του εκατομμυρίου: τι είναι πραγματικά ο προγραμματισμός; +## Λοιπόν, Τι Ακριβώς *ΕΙΝΑΙ* ο Προγραμματισμός; -Θα σου πω μια ιστορία που άλλαξε εντελώς τον τρόπο που το σκέφτομαι. Την προηγούμενη εβδομάδα, προσπαθούσα να εξηγήσω στη μαμά μου πώς να χρησιμοποιήσει το νέο έξυπνο τηλεχειριστήριο της τηλεόρασης. Έπιασα τον εαυτό μου να λέει πράγματα όπως "Πάτα το κόκκινο κουμπί, αλλά όχι το μεγάλο κόκκινο κουμπί, το μικρό κόκκινο κουμπί στα αριστερά... όχι, το άλλο αριστερά σου... καλά, τώρα κράτα το για δύο δευτερόλεπτα, όχι ένα, όχι τρία..." Σου θυμίζει κάτι; 😅 +Εντάξει, ας καταπιαστούμε με την ερώτηση του εκατομμυρίου: τι είναι πραγματικά ο προγραμματισμός; -Αυτός είναι ο προγραμματισμός! Είναι η τέχνη να δίνεις απίστευτα λεπτομερείς, βήμα προς βήμα οδηγίες σε κάτι που είναι πανίσχυρο αλλά χρειάζεται τα πάντα να του εξηγηθούν τέλεια. Μόνο που αντί να εξηγείς στη μαμά σου (που μπορεί να ρωτήσει "ποιο κόκκινο κουμπί;!"), εξηγείς σε έναν υπολογιστή (που κάνει ακριβώς ό,τι λες, ακόμα κι αν αυτό που είπες δεν είναι ακριβώς αυτό που ήθελες). +Θα σου πω μια ιστορία που άλλαξε τελείως το πώς το σκέφτομαι. Την προηγούμενη εβδομάδα, προσπαθούσα να εξηγήσω στη μητέρα μου πώς να χρησιμοποιήσει το νέο μας έξυπνο τηλεχειριστήριο της τηλεόρασης. Έπιασα τον εαυτό μου να λέει πράγματα όπως "Πάτα το κόκκινο κουμπί, όχι το μεγάλο κόκκινο, το μικρό κόκκινο αριστερά… όχι, το άλλο αριστερά σου… εντάξει, τώρα κράτα το για δύο δευτερόλεπτα, όχι ένα, όχι τρία…" Σου θυμίζει κάτι; 😅 -Αυτό που με εντυπωσίασε όταν το έμαθα πρώτη φορά: οι υπολογιστές είναι στην ουσία απλοί στον πυρήνα τους. Καταλαβαίνουν κυριολεκτικά μόνο δύο πράγματα – 1 και 0, που είναι βασικά "ναι" και "όχι" ή "αναμμένο" και "σβηστό". Αυτό είναι όλο! Αλλά εδώ γίνεται η μαγεία – δεν χρειάζεται να μιλάμε σε 1 και 0 σαν να είμαστε μέσα στο Matrix. Εκεί έρχονται οι **γλώσσες προγραμματισμού** να σώσουν την κατάσταση. Είναι σαν να έχεις τον καλύτερο μεταφραστή στον κόσμο που παίρνει τις απλές ανθρώπινες σκέψεις σου και τις μετατρέπει στη γλώσσα των υπολογιστών. +Αυτός είναι ο προγραμματισμός! Η τέχνη να δίνεις εξαιρετικά λεπτομερείς, βήμα-βήμα οδηγίες σε κάτι που είναι πολύ ισχυρό αλλά χρειάζεται τα πάντα να του λέγονται ακριβώς. Εκτός από το ότι η εξήγηση δεν πηγαίνει στη μητέρα σου (που μπορεί να ρωτήσει "ποιο κόκκινο κουμπί;"), αλλά σε έναν υπολογιστή (που απλώς κάνει ακριβώς ό,τι του λες, ακόμα και αν αυτό που είπες δεν είναι ακριβώς αυτό που ήθελες). -Και αυτό που ακόμα με συγκλονίζει κάθε πρωί όταν ξυπνάω: κυριολεκτικά *όλα* τα ψηφιακά πράγματα στη ζωή σου ξεκίνησαν από κάποιον ακριβώς σαν κι εσένα, πιθανώς καθισμένο σε πυζάμες με ένα φλιτζάνι καφέ, να γράφει κώδικα στον φορητό υπολογιστή του. Αυτό το φίλτρο του Instagram που σε κάνει να δείχνεις άψογος; Κάποιος το κωδικοποίησε. Η πρόταση που σου έφερε το νέο αγαπημένο τραγούδι; Ένας προγραμματιστής έφτιαξε αυτόν τον αλγόριθμο. Η εφαρμογή που σε βοηθά να μοιράζεσαι τους λογαριασμούς του δείπνου με φίλους; Ναι, κάποιος σκέφτηκε "αυτό είναι ενοχλητικό, μάλλον μπορώ να το διορθώσω" και… το έκανε! +Αυτό που μου προκάλεσε δέος όταν το έμαθα πρώτα: οι υπολογιστές στην ουσία είναι αρκετά απλοί στη βάση τους. Καταλαβαίνουν κυριολεκτικά μόνο δύο πράγματα – 1 και 0, που είναι βασικά "ναι" και "όχι" ή "αναμμένο" και "σβηστό". Αυτό είναι! Αλλά εδώ γίνεται μαγικό – δεν χρειάζεται να μιλάμε σε 1 και 0 σαν να είμαστε στη Μήτρα. Εδώ μπαίνουν τα **γλώσσες προγραμματισμού**. Είναι σαν να έχεις τον καλύτερο μεταφραστή στον κόσμο που μετατρέπει τις κανονικές ανθρώπινες σκέψεις σου σε γλώσσα υπολογιστή. -Όταν μαθαίνεις να προγραμματίζεις, δεν αποκτάς απλώς μια νέα δεξιότητα – γίνεσαι μέρος μιας απίστευτης κοινότητας ανθρώπων που λύνουν προβλήματα και περνούν τις μέρες τους σκεπτόμενοι, "Τι θα γινόταν αν μπορούσα να φτιάξω κάτι που κάνει τη μέρα κάποιου λίγο καλύτερη;" Ειλικρινά, υπάρχει κάτι πιο κουλ από αυτό; +Και αυτό που ακόμα μου προκαλεί πραγματικά ρίγη κάθε πρωί όταν ξυπνάω: κυριολεκτικά τα *πάντα* ψηφιακά στη ζωή σου ξεκίνησαν από κάποιον σαν εσένα, πιθανώς καθισμένο με τις πιτζάμες και ένα φλιτζάνι καφέ, να πληκτρολογεί κώδικα στο λάπτοπ του. Αυτό το φίλτρο του Instagram που σε κάνει να φαίνεσαι άψογος; Κάποιος το κωδικοποίησε. Η πρόταση που σε οδήγησε στο νέο αγαπημένο σου τραγούδι; Ένας προγραμματιστής έφτιαξε αυτόν τον αλγόριθμο. Η εφαρμογή που σε βοηθά να μοιράζεις τους λογαριασμούς του δείπνου με φίλους; Ναι, κάποιος σκέφτηκε "αυτό είναι εκνευριστικό, σίγουρα μπορώ να το διορθώσω" και μετά... το έκανε! -✅ **Κυνήγι Διασκεδαστικού Γεγονότος**: Να κάτι πολύ ωραίο για να κοιτάξεις όταν έχεις λίγο ελεύθερο χρόνο – ποιος νομίζεις ότι ήταν ο πρώτος προγραμματιστής υπολογιστή στον κόσμο; Θα σου δώσω μια υπόδειξη: δεν είναι απαραίτητα αυτός που περιμένεις! Η ιστορία πίσω από αυτό το άτομο είναι απολύτως συναρπαστική και δείχνει ότι ο προγραμματισμός πάντα είχε να κάνει με τη δημιουργική επίλυση προβλημάτων και το να σκέφτεσαι έξω από το κουτί. +Όταν μάθεις να προγραμματίζεις, δεν μαθαίνεις απλά μια νέα δεξιότητα – γίνεσαι μέρος αυτής της απίστευτης κοινότητας ανθρώπων που λύνουν προβλήματα και περνούν τις μέρες τους σκεπτόμενοι, "τι θα γινόταν αν μπορούσα να φτιάξω κάτι που κάνει τη μέρα κάποιου λίγο καλύτερη;" Ειλικρινά, υπάρχει κάτι πιο κουλ από αυτό; + +✅ **Κυνήγι Διασκεδαστικού Γεγονότος**: Εδώ είναι κάτι πολύ ενδιαφέρον για να ψάξεις όταν έχεις λίγο χρόνο – ποιος νομίζεις ότι ήταν ο πρώτος προγραμματιστής υπολογιστών στον κόσμο; Θα σου δώσω μια υπόδειξη: ίσως να μην είναι αυτό που περιμένεις! Η ιστορία αυτής της προσωπικότητας είναι απολύτως συναρπαστική και δείχνει ότι ο προγραμματισμός πάντα είχε να κάνει με τη δημιουργική επίλυση προβλημάτων και το να σκέφτεσαι έξω από τα συνηθισμένα. ### 🧠 **Ώρα Ελέγχου: Πώς Νιώθεις;** **Πάρε μια στιγμή να σκεφτείς:** -- Σου βγάζει νόημα τώρα η ιδέα του "να δίνεις οδηγίες στους υπολογιστές"; -- Μπορείς να σκεφτείς μια καθημερινή εργασία που θα ήθελες να αυτοματοποιήσεις με προγραμματισμό; -- Ποιες ερωτήσεις σου έρχονται στο μυαλό για όλο αυτό τον προγραμματισμό; +- Καταλαβαίνεις τώρα την ιδέα του "δίνοντας οδηγίες σε υπολογιστές"; +- Μπορείς να σκεφτείς μια καθημερινή δουλειά που θα ήθελες να αυτοματοποιήσεις με προγραμματισμό; +- Ποιες ερωτήσεις σου έρχονται στο μυαλό σχετικά με αυτόν τον προγραμματισμό; -> **Να θυμάσαι**: Είναι απόλυτα φυσιολογικό αν μερικές έννοιες σου φαίνονται ασαφείς τώρα. Ο προγραμματισμός είναι σαν να μαθαίνεις μια νέα γλώσσα – χρειάζεται χρόνος για να δημιουργηθούν οι νευρωνικές διαδρομές στον εγκέφαλο. Πάς πολύ καλά! +> **Να θυμάσαι**: Είναι απόλυτα φυσιολογικό αν μερικές έννοιες φαίνονται θολές τώρα. Το να μαθαίνεις προγραμματισμό είναι σαν να μαθαίνεις μια νέα γλώσσα – παίρνει χρόνο για να δημιουργήσει ο εγκέφαλός σου αυτές τις νευρωνικές διαδρομές. Τα καταφέρνεις υπέροχα! ## Οι Γλώσσες Προγραμματισμού Είναι Σαν Διάφορες Γεύσεις Μαγείας -Εντάξει, αυτό ίσως ακουστεί περίεργο, αλλά μείνε μαζί μου – οι γλώσσες προγραμματισμού είναι πολύ σαν διαφορετικά είδη μουσικής. Σκέψου το: έχεις jazz, που είναι ομαλή και αυτοσχεδιαστική, rock που είναι δυνατή και απλή, κλασική μουσική που είναι κομψή και δομημένη, και hip-hop που είναι δημιουργική και εκφραστική. Κάθε στυλ έχει τη δική του ατμόσφαιρα, τη δική του κοινότητα παθιασμένων θαυμαστών και το καθένα είναι τέλειο για διαφορετικές διαθέσεις και περιστάσεις. +Εντάξει, αυτό θα ακούγεται παράξενο, αλλά μείνε μαζί μου – οι γλώσσες προγραμματισμού μοιάζουν πολύ με διαφορετικά είδη μουσικής. Σκέψου το: έχεις τζαζ, που είναι ομαλή και αυτοσχεδιαστική, ροκ που είναι δυναμική και απλή, κλασική που είναι κομψή και δομημένη, και χιπ-χοπ που είναι δημιουργική και εκφραστική. Κάθε στυλ έχει τη δική του ατμόσφαιρα, τη δική του κοινότητα παθιασμένων θαυμαστών, και το καθένα είναι τέλειο για διαφορετικές διαθέσεις και περιστάσεις. -Οι γλώσσες προγραμματισμού λειτουργούν ακριβώς έτσι! Δεν θα έγραφες το ίδιο παιχνίδι για κινητά με γλώσσα που χρησιμοποιείς για να επεξεργαστείς τεράστια κλιματικά δεδομένα, όπως δεν θα άκουγες death metal σε τάξη γιόγκα (τουλάχιστον σε περισσότερες τάξεις γιόγκα! 😄). +Οι γλώσσες προγραμματισμού λειτουργούν ακριβώς έτσι! Δεν θα χρησιμοποιούσες την ίδια γλώσσα για να φτιάξεις ένα διασκεδαστικό παιχνίδι για κινητά που θα χρησιμοποιούσες για να επεξεργαστείς μεγάλα ποσά δεδομένων για το κλίμα, όπως δεν θα άκουγες ντεθ μέταλ σε μάθημα γιόγκα (εντάξει, στις περισσότερες γιόγκα! 😄). -Αλλά κάνε μου την χάρη, κάθε φορά που το σκέφτομαι με εκπλήσσει: αυτές οι γλώσσες είναι σαν να έχεις τον πιο υπομονετικό, λαμπρό διερμηνέα στον κόσμο καθισμένο δίπλα σου. Μπορείς να εκφράσεις τις ιδέες σου με τρόπο φυσικό στον ανθρώπινο εγκέφαλό σου και αυτοί αναλαμβάνουν όλη την πολύπλοκη δουλειά της μετάφρασης σε 1 και 0 που μιλάνε οι υπολογιστές. Είναι σαν να έχεις έναν φίλο που μιλάει τέλεια και τις δύο γλώσσες, "ανθρώπινης δημιουργικότητας" και "λογικής υπολογιστή" – και δεν κουράζεται ποτέ, δεν χρειάζεται διαλείμματα για καφέ και ποτέ δεν σε κρίνει αν ρωτήσεις ξανά την ίδια ερώτηση! +Αλλά αυτό που με αφήνει έκπληκτο κάθε φορά που το σκέφτομαι: αυτές οι γλώσσες είναι σαν να έχεις τον πιο υπομονετικό, λαμπρό διερμηνέα στον κόσμο δίπλα σου. Μπορείς να εκφράσεις τις ιδέες σου με τρόπο που νιώθεις φυσικός για τον ανθρώπινο εγκέφαλό σου, και αυτοί αναλαμβάνουν όλη τη πολύπλοκη δουλειά του να το μεταφράσουν στα 1 και 0 που μιλάνε οι υπολογιστές. Είναι σαν να έχεις έναν φίλο που μιλά άπταιστα και τις δύο "ανθρώπινη δημιουργικότητα" και "λογική υπολογιστή" – και ποτέ δεν κουράζεται, δεν χρειάζεται διάλειμμα για καφέ και δεν σε κρίνει αν ρωτήσεις την ίδια ερώτηση δύο φορές! ### Δημοφιλείς Γλώσσες Προγραμματισμού και Χρήσεις τους ```mermaid mindmap root((Γλώσσες Προγραμματισμού)) - Ανάπτυξη Ιστού + Web Development JavaScript Μαγεία Frontend Διαδραστικές Ιστοσελίδες TypeScript JavaScript + Τύποι Επιχειρησιακές Εφαρμογές - Δεδομένα & ΤΝ + Data & AI Python Επιστήμη Δεδομένων Μηχανική Μάθηση - Αυτοματισμός + Αυτοματοποίηση R Στατιστική Έρευνα - Κινητές Εφαρμογές + Mobile Apps Java Android Επιχειρήσεις @@ -109,7 +110,7 @@ mindmap Kotlin Σύγχρονο Android Πολυπλατφορμικό - Συστήματα & Απόδοση + Systems & Performance C++ Παιχνίδια Κρίσιμη Απόδοση @@ -120,41 +121,41 @@ mindmap Υπηρεσίες Νέφους Κλιμακούμενο Backend ``` -| Γλώσσα | Καλύτερα για | Γιατί είναι δημοφιλής | -|----------|----------|------------------| -| **JavaScript** | Ανάπτυξη ιστοσελίδων, διεπαφές χρήστη | Τρέχει στους περιηγητές και υποστηρίζει διαδραστικές ιστοσελίδες | -| **Python** | Επιστήμη δεδομένων, αυτοματοποίηση, AI | Εύκολη στην ανάγνωση και μάθηση, ισχυρές βιβλιοθήκες | +| Γλώσσα | Καλύτερη για | Γιατί Είναι Δημοφιλής | +|---------|-----------|----------------------| +| **JavaScript** | Ανάπτυξη ιστοσελίδων, διεπαφές χρήστη | Τρέχει στους φυλλομετρητές και τροφοδοτεί διαδραστικές ιστοσελίδες | +| **Python** | Επιστήμη δεδομένων, αυτοματοποίηση, AI | Εύκολη στην ανάγνωση και εκμάθηση, ισχυρές βιβλιοθήκες | | **Java** | Επιχειρησιακές εφαρμογές, εφαρμογές Android | Ανεξάρτητη πλατφόρμα, ανθεκτική σε μεγάλα συστήματα | | **C#** | Εφαρμογές Windows, ανάπτυξη παιχνιδιών | Ισχυρή υποστήριξη από το οικοσύστημα της Microsoft | -| **Go** | Υπηρεσίες νέφους, συστήματα backend | Γρήγορη, απλή, σχεδιασμένη για σύγχρονους υπολογιστές | +| **Go** | Υπηρεσίες cloud, backend συστήματα | Γρήγορη, απλή, σχεδιασμένη για σύγχρονη πληροφορική | -### Γλώσσες Υψηλού Επίπέδου έναντι Χαμηλού Επίπεδου +### Γλώσσες Υψηλού Επίπεδου vs. Χαμηλού Επίπεδου -Εντάξει, αυτή ήταν ειλικρινά η έννοια που "έσπασε" το μυαλό μου όταν ξεκίνησα, οπότε θα μοιραστώ την αναλογία που τελικά μου έκανε κλικ – και ελπίζω να σε βοηθήσει και εσένα! +Εντάξει, αυτή ήταν ειλικρινά η έννοια που μου έσπασε το μυαλό όταν ξεκίνησα, οπότε θα μοιραστώ την αναλογία που τελικά με βοήθησε να την καταλάβω – και ελπίζω να σε βοηθήσει κι εσένα! -Φαντάσου ότι επισκέπτεσαι μια χώρα όπου δεν μιλάς τη γλώσσα και απελπισμένα πρέπει να βρεις την πλησιέστερη τουαλέτα (έχουμε περάσει όλοι από αυτό, σωστά; 😅): +Φαντάσου ότι βρίσκεσαι σε μια χώρα όπου δεν μιλάς τη γλώσσα, και χρειάζεσαι απεγνωσμένα να βρεις την πιο κοντινή τουαλέτα (όλοι έχουμε βρεθεί εκεί, σωστά; 😅): -- **Ο προγραμματισμός χαμηλού επιπέδου** είναι σαν να μαθαίνεις τόσο καλά τη τοπική διάλεκτο που μπορείς να μιλήσεις με την γιαγιά που πουλάει φρούτα στη γωνία, χρησιμοποιώντας πολιτισμικές αναφορές, τοπική αργκό και αστεία που καταλαβαίνει μόνο κάποιος που μεγάλωσε εκεί. Πολύ εντυπωσιακό και απίστευτα αποδοτικό... αν είσαι άπταιστος! Αλλά αρκετά συντριπτικό όταν απλά ψάχνεις για τουαλέτα. +- **Ο προγραμματισμός χαμηλού επιπέδου** είναι σαν να μαθαίνεις τη ντόπια διάλεκτο τόσο καλά που μπορείς να συνομιλήσεις με τη γιαγιά που πουλάει φρούτα στη γωνία χρησιμοποιώντας πολιτισμικές αναφορές, τοπικά ιδιώματα και αστεία που μόνο κάποιος που μεγάλωσε εκεί θα καταλάβαινε. Πολύ εντυπωσιακό και απίστευτα αποδοτικό... αν τυχαίνει να μιλάς την γλώσσα! Αλλά αρκετά συντριπτικό όταν απλώς προσπαθείς να βρεις ένα μπάνιο. -- **Ο προγραμματισμός υψηλού επιπέδου** είναι σαν να έχεις αυτόν τον υπέροχο ντόπιο φίλο που απλά σε καταλαβαίνει. Μπορείς να πεις "Πραγματικά πρέπει να βρω μια τουαλέτα" στα απλά αγγλικά και εκείνος να μεταφράσει όλη την πολιτισμική γλώσσα και να σου δώσει οδηγίες που βγάζουν απόλυτο νόημα στον εγκέφαλό σου που δεν είναι ντόπιος. +- **Ο προγραμματισμός υψηλού επιπέδου** είναι σαν να έχεις αυτόν τον εκπληκτικό ντόπιο φίλο που σε καταλαβαίνει. Μπορείς να πεις "Πραγματικά χρειάζομαι να βρω μια τουαλέτα" στα απλά αγγλικά, και αυτοί αναλαμβάνουν όλη τη μετάφραση στην κουλτούρα και σου δίνουν οδηγίες με τρόπο που έχει απόλυτο νόημα για το μη-ντόπιο μυαλό σου. Σε όρους προγραμματισμού: -- **Οι γλώσσες χαμηλού επιπέδου** (όπως Assembly ή C) σου επιτρέπουν να έχεις απίστευτα λεπτομερείς συζητήσεις με το πραγματικό υλικό του υπολογιστή, αλλά πρέπει να σκέφτεσαι σαν μηχανή, που είναι... ας το πούμε, μεγάλη πνευματική αλλαγή! -- **Οι γλώσσες υψηλού επιπέδου** (όπως JavaScript, Python ή C#) σε αφήνουν να σκέφτεσαι σαν άνθρωπος ενώ αυτές διαχειρίζονται όλη τη μηχανική ορολογία στα παρασκήνια. Επιπλέον, έχουν αυτές τις απίστευτα φιλόξενες κοινότητες γεμάτες ανθρώπους που θυμούνται πώς ήταν να είσαι αρχάριος και πραγματικά θέλουν να βοηθήσουν! +- Οι **γλώσσες χαμηλού επιπέδου** (όπως Assembly ή C) σου επιτρέπουν να έχεις απίστευτα λεπτομερείς συνομιλίες με το υλικό του υπολογιστή, αλλά πρέπει να σκέφτεσαι σαν μηχανή, το οποίο... ας πούμε ότι είναι αρκετά μεγάλο άλμα νοητικά! +- Οι **γλώσσες υψηλού επιπέδου** (όπως JavaScript, Python ή C#) σου επιτρέπουν να σκέφτεσαι σαν άνθρωπος ενώ αυτοί αναλαμβάνουν όλη τη "μηχανική γλώσσα" πίσω από τα παρασκήνια. Επιπλέον, έχουν απίστευτες, φιλόξενες κοινότητες γεμάτες ανθρώπους που θυμούνται πώς ήταν να είσαι νέος και πραγματικά θέλουν να βοηθήσουν! -Μαντέψτε με ποια θα σε προτείνω να ξεκινήσεις; 😉 Οι γλώσσες υψηλού επιπέδου είναι σαν τις βοηθητικές ρόδες που δεν θέλεις να βγάλεις ποτέ γιατί κάνουν όλη την εμπειρία πολύ πιο απολαυστική! +Μάντεψε με ποιο ξεκινάω να προτείνω; 😉 Οι γλώσσες υψηλού επιπέδου είναι σαν να έχεις βοηθητικές ρόδες που δεν θέλεις ποτέ να αφαιρέσεις γιατί κάνουν όλη την εμπειρία πολύ πιο ευχάριστη! ```mermaid flowchart TB A["👤 Ανθρώπινη Σκέψη:
'Θέλω να υπολογίσω αριθμούς Fibonacci'"] --> B{Επίπεδο Γλώσσας} - B -->|Υψηλού Επιπέδου| C["🌟 JavaScript/Python
Εύκολο στην ανάγνωση και γραφή"] + B -->|Υψηλού Επιπέδου| C["🌟 JavaScript/Python
Εύκολο στην ανάγνωση και τη συγγραφή"] B -->|Χαμηλού Επιπέδου| D["⚙️ Assembly/C
Άμεσος έλεγχος υλικού"] C --> E["📝 Γράψε: fibonacci(10)"] D --> F["📝 Γράψε: mov r0,#00
sub r0,r0,#01"] - E --> G["🤖 Κατανόηση Υπολογιστή:
Ο μεταφραστής χειρίζεται την πολυπλοκότητα"] + E --> G["🤖 Κατανόηση Υπολογιστή:
Ο μεταφραστής διαχειρίζεται την πολυπλοκότητα"] F --> G G --> H["💻 Ίδιο Αποτέλεσμα:
0, 1, 1, 2, 3, 5, 8, 13..."] @@ -163,15 +164,15 @@ flowchart TB style D fill:#fff3e0 style H fill:#e8f5e8 ``` -### Άφησέ Με να Σου Δείξω Γιατί Οι Γλώσσες Υψηλού Επίπεδου Είναι Πολύ Φιλικές +### Άσε Με Να Σου Δείξω Γιατί οι Γλώσσες Υψηλού Επιπέδου Είναι Πιο Φιλικές -Εντάξει, πρόκειται να σου δείξω κάτι που δείχνει τέλεια γιατί αγάπησα τις γλώσσες υψηλού επιπέδου, αλλά πρώτα – πρέπει να μου υποσχεθείς κάτι. Όταν δεις το πρώτο παράδειγμα κώδικα, μην πανικοβληθείς! Προορίζεται να φαίνεται τρομακτικό. Αυτό είναι το σημείο που θέλω να κάνω! +Εντάξει, θα σου δείξω κάτι που αναδεικνύει τέλεια γιατί ερωτεύτηκα τις γλώσσες υψηλού επιπέδου, αλλά πρώτα – θέλω να μου υποσχεθείς κάτι. Όταν δεις το πρώτο παράδειγμα κώδικα, μην πανικοβληθείς! Είναι φυσιολογικό να φαίνεται λίγο τρομακτικό. Αυτό ακριβώς τονίζω! -Θα δούμε το ίδιο ακριβώς έργο γραμμένο σε δύο τελείως διαφορετικά στυλ. Και τα δύο δημιουργούν την ακολουθία Fibonacci – αυτό το όμορφο μαθηματικό μοτίβο όπου κάθε αριθμός είναι το άθροισμα των δύο προηγούμενων: 0, 1, 1, 2, 3, 5, 8, 13... (Διασκεδαστικό γεγονός: θα βρεις αυτό το μοτίβο κυριολεκτικά παντού στη φύση – στις σπείρες σπόρων ηλίανθου, στα μοτίβα κουκουναριών, ακόμα και στο πώς σχηματίζονται οι γαλαξίες!) +Θα δούμε την ίδια ακριβώς εργασία γραμμένη σε δύο εντελώς διαφορετικά στυλ. Και τα δύο δημιουργούν την ακολουθία Fibonacci – είναι ένα όμορφο μαθηματικό μοτίβο όπου κάθε αριθμός είναι το άθροισμα των δύο προηγουμένων: 0, 1, 1, 2, 3, 5, 8, 13... (Διασκεδαστικό γεγονός: θα βρεις αυτό το μοτίβο κυριολεκτικά παντού στη φύση – στο σπείρωμα των ηλιόσπορων, στα μοτίβα των κουκουναριών, ακόμα και στον τρόπο σχηματισμού των γαλαξιών!) -Έτοιμος να δεις τη διαφορά; Πάμε! +Έτοιμος να δεις τη διαφορά; Ας πάμε! -**Γλώσσα υψηλού επιπέδου (JavaScript) – Ανθρώπινη φιλική:** +**Γλώσσα υψηλού επιπέδου (JavaScript) – Φιλική στον άνθρωπο:** ```javascript // Βήμα 1: Βασική ρύθμιση Fibonacci @@ -182,18 +183,18 @@ let next = 1; console.log('Fibonacci sequence:'); ``` -**Αυτό κάνει ο κώδικας:** -- **Δηλώνει** μια σταθερά για να καθορίσει πόσους αριθμούς Fibonacci θέλουμε να δημιουργήσουμε -- **Αρχικοποιεί** δύο μεταβλητές για να παρακολουθεί τους τρέχοντες και επόμενους αριθμούς στην ακολουθία -- **Ορίζει** τις αρχικές τιμές (0 και 1) που καθορίζουν το μοτίβο Fibonacci -- **Εμφανίζει** ένα μήνυμα κεφαλίδας για να ταυτοποιήσει την έξοδο μας +**Αυτό κάνει αυτός ο κώδικας:** +- **Δηλώνει** μια σταθερά που καθορίζει πόσους αριθμούς Fibonacci θέλουμε να παράγουμε +- **Αρχικοποιεί** δύο μεταβλητές για να παρακολουθεί τους τρέχοντες και τους επόμενους αριθμούς της σειράς +- **Ορίζει** τις αρχικές τιμές (0 και 1) που καθορίζουν το μοτίβο Fibonacci +- **Εμφανίζει** ένα επικεφαλίδα μήνυμα για να αναγνωρίσουμε την έξοδο μας ```javascript -// Βήμα 2: Δημιουργήστε τη σειρά με έναν βρόχο +// Βήμα 2: Δημιουργήστε την ακολουθία με έναν βρόχο for (let i = 0; i < fibonacciCount; i++) { console.log(`Position ${i + 1}: ${current}`); - // Υπολογίστε τον επόμενο αριθμό στη σειρά + // Υπολογίστε τον επόμενο αριθμό στην ακολουθία const sum = current + next; current = next; next = sum; @@ -201,10 +202,10 @@ for (let i = 0; i < fibonacciCount; i++) { ``` **Αναλύοντας τι συμβαίνει εδώ:** -- **Επαναλαμβάνει** μέσω κάθε θέσης στην ακολουθία μας χρησιμοποιώντας έναν βρόχο `for` -- **Εμφανίζει** κάθε αριθμό με τη θέση του χρησιμοποιώντας τη μορφοποίηση προτύπου συμβολοσειράς -- **Υπολογίζει** τον επόμενο αριθμό Fibonacci προσθέτοντας τις τρέχουσες και επόμενες τιμές -- **Ενημερώνει** τις μεταβλητές παρακολούθησης για να προχωρήσει στην επόμενη επανάληψη +- **Κάνει βρόχο** μέσα από κάθε θέση στη σειρά μας χρησιμοποιώντας έναν `for` βρόχο +- **Εμφανίζει** κάθε αριθμό με τη θέση του χρησιμοποιώντας μορφοποίηση template literal +- **Υπολογίζει** τον επόμενο αριθμό Fibonacci προσθέτοντας την τρέχουσα με την επόμενη τιμή +- **Ενημερώνει** τις μεταβλητές παρακολούθησης για να μετακινηθεί στον επόμενο γύρο ```javascript // Βήμα 3: Σύγχρονη λειτουργική προσέγγιση @@ -224,10 +225,10 @@ console.log(fibSequence); ``` **Στο παραπάνω έχουμε:** -- **Δημιουργήσει** μια επαναχρησιμοποιήσιμη συνάρτηση χρησιμοποιώντας τη σύγχρονη σύνταξη βέλους -- **Κατασκευάσει** έναν πίνακα για να αποθηκεύσουμε την πλήρη ακολουθία αντί να εμφανίζουμε έναν-έναν -- **Χρησιμοποιήσει** δεικτοδότηση πίνακα για να υπολογίσουμε κάθε νέο αριθμό από τις προηγούμενες τιμές -- **Επιστρέψει** την πλήρη ακολουθία για ευέλικτη χρήση σε άλλα μέρη του προγράμματος +- **Δημιουργήσει** μια επαναχρησιμοποιήσιμη συνάρτηση χρησιμοποιώντας σύγχρονη σύνταξη arrow function +- **Κατασκευάσει** έναν πίνακα για να αποθηκεύσουμε όλη τη σειρά αντί να την εμφανίζουμε έναν έναν +- **Χρησιμοποιήσει** δείκτες πίνακα για να υπολογίσουμε κάθε νέο αριθμό από τις προηγούμενες τιμές +- **Επιστρέψει** όλη τη σειρά για ευέλικτη χρήση σε άλλα μέρη του προγράμματός μας **Γλώσσα χαμηλού επιπέδου (ARM Assembly) – Φιλική στον υπολογιστή:** @@ -256,27 +257,28 @@ back add r0,r1 end ``` -Παρατήρησε πώς η έκδοση JavaScript διαβάζεται σχεδόν σαν αγγλικές οδηγίες, ενώ η έκδοση Assembly χρησιμοποιεί κρυπτογραφημένες εντολές που ελέγχουν άμεσα τον επεξεργαστή του υπολογιστή. Και οι δύο πραγματοποιούν το ίδιο έργο, αλλά η γλώσσα υψηλού επιπέδου είναι πολύ πιο εύκολη για τους ανθρώπους να καταλάβουν, να γράψουν και να διατηρήσουν. +Παρατήρησε πώς η έκδοση JavaScript διαβάζεται σχεδόν σαν οδηγίες στα Αγγλικά, ενώ η έκδοση Assembly χρησιμοποιεί κρυπτογραφικές εντολές που ελέγχουν απευθείας τον επεξεργαστή του υπολογιστή. Και οι δύο εκτελούν την ίδια ακριβώς εργασία, αλλά η γλώσσα υψηλού επιπέδου είναι πολύ πιο εύκολη για τους ανθρώπους να καταλάβουν, να γράψουν και να συντηρήσουν. **Κύριες διαφορές που θα παρατηρήσεις:** -- **Αναγνωσιμότητα**: Η JavaScript χρησιμοποιεί περιγραφικά ονόματα όπως `fibonacciCount` ενώ η Assembly χρησιμοποιεί κρυπτογραφικές ετικέτες όπως `r0`, `r1` -- **Σχόλια**: Οι γλώσσες υψηλού επιπέδου ενθαρρύνουν επεξηγηματικά σχόλια που κάνουν τον κώδικα αυτο-τεκμηριωμένο -- **Δομή**: Η λογική ροή του JavaScript ταιριάζει με τον τρόπο που οι άνθρωποι σκέφτονται για τα προβλήματα βήμα προς βήμα -- **Συντήρηση**: Η ενημέρωση της έκδοσης JavaScript για διάφορες απαιτήσεις είναι απλή και καθαρή +- **Αναγνωσιμότητα**: Η JavaScript χρησιμοποιεί περιγραφικά ονόματα όπως `fibonacciCount` ενώ η Assembly χρησιμοποιεί κρυπτικά ετικέτες όπως `r0`, `r1` +- **Σχόλια**: Οι γλώσσες υψηλού επιπέδου ενθαρρύνουν επεξηγηματικά σχόλια που κάνουν τον κώδικα αυτο-τεκμηριούμενο +- **Δομή**: Η λογική ροή της JavaScript ταιριάζει με τον τρόπο που οι άνθρωποι σκέφτονται τα προβλήματα βήμα-βήμα +- **Συντήρηση**: Η ενημέρωση της έκδοσης JavaScript για διαφορετικές απαιτήσεις είναι απλή και ξεκάθαρη + +✅ **Σχετικά με τη σειρά Fibonacci**: Αυτό το απόλυτα υπέροχο αριθμητικό μοτίβο (όπου κάθε αριθμός ισούται με το άθροισμα των δύο προηγούμενων: 0, 1, 1, 2, 3, 5, 8...) εμφανίζεται κυριολεκτικά *παντού* στη φύση! Θα το βρείτε στις σπείρες των ηλίανθων, στα μοτίβα των πετάλων πεύκου, στον τρόπο που καμπυλώνουν τα κελύφη του ναυτίλου, και ακόμα στον τρόπο που αναπτύσσονται τα κλαδιά των δέντρων. Είναι πραγματικά εντυπωσιακό το πώς τα μαθηματικά και ο κώδικας μπορούν να μας βοηθήσουν να κατανοήσουμε και να αναπαράγουμε τα μοτίβα που η φύση χρησιμοποιεί για να δημιουργεί ομορφιά! -✅ **Σχετικά με την ακολουθία Fibonacci**: Αυτό το απολύτως υπέροχο μοτίβο αριθμών (όπου κάθε αριθμός ισούται με το άθροισμα των δύο προηγούμενων: 0, 1, 1, 2, 3, 5, 8...) εμφανίζεται κυριολεκτικά *παντού* στη φύση! Θα το βρείτε στις σπείρες των ηλιοτροπίων, στα μοτίβα των κουκουναριών, στον τρόπο που καμπυλώνουν τα κοχύλια ναυτίλου, και ακόμα και στο πώς μεγαλώνουν τα κλαδιά των δέντρων. Είναι πραγματικά εντυπωσιακό το πώς τα μαθηματικά και ο κώδικας μπορούν να μας βοηθήσουν να κατανοήσουμε και να αναπαράγουμε τα μοτίβα που χρησιμοποιεί η φύση για να δημιουργήσει ομορφιά! -## Τα Θεμελιώδη Στοιχεία Που Δημιουργούν Τη Μαγεία +## Τα Τούβλα που Δημιουργούν τη Μαγεία -Εντάξει, τώρα που είδες πώς μοιάζουν οι γλώσσες προγραμματισμού σε δράση, ας αναλύσουμε τα βασικά κομμάτια που αποτελούν κυριολεκτικά κάθε πρόγραμμα που έχει γράψει ποτέ άνθρωπος. Σκέψου τα σαν τα απαραίτητα υλικά στην αγαπημένη σου συνταγή – μόλις καταλάβεις τι κάνει το καθένα, θα μπορείς να διαβάζεις και να γράφεις κώδικα σε σχεδόν οποιαδήποτε γλώσσα! +Εντάξει, τώρα που είδατε πώς μοιάζουν οι γλώσσες προγραμματισμού στην πράξη, ας αναλύσουμε τα θεμελιώδη κομμάτια που απαρτίζουν κυριολεκτικά κάθε πρόγραμμα που έχει γραφτεί ποτέ. Σκεφτείτε τα σαν τα βασικά υλικά στην αγαπημένη σας συνταγή – μόλις καταλάβετε τι κάνει το καθένα, θα μπορείτε να διαβάζετε και να γράφετε κώδικα σχεδόν σε οποιαδήποτε γλώσσα! -Αυτό είναι κάπως σαν να μαθαίνεις τη γραμματική του προγραμματισμού. Θυμάσαι στο σχολείο όταν μάθαινες για ουσιαστικά, ρήματα και πώς να σχηματίζεις προτάσεις; Ο προγραμματισμός έχει τη δική του έκδοση γραμματικής, και ειλικρινά, είναι πολύ πιο λογική και συγχωρητική από τη γραμματική της Αγγλικής γλώσσας! 😄 +Αυτό μοιάζει κάπως με το να μαθαίνεις τη γραμματική του προγραμματισμού. Θυμηθείτε όταν στο σχολείο μάθατε για ουσιαστικά, ρήματα και πώς να φτιάχνετε προτάσεις; Ο προγραμματισμός έχει τη δική του έκδοση γραμματικής και ειλικρινά, είναι πολύ πιο λογική και επιεικής από ό,τι ήταν η αγγλική γραμματική! 😄 -### Δηλώσεις: Οι Οδηγίες Βήμα προς Βήμα +### Δηλώσεις: Οι Οδηγίες Βήμα-Βήμα -Ας ξεκινήσουμε με τις **δηλώσεις** – αυτές είναι σαν μεμονωμένες προτάσεις σε μια συνομιλία με τον υπολογιστή σου. Κάθε δήλωση λέει στον υπολογιστή να κάνει ένα συγκεκριμένο πράγμα, σαν να δίνεις οδηγίες: "Στρίψε αριστερά εδώ", "Σταμάτα στο κόκκινο φανάρι", "Πάρκαρε εκεί". +Ας ξεκινήσουμε με τις **δηλώσεις** – είναι σαν μεμονωμένες προτάσεις σε μια συζήτηση με τον υπολογιστή σας. Κάθε δήλωση λέει στον υπολογιστή να κάνει ένα συγκεκριμένο πράγμα, κάπως σαν να δίνετε οδηγίες: "Στρίψε αριστερά εδώ," "Σταμάτα στο κόκκινο φανάρι," "Παρκάρισε εκεί." -Αυτό που λατρεύω στις δηλώσεις είναι πόσο ευανάγνωστες είναι συνήθως. Δες αυτό: +Αυτό που μου αρέσει στις δηλώσεις είναι το πόσο αναγνώσιμες είναι συνήθως. Ρίξτε μια ματιά: ```javascript // Βασικές δηλώσεις που εκτελούν μεμονωμένες ενέργειες @@ -284,31 +286,31 @@ const userName = "Alex"; console.log("Hello, world!"); const sum = 5 + 3; ``` - -**Αυτό που κάνει αυτός ο κώδικας:** -- **Δηλώνει** μια σταθερή μεταβλητή για να αποθηκεύσει το όνομα χρήστη -- **Εμφανίζει** ένα μήνυμα χαιρετισμού στην κονσόλα -- **Υπολογίζει** και αποθηκεύει το αποτέλεσμα μιας μαθηματικής λειτουργίας + +**Αυτό που κάνει ο κώδικας:** +- **Δηλώνει** μια σταθερά μεταβλητή για να αποθηκεύσει το όνομα ενός χρήστη +- **Εμφανίζει** ένα μήνυμα χαιρετισμού στην κονσόλα +- **Υπολογίζει** και αποθηκεύει το αποτέλεσμα μιας μαθηματικής πράξης ```javascript // Δηλώσεις που αλληλεπιδρούν με ιστοσελίδες document.title = "My Awesome Website"; document.body.style.backgroundColor = "lightblue"; ``` - -**Βήμα προς βήμα, αυτό συμβαίνει:** -- **Τροποποιεί** τον τίτλο της ιστοσελίδας που εμφανίζεται στην καρτέλα του προγράμματος περιήγησης -- **Αλλάζει** το χρώμα φόντου ολόκληρης της σελίδας -### Μεταβλητές: Το Σύστημα Μνήμης Του Προγράμματός Σου +**Βήμα-βήμα, αυτό συμβαίνει:** +- **Τροποποιεί** τον τίτλο της ιστοσελίδας που εμφανίζεται στην καρτέλα του προγράμματος περιήγησης +- **Αλλάζει** το χρώμα φόντου ολόκληρου του σώματος της σελίδας -Εντάξει, οι **μεταβλητές** είναι ειλικρινά μία από τις αγαπημένες μου έννοιες για διδασκαλία επειδή είναι τόσο παρόμοιες με πράγματα που ήδη χρησιμοποιείς κάθε μέρα! +### Μεταβλητές: Το Σύστημα Μνήμης του Προγράμματός Σας -Σκέψου για λίγο τη λίστα επαφών του τηλεφώνου σου. Δεν απομνημονεύεις όλους τους αριθμούς τηλεφώνου – αντίθετα, αποθηκεύεις "Μαμά", "Καλύτερος Φίλος" ή "Το Πιτσαρία Που Παραδίδει Έως Τις 2 ΠΜ" και αφήνεις το τηλέφωνό σου να θυμάται τους πραγματικούς αριθμούς. Οι μεταβλητές λειτουργούν ακριβώς με τον ίδιο τρόπο! Είναι σαν ετικετοποιημένα δοχεία όπου το πρόγραμμα μπορεί να αποθηκεύει πληροφορίες και να τις ανακαλεί αργότερα χρησιμοποιώντας ένα όνομα που βγάζει νόημα. +Εντάξει, οι **μεταβλητές** είναι ειλικρινά από τις αγαπημένες μου έννοιες για διδασκαλία επειδή μοιάζουν τόσο πολύ με πράγματα που ήδη χρησιμοποιείτε καθημερινά! -Αυτό που είναι πραγματικά κουλ: οι μεταβλητές μπορούν να αλλάζουν καθώς τρέχει το πρόγραμμα (γι' αυτό και λέγονται "μεταβλητές" – κατάλαβες τι έκαναν εκεί;). Ακριβώς όπως μπορείς να ενημερώνεις την επαφή ενός πιτσαρία όταν ανακαλύπτεις κάπου ακόμα καλύτερο, οι μεταβλητές μπορούν να ενημερώνονται καθώς το πρόγραμμα μαθαίνει νέα δεδομένα ή όταν οι καταστάσεις αλλάζουν! +Σκεφτείτε για μια στιγμή τη λίστα επαφών στο τηλέφωνό σας. Δεν απομνημονεύετε όλα τα τηλέφωνα – αντίθετα, αποθηκεύετε "Μαμά," "Καλύτερος Φίλος," ή "Εστιατόριο που Παραδίδει ως τις 2 π.μ." και αφήνετε το τηλέφωνο να θυμάται τους πραγματικούς αριθμούς. Οι μεταβλητές δουλεύουν ακριβώς το ίδιο! Είναι σαν δοχεία με ετικέτες όπου το πρόγραμμα μπορεί να αποθηκεύει πληροφορίες και να τις ανακτά αργότερα με ένα όνομα που έχει νόημα. -Άσε με να σου δείξω πόσο απλό και όμορφο μπορεί να είναι αυτό: +Αυτό που είναι πραγματικά ωραίο: οι μεταβλητές μπορούν να αλλάξουν καθώς τρέχει το πρόγραμμα (γι’ αυτό λέγονται "μεταβλητές" – καταλαβαίνετε το λογοπαίγνιο;). Ακριβώς όπως μπορεί να ενημερώσετε την επαφή του εστιατορίου πίτσας όταν βρείτε κάτι καλύτερο, έτσι και οι μεταβλητές μπορούν να ενημερώνονται καθώς το πρόγραμμα μαθαίνει νέα πράγματα ή αλλάζουν οι συνθήκες! + +Ας δείξω πόσο όμορφα απλό μπορεί να είναι αυτό: ```javascript // Βήμα 1: Δημιουργία βασικών μεταβλητών @@ -317,26 +319,26 @@ let currentWeather = "sunny"; let temperature = 75; let isRaining = false; ``` - -**Κατανόηση αυτών των εννοιών:** -- **Αποθήκευση** αμετάβλητων τιμών σε μεταβλητές `const` (όπως το όνομα του ιστότοπου) -- **Χρήση** `let` για τιμές που μπορούν να αλλάζουν μέσα στο πρόγραμμα -- **Ανάθεση** διαφορετικών τύπων δεδομένων: συμβολοσειρές (κείμενο), αριθμοί, και boolean (αληθές/ψευδές) -- **Επιλογή** περιγραφικών ονομάτων που εξηγούν τι αποθηκεύει κάθε μεταβλητή + +**Κατανόηση αυτών των εννοιών:** +- **Αποθηκεύει** αμετάβλητες τιμές σε `const` μεταβλητές (π.χ. όνομα ιστοσελίδας) +- **Χρησιμοποιεί** `let` για τιμές που μπορεί να αλλάζουν κατά τη διάρκεια του προγράμματος +- **Αναθέτει** διαφορετικούς τύπους δεδομένων: αλφαριθμητικά (κείμενο), αριθμούς και boolean (true/false) +- **Επιλέγει** περιγραφικά ονόματα που εξηγούν τι περιέχει κάθε μεταβλητή ```javascript -// Βήμα 2: Εργασία με αντικείμενα για ομαδοποίηση σχετικών δεδομένων +// Βήμα 2: Εργασία με αντικείμενα για την ομαδοποίηση σχετικών δεδομένων const weatherData = { location: "San Francisco", humidity: 65, windSpeed: 12 }; ``` - -**Στο παραπάνω έχουμε:** -- **Δημιουργήσει** ένα αντικείμενο για να ομαδοποιήσουμε σχετικές πληροφορίες καιρού -- **Οργανώσει** πολλά δεδομένα κάτω από ένα όνομα μεταβλητής -- **Χρησιμοποιήσει** ζεύγη κλειδί-τιμή για να ετικετοποιήσουμε κάθε πληροφορία ξεκάθαρα + +**Πάνω απ’ όλα, έχουμε:** +- **Δημιουργήσει** ένα αντικείμενο για να ομαδοποιήσουμε σχετικές πληροφορίες καιρού +- **Οργανώσει** πολλαπλές πληροφορίες κάτω από ένα όνομα μεταβλητής +- **Χρησιμοποιήσει** ζεύγη κλειδί-τιμής για να ετικετοποιήσουμε καθαρά κάθε κομμάτι πληροφορίας ```javascript // Βήμα 3: Χρήση και ενημέρωση μεταβλητών @@ -347,36 +349,36 @@ console.log(`Wind speed: ${weatherData.windSpeed} mph`); currentWeather = "cloudy"; temperature = 68; ``` - -**Ας κατανοήσουμε κάθε μέρος:** -- **Εμφάνιση** πληροφοριών χρησιμοποιώντας template literals με σύνταξη `${}` -- **Πρόσβαση** σε ιδιότητες αντικειμένων με τελεία (`weatherData.windSpeed`) -- **Ενημέρωση** μεταβλητών δηλωμένων με `let` για να αντανακλούν μεταβαλλόμενες συνθήκες -- **Συνδυασμός** πολλών μεταβλητών για δημιουργία νοημάτων μηνυμάτων + +**Ας κατανοήσουμε κάθε μέρος:** +- **Εμφανίζει** πληροφορίες χρησιμοποιώντας template literals με τη σύνταξη `${}` +- **Προσπελαύνει** τις ιδιότητες του αντικειμένου με σημειογραφία τελείας (`weatherData.windSpeed`) +- **Ενημερώνει** μεταβλητές δηλωμένες με `let` για να αντανακλούν αλλαγές στις συνθήκες +- **Συνδυάζει** πολλαπλές μεταβλητές για να δημιουργήσει νοηματικά μηνύματα ```javascript -// Βήμα 4: Σύγχρονο αποδόμημα για πιο καθαρό κώδικα +// Βήμα 4: Σύγχρονη αποδόμηση για πιο καθαρό κώδικα const { location, humidity } = weatherData; console.log(`${location} humidity: ${humidity}%`); ``` - -**Τι πρέπει να ξέρεις:** -- **Εξαγωγή** συγκεκριμένων ιδιοτήτων από αντικείμενα με αποδομητική ανάθεση -- **Δημιουργία** νέων μεταβλητών αυτόματα με τα ίδια ονόματα όπως τα κλειδιά των αντικειμένων -- **Απλοποίηση** του κώδικα αποφεύγοντας επαναλαμβανόμενη χρήση τελείας -### Ροή Ελέγχου: Διδάσκοντας Το Πρόγραμμά Σου Να Σκέφτεται +**Τι πρέπει να ξέρετε:** +- **Εξάγει** συγκεκριμένες ιδιότητες από αντικείμενα με την κατανομή (destructuring assignment) +- **Δημιουργεί** νέες μεταβλητές αυτόματα με τα ίδια ονόματα των κλειδιών του αντικειμένου +- **Απλοποιεί** τον κώδικα αποφεύγοντας την επαναλαμβανόμενη σημειογραφία τελείας -Εντάξει, εδώ ο προγραμματισμός γίνεται απολύτως εκπληκτικός! Η **ροή ελέγχου** ουσιαστικά μαθαίνει στο πρόγραμμα πώς να παίρνει έξυπνες αποφάσεις, ακριβώς όπως το κάνεις κι εσύ κάθε μέρα χωρίς καν να το συνειδητοποιείς. +### Έλεγχος Ροής: Διδάσκοντας το Πρόγραμμά Σας να Σκέφτεται -Φαντάσου το εξής: σήμερα το πρωί μάλλον πέρασες από κάτι σαν "Αν βρέχει, θα πάρω ομπρέλα. Αν κάνει κρύο, θα φορέσω μπουφάν. Αν αργώ, θα παραλείψω το πρωινό και θα πάρω καφέ στο δρόμο." Ο εγκέφαλός σου ακολουθεί αυτή την if-then λογική δεκάδες φορές κάθε μέρα! +Εντάξει, εδώ γίνεται πραγματικά συναρπαστικό! Ο **έλεγχος ροής** είναι βασικά το να διδάσκεις το πρόγραμμα πώς να παίρνει έξυπνες αποφάσεις, ακριβώς όπως κάνετε εσείς κάθε μέρα χωρίς να το σκέφτεστε. -Αυτό είναι που κάνει τα προγράμματα να φαίνονται έξυπνα και ζωντανά, αντί να απλώς ακολουθούν κάποιο βαρετό και προβλέψιμο σενάριο. Μπορούν να δουν μια κατάσταση, να αξιολογήσουν τι συμβαίνει, και να ανταποκριθούν κατάλληλα. Είναι σαν να δίνεις στο πρόγραμμα ένα μυαλό που μπορεί να προσαρμοστεί και να κάνει επιλογές! +Φανταστείτε το εξής: σήμερα το πρωί πιθανόν κάνατε κάτι σαν "Αν βρέχει, θα πάρω ομπρέλα. Αν κάνει κρύο, θα φορέσω μπουφάν. Αν αργώ, θα παραλείψω το πρωινό και θα πάρω καφέ στο δρόμο." Ο εγκέφαλός σας ακολουθεί φυσικά αυτήν τη λογική αν-τότε δεκάδες φορές κάθε μέρα! -Θες να δεις πόσο όμορφα λειτουργεί αυτό; Άσε με να σου δείξω: +Αυτό κάνει τα προγράμματα να φαίνονται έξυπνα και ζωντανά, αντί απλά να ακολουθούν κάποιο βαρετό, προβλέψιμο σενάριο. Μπορούν πραγματικά να κοιτάξουν την κατάσταση, να αξιολογήσουν τι συμβαίνει και να ανταποκριθούν κατάλληλα. Σαν να δίνετε στο πρόγραμμά σας έναν εγκέφαλο που μπορεί να προσαρμοστεί και να παίρνει αποφάσεις! + +Θέλετε να δείτε πόσο όμορφα λειτουργεί; Ας δείξω: ```javascript -// Βήμα 1: Βασική συνθήκη λογικής +// Βήμα 1: Βασική λογική υπό συνθήκη const userAge = 17; if (userAge >= 18) { @@ -386,12 +388,12 @@ if (userAge >= 18) { console.log(`You'll be able to vote in ${yearsToWait} year(s).`); } ``` - -**Αυτό που κάνει ο κώδικας:** -- **Ελέγχει** αν η ηλικία χρήστη πληροί την προϋπόθεση για ψήφο -- **Εκτελεί** διαφορετικά μπλοκ κώδικα με βάση το αποτέλεσμα της συνθήκης -- **Υπολογίζει** και εμφανίζει πόσος χρόνος μένει μέχρι να μπορεί να ψηφίσει αν είναι κάτω των 18 -- **Προσφέρει** συγκεκριμένη, χρήσιμη ανατροφοδότηση για κάθε σενάριο + +**Αυτό που κάνει ο κώδικας:** +- **Ελέγχει** αν η ηλικία του χρήστη πληροί την προϋπόθεση ψήφου +- **Εκτελεί** διαφορετικά μπλοκ κώδικα ανάλογα με το αποτέλεσμα της συνθήκης +- **Υπολογίζει** και εμφανίζει πόσος χρόνος απομένει μέχρι την ικανότητα ψήφου αν είναι κάτω των 18 +- **Προσφέρει** συγκεκριμένη και χρήσιμη ανατροφοδότηση για κάθε περίπτωση ```javascript // Βήμα 2: Πολλαπλές συνθήκες με λογικούς τελεστές @@ -406,23 +408,23 @@ if (userAge >= 18 && hasPermission) { console.log("Sorry, you must be at least 16 years old."); } ``` - -**Ανάλυση τι συμβαίνει εδώ:** -- **Συνδυάζει** πολλαπλές συνθήκες με τον τελεστή `&&` (και) -- **Δημιουργεί** ιεραρχία συνθηκών με `else if` για πολλαπλά σενάρια -- **Χειρίζεται** όλες τις πιθανές περιπτώσεις με μια τελική δήλωση `else` -- **Παρέχει** σαφή και πράξημο ανατροφοδότηση για κάθε διαφορετική κατάσταση + +**Ανάλυση όσων συμβαίνουν εδώ:** +- **Συνδυάζει** πολλαπλές προϋποθέσεις με τον τελεστή `&&` (και) +- **Δημιουργεί** ιεραρχία συνθηκών με `else if` για πολλαπλά σενάρια +- **Χειρίζεται** όλες τις πιθανές περιπτώσεις με μια τελευταία δήλωση `else` +- **Προσφέρει** σαφή και εφαρμόσιμη ανατροφοδότηση για κάθε διαφορετική κατάσταση ```javascript -// Βήμα 3: Συνοπτική συνθήκη με τον τριμερικό τελεστή +// Βήμα 3: Συνοπτική συνθήκη με τριαδικό τελεστή const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; console.log(`Status: ${votingStatus}`); ``` - -**Τι πρέπει να θυμάσαι:** -- **Χρησιμοποίησε** τον τριαδικό τελεστή (`? :`) για απλές συνθήκες με δύο επιλογές -- **Γράψε** πρώτα τη συνθήκη, μετά `?`, μετά την αληθή περίπτωση, μετά `:`, και μετά την ψευδή περίπτωση -- **Εφάρμοσε** αυτό το μοτίβο όταν χρειάζεσαι να αναθέσεις τιμές βάσει συνθηκών + +**Τι πρέπει να θυμάστε:** +- **Χρησιμοποιείστε** τον τελεστή ternary (`? :`) για απλές συνθήκες με δύο επιλογές +- **Γράψτε** πρώτα τη συνθήκη, μετά το `?`, μετά το αποτέλεσμα αν αληθές, μετά το `:`, και τέλος το αποτέλεσμα αν ψευδές +- **Εφαρμόστε** αυτό το μοτίβο όταν χρειάζεται να αναθέσετε τιμές βάσει συνθηκών ```javascript // Βήμα 4: Διαχείριση πολλαπλών συγκεκριμένων περιπτώσεων @@ -444,55 +446,55 @@ switch (dayOfWeek) { console.log("Invalid day of the week"); } ``` - -**Αυτός ο κώδικας πετυχαίνει τα εξής:** -- **Ταιριάζει** την τιμή μιας μεταβλητής σε πολλές συγκεκριμένες περιπτώσεις -- **Ομαδοποιεί** παρόμοιες περιπτώσεις μαζί (εργάσιμες ημέρες έναντι σαββατοκύριακων) -- **Εκτελεί** το κατάλληλο μπλοκ κώδικα όταν βρεθεί ταύτιση -- **Περιλαμβάνει** μια `default` περίπτωση για την αντιμετώπιση απρόβλεπτων τιμών -- **Χρησιμοποιεί** δηλώσεις `break` για να εμποδίσει τον κώδικα να συνεχίσει στην επόμενη περίπτωση -> 💡 **Αναλογία από την πραγματική ζωή**: Σκέψου τη ροή ελέγχου σαν το πιο υπομονετικό GPS στον κόσμο που σου δίνει οδηγίες. Μπορεί να σου πει "Αν υπάρχει κίνηση στην Οδό Κεντρικής, πάρε τον αυτοκινητόδρομο. Αν ο δρόμος μπλοκάρεται από έργα, δοκίμασε τη διαδρομή με θέα." Τα προγράμματα χρησιμοποιούν ακριβώς αυτό το είδος λογικής για να ανταποκρίνονται έξυπνα σε διαφορετικές καταστάσεις και πάντα να προσφέρουν την καλύτερη δυνατή εμπειρία στους χρήστες. +**Αυτός ο κώδικας επιτυγχάνει:** +- **Ταιριάζει** την τιμή της μεταβλητής με πολλαπλές συγκεκριμένες περιπτώσεις +- **Ομαδοποιεί** παρόμοιες περιπτώσεις μαζί (εργάσιμες ημέρες έναντι σαββατοκύριακων) +- **Εκτελεί** το αντίστοιχο μπλοκ κώδικα όταν βρεθεί ταίριασμα +- **Περιλαμβάνει** μια περίπτωση `default` για να χειριστεί απρόβλεπτες τιμές +- **Χρησιμοποιεί** δηλώσεις `break` για να αποτρέψει τη συνέχεια στον επόμενο case + +> 💡 **Πραγματικό παράδειγμα**: Σκεφτείτε τον έλεγχο ροής σαν να έχετε το πιο υπομονετικό GPS στον κόσμο που σας δίνει οδηγίες. Μπορεί να πει "Αν έχει κίνηση στη Λεωφόρο Κύρια, πάρε τον αυτοκινητόδρομο. Αν οι εργασίες κλείνουν τον αυτοκινητόδρομο, δοκίμασε τη γραφική διαδρομή." Τα προγράμματα χρησιμοποιούν ακριβώς αυτόν τον τύπο λογικής για να ανταποκρίνονται έξυπνα σε διάφορες καταστάσεις και πάντα να προσφέρουν την καλύτερη δυνατή εμπειρία στους χρήστες. -### 🎯 **Έλεγχος Έννοιας: Κυριαρχία Στα Θεμελιώδη Στοιχεία** +### 🎯 **Έλεγχος Εννοιών: Κατανόηση των Βασικών** -**Ας δούμε πώς τα πας με τα βασικά:** -- Μπορείς να εξηγήσεις τη διαφορά ανάμεσα σε μεταβλητή και δήλωση με δικά σου λόγια; -- Σκέψου ένα πραγματικό παράδειγμα όπου θα χρησιμοποιούσες μια απόφαση τύπου if-then (όπως στο παράδειγμα της ψήφου) -- Ποιο είναι κάτι στην λογική του προγραμματισμού που σε εξέπληξε; +**Ας δούμε πώς τα πάτε με τα βασικά:** +- Μπορείτε να εξηγήσετε τη διαφορά μεταξύ μεταβλητής και δήλωσης με δικά σας λόγια; +- Σκεφτείτε ένα παράδειγμα της καθημερινότητας όπου θα χρησιμοποιούσατε μια απόφαση αν-τότε (όπως το παράδειγμα της ψήφου) +- Ποιο είναι ένα πράγμα για τη λογική προγραμματισμού που σας εξέπληξε; -**Γρήγορο ενισχυτικό αυτοπεποίθησης:** +**Γρήγορο κίνητρο αυτοπεποίθησης:** ```mermaid flowchart LR - A["📝 Δηλώσεις
(Εντολές)"] --> B["📦 Μεταβλητές
(Αποθήκευση)"] --> C["🔀 Έλεγχος Ροής
(Αποφάσεις)"] --> D["🎉 Λειτουργικό Πρόγραμμα!"] + A["📝 Δηλώσεις
(Οδηγίες)"] --> B["📦 Μεταβλητές
(Αποθήκευση)"] --> C["🔀 Ροή Ελέγχου
(Αποφάσεις)"] --> D["🎉 Λειτουργικό Πρόγραμμα!"] style A fill:#ffeb3b style B fill:#4caf50 style C fill:#2196f3 style D fill:#ff4081 -``` -✅ **Τι θα ακολουθήσει**: Θα περάσουμε υπέροχα εξερευνώντας πιο βαθιά αυτές τις έννοιες καθώς θα συνεχίζουμε μαζί αυτό το απίστευτο ταξίδι! Τώρα απλώς εστίασε στο να νιώθεις τον ενθουσιασμό για όλες τις εκπληκτικές δυνατότητες που έχεις μπροστά σου. Οι συγκεκριμένες δεξιότητες και τεχνικές θα έρθουν φυσικά καθώς θα εξασκούμαστε μαζί – υπόσχομαι πως αυτό θα είναι πολύ πιο διασκεδαστικό από όσο πιθανώς φαντάζεσαι! +``` +✅ **Τι ακολουθεί**: Θα διασκεδάσουμε απίστευτα εξερευνώντας βαθύτερα αυτές τις έννοιες καθώς προχωρούμε σε αυτό το απίστευτο ταξίδι μαζί! Αυτή τη στιγμή, απλά συγκεντρωθείτε στο να νιώσετε τον ενθουσιασμό για όλες τις εκπληκτικές δυνατότητες που έρχονται. Οι συγκεκριμένες δεξιότητες και τεχνικές θα αποτυπωθούν φυσικά καθώς εξασκούμαστε – υπόσχομαι ότι θα είναι πολύ πιο διασκεδαστικό απ’ όσο φαντάζεστε! -## Εργαλεία Του Εμπορίου +## Εργαλεία της Τέχνης -Εντάξει, εδώ πραγματικά ενθουσιάζομαι τόσο που σχεδόν δεν μπορώ να το συγκρατήσω! 🚀 Ετοιμαζόμαστε να μιλήσουμε για τα απίστευτα εργαλεία που θα σε κάνουν να νιώσεις σαν να σου έδωσαν τα κλειδιά ενός ψηφιακού διαστημικού σκάφους. +Εντάξει, εδώ πραγματικά ενθουσιάζομαι τόσο που σχεδόν δεν μπορώ να συγκρατηθώ! 🚀 Ετοιμαζόμαστε να μιλήσουμε για τα απίστευτα εργαλεία που θα σας κάνουν να νιώσετε σαν να κρατάτε τα κλειδιά ενός ψηφιακού διαστημόπλοιου. -Ξέρεις πώς ένας σεφ έχει τα τέλεια ισορροπημένα μαχαίρια που νιώθεις σαν προέκταση των χεριών του; Ή πώς ένας μουσικός έχει την κιθάρα που μοιάζει να τραγουδά τη στιγμή που την αγγίζει; Λοιπόν, οι προγραμματιστές έχουμε τη δική μας εκδοχή αυτών των μαγικών εργαλείων, και εδώ είναι το πιο εκπληκτικό που θα σου αλλάξει το μυαλό – τα περισσότερα είναι εντελώς δωρεάν! +Ξέρετε πώς ένας σεφ έχει αυτά τα απόλυτα ισορροπημένα μαχαίρια που νιώθουν σαν προέκταση των χεριών του; Ή πώς ένας μουσικός έχει εκείνη την κιθάρα που μοιάζει να τραγουδάει τη στιγμή που την αγγίζει; Ε, οι προγραμματιστές έχουμε τη δική μας έκδοση αυτών των μαγικών εργαλείων, και εδώ είναι κάτι που θα σας αφήσει άφωνους – τα περισσότερα από αυτά είναι εντελώς δωρεάν! -Πραγματικά χοροπηδάω στην καρέκλα μου σκεπτόμενος να τα μοιραστώ μαζί σου, γιατί έχουν επαναστατικοποιήσει τον τρόπο που φτιάχνουμε λογισμικό. Μιλάμε για βοηθούς προγραμματισμού με τεχνητή νοημοσύνη που μπορούν να σε βοηθήσουν να γράψεις τον κώδικά σου (σοβαρά τώρα!), περιβάλλοντα στην cloud όπου μπορείς να δημιουργήσεις ολόκληρες εφαρμογές από κυριολεκτικά οπουδήποτε υπάρχει Wi-Fi και εργαλεία debugging τόσο προηγμένα που είναι σαν να έχεις ακτίνες Χ για τα προγράμματά σου. +Σχεδόν σκαρφαλώνω στην καρέκλα μου από ενθουσιασμό όταν σκέφτομαι να τα μοιραστώ μαζί σας γιατί έχουν αλλάξει ολοκληρωτικά τον τρόπο που δημιουργούμε λογισμικό. Μιλάμε για βοηθούς κωδικοποίησης με τεχνητή νοημοσύνη που μπορούν να γράφουν κώδικα για εσάς (δεν αστειεύομαι!), περιβάλλοντα στο cloud όπου μπορείτε να φτιάξετε ολόκληρες εφαρμογές από οπουδήποτε με Wi-Fi, και εργαλεία εντοπισμού σφαλμάτων τόσο εξελιγμένα που μοιάζουν να έχουν ακτίνες Χ στα προγράμματά σας. -Και να το κομμάτι που ακόμα μου προκαλεί ανατριχίλα: αυτά δεν είναι «εργαλεία για αρχάριους» που θα ξεπεράσεις αργότερα. Αυτά είναι τα ίδια επαγγελματικού επιπέδου εργαλεία που χρησιμοποιούν προγραμματιστές στη Google, το Netflix, και στο indie στούντιο εφαρμογών που αγαπάς ακριβώς αυτή τη στιγμή. Θα νιώθεις τεράστιος επαγγελματίας όταν τα χρησιμοποιείς! +Και το κομμάτι που πάντα μου δίνει ρίγος: αυτά δεν είναι εργαλεία «για αρχάριους» που θα ξεπεράσετε. Αυτά είναι ακριβώς τα ίδια επαγγελματικά εργαλεία που χρησιμοποιούν προγραμματιστές στην Google, στο Netflix, και σε εκείνο το indie στούντιο που λατρεύετε, αυτή ακριβώς τη στιγμή. Θα νιώθετε επαγγελματίες όταν τα χρησιμοποιείτε! ```mermaid graph TD - A["💡 Η Ιδέα Σας"] --> B["⌨️ Επεξεργαστής Κώδικα
(VS Code)"] - B --> C["🌐 Εργαλεία Προγραμματιστή Περιηγητή
(Δοκιμή & Αποσφαλμάτωση)"] - C --> D["⚡ Γραμμή Εντολών
(Αυτοματισμός & Εργαλεία)"] + A["💡 Η Ιδέα Σου"] --> B["⌨️ Επεξεργαστής Κώδικα
(VS Code)"] + B --> C["🌐 Εργαλεία Ανάπτυξης Περιηγητή
(Δοκιμές & Εντοπισμός Σφαλμάτων)"] + C --> D["⚡ Γραμμή Εντολών
(Αυτοματοποίηση & Εργαλεία)"] D --> E["📚 Τεκμηρίωση
(Μάθηση & Αναφορά)"] - E --> F["🚀 Εκπληκτική Ιστοσελίδα!"] + E --> F["🚀 Εκπληκτική Εφαρμογή Ιστού!"] B -.-> G["🤖 Βοηθός Τεχνητής Νοημοσύνης
(GitHub Copilot)"] - C -.-> H["📱 Δοκιμή Συσκευών
(Ανταποκρινόμενος Σχεδιασμός)"] + C -.-> H["📱 Δοκιμή Συσκευής
(Ανταποκρίσιμος Σχεδιασμός)"] D -.-> I["📦 Διαχειριστές Πακέτων
(npm, yarn)"] E -.-> J["👥 Κοινότητα
(Stack Overflow)"] @@ -502,109 +504,110 @@ graph TD style H fill:#f3e5f5 style I fill:#ffccbc style J fill:#e8eaf6 -``` -### Επεξεργαστές Κώδικα και IDEs: Οι Νέοι Ψηφιακοί Καλύτεροι Φίλοι Σου +``` +### Επεξεργαστές Κώδικα και IDEs: Οι Νέοι Σχεδόν Φίλοι Σας στον Ψηφιακό Κόσμο -Ας μιλήσουμε για επεξεργαστές κώδικα – αυτοί σοβαρά πρόκειται να γίνουν τα νέα αγαπημένα σου μέρη για να περάσεις χρόνο! Σκέψου τους σαν το προσωπικό σου καταφύγιο κωδικοποίησης όπου θα περνάς το μεγαλύτερο μέρος του χρόνου σου δημιουργώντας και ολοκληρώνοντας τις ψηφιακές σου δημιουργίες. +Ας μιλήσουμε για επεξεργαστές κώδικα – αυτοί πρόκειται σοβαρά να γίνουν τα νέα σας αγαπημένα μέρη για να περνάτε τον χρόνο σας! Σκεφτείτε τους σαν το προσωπικό σας καταφύγιο κωδικοποίησης όπου θα περνάτε το μεγαλύτερο μέρος του χρόνου σας δημιουργώντας και τελειοποιώντας τις ψηφιακές σας δημιουργίες. -Αλλά να τι είναι μαγικό στους σύγχρονους επεξεργαστές: δεν είναι απλά ένα ωραίο πρόγραμμα επεξεργασίας κειμένου. Είναι σαν να έχεις τον πιο έξυπνο, υποστηρικτικό μέντορα προγραμματισμού καθισμένο δίπλα σου 24/7. Σου βρίσκουν τα λάθη πριν καν τα παρατηρήσεις, προτείνουν βελτιώσεις που σε κάνουν να φαίνεσαι ιδιοφυΐα, σε βοηθούν να καταλάβεις τι κάνει κάθε κομμάτι κώδικα, και κάποιοι μπορούν ακόμα να προβλέψουν τι πρόκειται να γράψεις και να προσφέρουν να ολοκληρώσουν τις σκέψεις σου! +Αλλά εδώ είναι το μαγικό με τους σύγχρονους επεξεργαστές: δεν είναι απλά καλοφτιαγμένοι επεξεργαστές κειμένου. Είναι σαν να έχετε τον πιο λαμπρό, υποστηρικτικό μέντορα κώδικα δίπλα σας 24/7. Διόρθωνουν τα τυπογραφικά σας λάθη πριν τα προσέξετε, προτείνουν βελτιώσεις που σας κάνουν να φαίνεστε ιδιοφυΐες, σας βοηθούν να καταλάβετε τι κάνει κάθε κομμάτι κώδικα, και μερικοί μπορούν ακόμα να προβλέψουν τι θα γράψετε και να προσφέρουν να ολοκληρώσουν τις σκέψεις σας! -Θυμάμαι όταν ανακάλυψα για πρώτη φορά το auto-completion – ένιωσα κυριολεκτικά σαν να ζω στο μέλλον. Ξεκινάς να γράφεις κάτι και ο επεξεργαστής σου λέει, "Ρε συ, μήπως σκεφτόσουν αυτή τη συνάρτηση που κάνει ακριβώς αυτό που χρειάζεσαι;" Είναι σαν να έχεις έναν τηλεπαθητικό φίλο προγραμματισμού! +Θυμάμαι όταν ανακάλυψα για πρώτη φορά την αυτόματη συμπλήρωση – ένιωσα κυριολεκτικά σαν να ζω στο μέλλον. Αρχίζεις να πληκτρολογείς κάτι και ο επεξεργαστής λέει, "Έλεγες αυτή τη συνάρτηση που κάνει ακριβώς ό,τι χρειάζεσαι;" Είναι σαν να έχεις έναν τηλεπαθητικό φίλο στο κωδικογράφημα! -**Τι κάνει αυτούς τους επεξεργαστές τόσο απίθανους;** +**Τι κάνει αυτούς τους επεξεργαστές τόσο εκπληκτικούς;** -Οι σύγχρονοι επεξεργαστές κώδικα προσφέρουν μια εντυπωσιακή γκάμα δυνατοτήτων για να αυξήσουν την παραγωγικότητά σου: +Οι σύγχρονοι επεξεργαστές κώδικα προσφέρουν μια εντυπωσιακή ποικιλία χαρακτηριστικών για να αυξήσουν την παραγωγικότητά σας: -| Δυνατότητα | Τι Κάνει | Γιατί Βοηθάει | -|------------|----------|---------------| -| **Έγχρωμη Ανάδειξη Συντακτικού** | Χρωματίζει διαφορετικά μέρη του κώδικά σου | Κάνει τον κώδικα πιο εύκολο στην ανάγνωση και εύρεση λαθών | -| **Αυτόματη Συμπλήρωση** | Προτείνει κώδικα καθώς πληκτρολογείς | Επιταχύνει τον προγραμματισμό και μειώνει τα τυπογραφικά λάθη | -| **Εργαλεία Εντοπισμού Σφαλμάτων** | Σε βοηθάει να βρεις και να διορθώσεις λάθη | Εξοικονομεί ώρες δυσκολιών και αναζητήσεων λαθών | -| **Πρόσθετα** | Προσθέτουν εξειδικευμένες λειτουργίες | Προσαρμόζουν τον επεξεργαστή σου για οποιαδήποτε τεχνολογία | -| **Βοηθοί Τεχνητής Νοημοσύνης** | Προτείνουν κώδικα και εξηγήσεις | Επιταχύνουν τη μάθηση και την παραγωγικότητα | +| Χαρακτηριστικό | Τι Κάνει | Γιατί Βοηθάει | +|---------|--------------|--------------| +| **Επισήμανση Συντακτικού** | Βαφτίζει διαφορετικά μέρη του κώδικα | Κάνει τον κώδικα πιο εύκολο στην ανάγνωση και στην εύρεση λαθών | +| **Αυτόματη Συμπλήρωση** | Προτείνει κώδικα καθώς πληκτρολογείτε | Επιταχύνει τον προγραμματισμό και μειώνει τα τυπογραφικά λάθη | +| **Εργαλεία Αποσφαλμάτωσης** | Βοηθά να βρείτε και να διορθώσετε λάθη | Εξοικονομεί ώρες στην ανεύρεση σφαλμάτων | +| **Επεκτάσεις** | Προσθέτουν εξειδικευμένες λειτουργίες | Προσαρμόζουν τον επεξεργαστή για οποιαδήποτε τεχνολογία | +| **Βοηθοί AI** | Προτείνουν κώδικα και εξηγήσεις | Επιταχύνουν τη μάθηση και την παραγωγικότητα | -> 🎥 **Βίντεο Πόρος**: Θέλεις να δεις αυτά τα εργαλεία σε δράση; Δες αυτό το [βίντεο Tools of the Trade](https://youtube.com/watch?v=69WJeXGBdxg) για μια ολοκληρωμένη επισκόπηση. +> 🎥 **Βίντεο Πόρος**: Θέλετε να δείτε αυτά τα εργαλεία σε δράση; Δείτε αυτό το [βίντεο Εργαλεία της Τέχνης](https://youtube.com/watch?v=69WJeXGBdxg) για μια ολοκληρωμένη επισκόπηση. -#### Συνιστώμενοι Επεξεργαστές για Web Development +#### Προτεινόμενοι Επεξεργαστές για Ανάπτυξη Ιστού -**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (Δωρεάν) -- Ο πιο δημοφιλής μεταξύ των web developers -- Εξαιρετικό οικοσύστημα προσθέτων -- Ενσωματωμένο τερματικό και ολοκλήρωση με Git -- **Απαραίτητα πρόσθετα**: - - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - Προτάσεις κώδικα με τεχνητή νοημοσύνη - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Συνεργασία σε πραγματικό χρόνο - - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - Αυτόματη μορφοποίηση κώδικα - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Ανίχνευση ορθογραφικών λαθών στον κώδικα +**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (Δωρεάν) +- Πιο δημοφιλής στους προγραμματιστές ιστού +- Εξαιρετικό οικοσύστημα επεκτάσεων +- Ενσωματωμένο τερματικό και υποστήριξη Git +- **Επιβεβλημένες επεκτάσεις**: + - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - Προτάσεις κώδικα με AI + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Συνεργασία σε πραγματικό χρόνο + - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - Αυτόματη μορφοποίηση κώδικα + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Εντοπίζει τυπογραφικά λάθη στον κώδικα -**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (Επί πληρωμή, δωρεάν για φοιτητές) -- Προηγμένα εργαλεία debugging και testing -- Έξυπνη αυτόματη συμπλήρωση κώδικα -- Ενσωματωμένος έλεγχος έκδοσης +**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (Επί πληρωμή, δωρεάν για φοιτητές) +- Προηγμένα εργαλεία αποσφαλμάτωσης και δοκιμών +- Έξυπνη ολοκλήρωση κώδικα +- Ενσωματωμένος έλεγχος έκδοσης -**Cloud-Based IDEs** (Διάφορες τιμές) -- [GitHub Codespaces](https://github.com/features/codespaces) - Ολόκληρο VS Code μέσα στον browser σου -- [Replit](https://replit.com/) - Ιδανικό για μάθηση και κοινή χρήση κώδικα -- [StackBlitz](https://stackblitz.com/) - Άμεση ανάπτυξη web εφαρμογών πλήρους στοίβας +**IDEs βάσει Cloud** (Διάφορες τιμές) +- [GitHub Codespaces](https://github.com/features/codespaces) - Πλήρες VS Code σε πρόγραμμα περιήγησης +- [Replit](https://replit.com/) - Ιδανικό για μάθηση και κοινή χρήση κώδικα +- [StackBlitz](https://stackblitz.com/) - Άμεση ανάπτυξη web full-stack -> 💡 **Συμβουλή για να ξεκινήσεις**: Ξεκίνα με το Visual Studio Code – είναι δωρεάν, ευρέως χρησιμοποιούμενο στη βιομηχανία, και έχει μια τεράστια κοινότητα που δημιουργεί χρήσιμα tutorials και πρόσθετα. +> 💡 **Συμβουλή για ξεκίνημα**: Ξεκινήστε με το Visual Studio Code – είναι δωρεάν, ευρέως χρησιμοποιούμενο στη βιομηχανία και έχει μια τεράστια κοινότητα που δημιουργεί χρήσιμα μαθήματα και επεκτάσεις. -### Περιηγητές Ιστού: Το Μυστικό Σου Εργαστήριο Ανάπτυξης -Εντάξει, ετοιμάσου να σοκαριστείς τελείως! Ξέρεις πώς χρησιμοποιείς τους περιηγητές για να σκρολάρεις στα social media και να βλέπεις βίντεο; Λοιπόν, αποδεικνύεται πως έκρυβαν αυτό το απίστευτο μυστικό εργαστήριο προγραμματισμού όλον αυτόν τον καιρό, περιμένοντας απλά να το ανακαλύψεις! +### Προγράμματα Περιήγησης: Το Μυστικό Εργαστήριο Ανάπτυξής Σας -Κάθε φορά που κάνεις δεξί κλικ σε μια ιστοσελίδα και επιλέγεις "Επιθεώρηση στοιχείου" ανοίγεις έναν κρυφό κόσμο εργαλείων προγραμματιστή που είναι ειλικρινά πιο ισχυρά από μερικά ακριβά λογισμικά που πληρωνόμουν εκατοντάδες ευρώ παλιότερα. Είναι σαν να ανακαλύπτεις ότι η παλιά σου κουζίνα έκρυβε ένα επαγγελματικό εργαστήριο σεφ πίσω από ένα κρυφό πάνελ! -Την πρώτη φορά που μου έδειξε κάποιος τα DevTools του browser, πέρασα περίπου τρεις ώρες απλώς κάνοντας κλικ και λέγοντας «ΠΕΡΙΜΕΝΕ, ΜΠΟΡΕΙ ΝΑ ΚΑΝΕΙ ΚΙ ΑΥΤΟ;!» Μπορείς κυριολεκτικά να επεξεργαστείς οποιαδήποτε ιστοσελίδα σε πραγματικό χρόνο, να δεις ακριβώς πόσο γρήγορα φορτώνει τα πάντα, να δοκιμάσεις πώς φαίνεται ο ιστότοπός σου σε διαφορετικές συσκευές, και ακόμα να αποσφαλματώσεις JavaScript σαν απόλυτος επαγγελματίας. Είναι πραγματικά απίστευτο! +Εντάξει, ετοιμαστείτε να σας φύγει το μυαλό! Ξέρετε πώς χρησιμοποιείτε τα προγράμματα περιήγησης για να σκρολάρετε στα κοινωνικά δίκτυα και να βλέπετε βίντεο; Λοιπόν, αποδείχτηκε ότι κρύβουν αυτό το απίστευτο μυστικό εργαστήριο προγραμματιστών όλη αυτή την ώρα, απλά περιμένοντας να το ανακαλύψετε! -**Γιατί οι browsers είναι το μυστικό σου όπλο:** +Κάθε φορά που κάνετε δεξί κλικ σε μια ιστοσελίδα και επιλέγετε "Επιθεώρηση στοιχείου", ανοίγετε έναν κρυφό κόσμο εργαλείων ανάπτυξης που είναι ειλικρινά πιο ισχυρά από ορισμένα ακριβά προγράμματα που πλήρωνα εκατοντάδες ευρώ. Είναι σαν να ανακαλύπτετε ότι η συνηθισμένη σας κουζίνα έκρυβε ένα επαγγελματικό εργαστήριο σεφ πίσω από μια μυστική πόρτα! +Την πρώτη φορά που κάποιος μου έδειξε τα DevTools του browser, πέρασα περίπου τρεις ώρες απλώς κάνοντας κλικ και λέγοντας «ΠΕΡΙΜΕΝΕ, ΜΠΟΡΕΙ ΝΑ ΚΑΝΕΙ ΚΙ ΑΥΤΟ;!» Μπορείς κυριολεκτικά να επεξεργαστείς οποιαδήποτε ιστοσελίδα σε πραγματικό χρόνο, να δεις ακριβώς πόσο γρήγορα φορτώνει το κάθε τι, να δοκιμάσεις πώς φαίνεται ο ιστότοπός σου σε διαφορετικές συσκευές, και ακόμα να κάνεις αποσφαλμάτωση JavaScript σαν απόλυτος επαγγελματίας. Είναι πραγματικά εκπληκτικό! -Όταν δημιουργείς μια ιστοσελίδα ή μια web εφαρμογή, χρειάζεται να δεις πώς φαίνεται και πώς συμπεριφέρεται στον πραγματικό κόσμο. Οι browsers όχι μόνο εμφανίζουν τη δουλειά σου, αλλά παρέχουν και λεπτομερή ανατροφοδότηση για την απόδοση, την προσβασιμότητα και πιθανά προβλήματα. +**Αυτός είναι ο λόγος που οι browsers είναι το μυστικό σου όπλο:** + +Όταν δημιουργείς έναν ιστότοπο ή μια διαδικτυακή εφαρμογή, χρειάζεται να δεις πώς φαίνεται και πώς συμπεριφέρεται σε πραγματικές συνθήκες. Οι browsers όχι μόνο εμφανίζουν τη δουλειά σου, αλλά παρέχουν και λεπτομερή ανατροφοδότηση σχετικά με τις επιδόσεις, την προσβασιμότητα και πιθανά προβλήματα. #### Εργαλεία Ανάπτυξης Browser (DevTools) Οι σύγχρονοι browsers περιλαμβάνουν ολοκληρωμένες σουίτες ανάπτυξης: -| Κατηγορία Εργαλείου | Τι Κάνει | Παράδειγμα Χρήσης | +| Κατηγορία Εργαλείων | Τι Κάνει | Παράδειγμα Χρήσης | |---------------------|----------|-------------------| -| **Επιθεωρητής Στοιχείων** | Προβολή και επεξεργασία HTML/CSS σε πραγματικό χρόνο | Προσαρμογή στυλ για άμεσα αποτελέσματα | -| **Κονσόλα** | Προβολή μηνυμάτων σφαλμάτων και δοκιμή JavaScript | Αποσφαλμάτωση προβλημάτων και πειραματισμός με κώδικα | -| **Παρακολούθηση Δικτύου** | Παρακολούθηση φόρτωσης πόρων | Βελτιστοποίηση απόδοσης και χρόνων φόρτωσης | -| **Έλεγχος Προσβασιμότητας** | Δοκιμή για συμπεριληπτικό σχεδιασμό | Εξασφάλιση λειτουργικότητας για όλους τους χρήστες | +| **Επιθεωρητής Στοιχείων** | Προβολή και επεξεργασία HTML/CSS σε πραγματικό χρόνο | Προσαρμογή στυλ για άμεσο αποτέλεσμα | +| **Κονσόλα** | Προβολή μηνυμάτων σφάλματος και δοκιμή JavaScript | Αποσφαλμάτωση προβλημάτων και πειραματισμός με κώδικα | +| **Παρακολούθηση Δικτύου** | Παρακολούθηση του πώς φορτώνουν οι πόροι | Βελτιστοποίηση επιδόσεων και χρόνων φόρτωσης | +| **Έλεγχος Προσβασιμότητας** | Δοκιμή για συμπεριληπτικό σχεδιασμό | Διασφάλιση λειτουργίας του ιστότοπου για όλους τους χρήστες | | **Προσομοιωτής Συσκευών** | Προεπισκόπηση σε διαφορετικά μεγέθη οθόνης | Δοκιμή responsive σχεδιασμού χωρίς πολλές συσκευές | -#### Προτεινόμενοι Browsers για Ανάπτυξη +#### Συνιστώμενοι Browsers για Ανάπτυξη -- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - Πρότυπα DevTools με εκτενή τεκμηρίωση -- **[Firefox](https://developer.mozilla.org/docs/Tools)** - Εξαιρετικά εργαλεία CSS Grid και προσβασιμότητας -- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Βασισμένος σε Chromium με πόρους ανάπτυξης της Microsoft +- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - Βιομηχανικό πρότυπο DevTools με εκτενή τεκμηρίωση +- **[Firefox](https://developer.mozilla.org/docs/Tools)** - Εξαιρετικά εργαλεία για CSS Grid και προσβασιμότητα +- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Βασισμένος στο Chromium με πόρους ανάπτυξης από την Microsoft -> ⚠️ **Σημαντική Συμβουλή Δοκιμών**: Πάντα να δοκιμάζεις τους ιστότοπούς σου σε πολλαπλούς browsers! Αυτό που λειτουργεί τέλεια στο Chrome μπορεί να φαίνεται διαφορετικό στο Safari ή στο Firefox. Οι επαγγελματίες προγραμματιστές δοκιμάζουν σε όλους τους μεγάλους browsers για να εξασφαλίσουν συνεπή εμπειρία χρήστη. +> ⚠️ **Σημαντική Συμβουλή Δοκιμών**: Δοκίμασε πάντα τις ιστοσελίδες σου σε πολλούς browsers! Ό,τι λειτουργεί τέλεια στο Chrome μπορεί να φαίνεται διαφορετικό στο Safari ή Firefox. Οι επαγγελματίες προγραμματιστές ελέγχουν σε όλους τους μεγάλους browsers για να εξασφαλίσουν συνεπείς εμπειρίες χρήστη. -### Εργαλεία Γραμμής Εντολών: Η Πύλη σου σε Υπερδυνάμεις Προγραμματιστή +### Εργαλεία Γραμμής Εντολών: Η Πύλη σου προς Υπερδυνάμεις Προγραμματιστή -Εντάξει, ας έχουμε μια εντελώς ειλικρινή στιγμή εδώ για τη γραμμή εντολών, γιατί θέλω να το ακούσεις από κάποιον που το καταλαβαίνει πραγματικά. Την πρώτη φορά που την είδα – αυτήν την τρομακτική μαύρη οθόνη με το αναβοσβήσιμο κείμενο – σκέφτηκα κυριολεκτικά, «Όχι, ούτε καν! Φαίνεται κάτι από ταινία χάκερ των 1980s, και σίγουρα δεν είμαι αρκετά έξυπνος γι’ αυτό!» 😅 +Εντάξει, ας έχουμε μια εντελώς ειλικρινή στιγμή εδώ για τη γραμμή εντολών, γιατί θέλω να το ακούσεις από κάποιον που το καταλαβαίνει πραγματικά. Όταν την πρωτοείδα – αυτή την τρομακτική μαύρη οθόνη με το αναβοσβήσιμο κείμενο – πραγματικά σκέφτηκα, «Όχι, καθόλου! Αυτό μοιάζει με κάτι από μια ταινία χάκερ της δεκαετίας του 1980, και σίγουρα δεν είμαι αρκετά έξυπνος για αυτό!» 😅 -Αλλά εδώ είναι τι θα ήθελα να μου είχε πει κάποιος τότε, και τι σου λέω τώρα: η γραμμή εντολών δεν είναι τρομακτική – είναι σαν να έχεις μια άμεση συνομιλία με τον υπολογιστή σου. Σκέψου την ως τη διαφορά μεταξύ της παραγγελίας φαγητού μέσω μιας κομψής εφαρμογής με εικόνες και μενού (που είναι ωραίο και εύκολο) και της εισόδου στο αγαπημένο σου τοπικό εστιατόριο, όπου ο σεφ ξέρει ακριβώς τι σου αρέσει και μπορεί να σου ετοιμάσει κάτι τέλειο απλώς λέγοντας «έκπληξέ με με κάτι καταπληκτικό.» +Αλλά αυτό που θα ήθελα να μου είχε πει κάποιος τότε, και αυτό που σου λέω τώρα, είναι: η γραμμή εντολών δεν είναι τρομακτική – είναι πραγματικά σαν να έχεις μια άμεση συνομιλία με τον υπολογιστή σου. Φαντάσου τη διαφορά μεταξύ παραγγελίας φαγητού μέσω μιας κομψής εφαρμογής με εικόνες και μενού (που είναι ωραία και εύκολη), και του να μπεις στο αγαπημένο σου τοπικό εστιατόριο όπου ο σεφ ξέρει ακριβώς τι σου αρέσει και μπορεί να φτιάξει κάτι τέλειο, απλώς λέγοντας «έκπληξέ με με κάτι υπέροχο». -Η γραμμή εντολών είναι το μέρος όπου οι προγραμματιστές νιώθουν σαν απόλυτοι μάγοι. Πληκτρολογείς μερικές λέξεις που μοιάζουν μαγικές (εντάξει, είναι απλές εντολές, αλλά νιώθουν μαγικές!), πατάς enter και ΜΠΑΜ – δημιούργησες ολόκληρες δομές έργων, εγκατέστησες ισχυρά εργαλεία από όλο τον κόσμο, ή ανέβασες την εφαρμογή σου στο διαδίκτυο για εκατομμύρια ανθρώπους να τη δουν. Μόλις δοκιμάσεις αυτή τη δύναμη, είναι εθιστικό! +Η γραμμή εντολών είναι το μέρος όπου πηγαίνουν οι προγραμματιστές για να νιώσουν σαν απόλυτοι μάγοι. Πληκτρολογείς μερικές φαινομενικά μαγικές λέξεις (εντάξει, είναι απλώς εντολές, αλλά νιώθουν μαγικές!), πατάς enter, και ΜΠΟΥΜ – έχεις δημιουργήσει ολόκληρες δομές έργου, εγκατέστησες πανίσχυρα εργαλεία από όλο τον κόσμο, ή ανέβασες την εφαρμογή σου στο διαδίκτυο για να τη δουν εκατομμύρια άνθρωποι. Μόλις πάρεις μια πρώτη γεύση αυτής της δύναμης, ειλικρινά γίνεται εθιστικό! **Γιατί η γραμμή εντολών θα γίνει το αγαπημένο σου εργαλείο:** -Ενώ οι γραφικές διεπαφές είναι υπέροχες για πολλές εργασίες, η γραμμή εντολών υπερισχύει στον αυτοματισμό, την ακρίβεια και την ταχύτητα. Πολλά εργαλεία ανάπτυξης δουλεύουν κυρίως μέσω διεπαφής γραμμής εντολών, και η εκμάθησή τους μπορεί να βελτιώσει δραματικά την παραγωγικότητά σου. +Ενώ οι γραφικές διεπαφές είναι υπέροχες για πολλές εργασίες, η γραμμή εντολών ξεχωρίζει στην αυτοματοποίηση, την ακρίβεια και την ταχύτητα. Πολλά εργαλεία ανάπτυξης λειτουργούν κυρίως μέσω της γραμμής εντολών, και η εκμάθηση της αποδοτικής χρήσης τους μπορεί να βελτιώσει δραματικά την παραγωγικότητά σου. ```bash -# Βήμα 1: Δημιουργήστε και μεταβείτε στον κατάλογο του έργου +# Βήμα 1: Δημιουργήστε και μεταβείτε στον φάκελο του έργου mkdir my-awesome-website cd my-awesome-website ``` -**Αυτό που κάνει ο κώδικας:** -- **Δημιουργεί** έναν νέο φάκελο "my-awesome-website" για το έργο σου -- **Μετακινείσαι** στον νεοδημιουργημένο φάκελο για να ξεκινήσεις να δουλεύεις +**Αυτός ο κώδικας κάνει τα εξής:** +- **Δημιουργεί** έναν νέο φάκελο με το όνομα "my-awesome-website" για το έργο σου +- **Μπαίνει** μέσα στον νέο φάκελο για να ξεκινήσεις να δουλεύεις ```bash -# Βήμα 2: Αρχικοποιήστε το έργο με το package.json +# Βήμα 2: Αρχικοποιήστε το έργο με package.json npm init -y # Εγκαταστήστε σύγχρονα εργαλεία ανάπτυξης @@ -612,224 +615,222 @@ npm install --save-dev vite prettier eslint npm install --save-dev @eslint/js ``` -**Βήμα βήμα, τι συμβαίνει:** -- **Αρχικοποιεί** ένα νέο έργο Node.js με τις προεπιλεγμένες ρυθμίσεις χρησιμοποιώντας `npm init -y` -- **Εγκαθιστά** το Vite ως σύγχρονο εργαλείο κατασκευής για γρήγορη ανάπτυξη και παραγωγή -- **Προσθέτει** το Prettier για αυτόματο φορμάρισμα κώδικα και το ESLint για έλεγχο ποιότητας κώδικα -- **Χρησιμοποιεί** τη σημαία `--save-dev` για να δηλώσει αυτές τις εξαρτήσεις ως μόνο για ανάπτυξη +**Βήμα προς βήμα, εδώ συμβαίνει:** +- **Αρχικοποιεί** νέο έργο Node.js με προεπιλεγμένες ρυθμίσεις χρησιμοποιώντας `npm init -y` +- **Εγκαθιστά** το Vite ως μοντέρνο εργαλείο κατασκευής για γρήγορη ανάπτυξη και παραγωγή +- **Προσθέτει** το Prettier για αυτόματο format κώδικα και το ESLint για έλεγχο ποιότητας κώδικα +- **Χρησιμοποιεί** τη σημαία `--save-dev` για να τα ορίσει ως εξαρτήσεις μόνο ανάπτυξης ```bash -# Βήμα 3: Δημιουργήστε τη δομή και τα αρχεία του έργου +# Βήμα 3: Δημιουργήστε τη δομή του έργου και τα αρχεία mkdir src assets echo 'My Site

Hello World

' > index.html -# Εκκινήστε τον διακομιστή ανάπτυξης +# Εκκίνηση διακομιστή ανάπτυξης npx vite ``` -**Στο παραπάνω έχουμε:** -- **Οργανώσει** το έργο μας δημιουργώντας ξεχωριστούς φακέλους για τον κώδικα πηγής και τα αρχεία -- **Παράγει** ένα βασικό αρχείο HTML με σωστή δομή εγγράφου -- **Ξεκίνησε** τον διακομιστή ανάπτυξης Vite για live-reloading και hot module replacement +**Στο παραπάνω, έχουμε:** +- **Οργανώσει** το έργο μας δημιουργώντας ξεχωριστούς φακέλους για τον πηγαίο κώδικα και τα assets +- **Δημιουργήσει** ένα βασικό αρχείο HTML με σωστή δομή εγγράφου +- **Ξεκινήσει** τον διακομιστή ανάπτυξης Vite για ζωντανή ανανέωση και hot module replacement -#### Απαραίτητα Εργαλεία Γραμμής Εντολών για Web Ανάπτυξη +#### Απαραίτητα Εργαλεία Γραμμής Εντολών για Ανάπτυξη Ιστού | Εργαλείο | Σκοπός | Γιατί το Χρειάζεσαι | -|----------|---------|---------------------| -| **[Git](https://git-scm.com/)** | Έλεγχος έκδοσης | Παρακολούθηση αλλαγών, συνεργασία με άλλους, backup της δουλειάς σου | +|----------|--------|---------------------| +| **[Git](https://git-scm.com/)** | Έλεγχος εκδόσεων | Παρακολούθηση αλλαγών, συνεργασία με άλλους, δημιουργία αντιγράφων ασφαλείας | | **[Node.js & npm](https://nodejs.org/)** | Εκτέλεση JavaScript & διαχείριση πακέτων | Εκτέλεση JavaScript εκτός browser, εγκατάσταση σύγχρονων εργαλείων ανάπτυξης | | **[Vite](https://vitejs.dev/)** | Εργαλείο κατασκευής & dev server | Αστραπιαία ανάπτυξη με hot module replacement | -| **[ESLint](https://eslint.org/)** | Ποιότητα κώδικα | Αυτόματη εύρεση και διόρθωση προβλημάτων στον κώδικα JavaScript | -| **[Prettier](https://prettier.io/)** | Μορφοποίηση κώδικα | Κρατά τον κώδικά σου συνεπή και εύκολο στην ανάγνωση | +| **[ESLint](https://eslint.org/)** | Ποιότητα κώδικα | Αυτόματη εύρεση και διόρθωση προβλημάτων στον JavaScript κώδικα | +| **[Prettier](https://prettier.io/)** | Μορφοποίηση κώδικα | Κρατάει τον κώδικα συνεπή μορφοποιημένο και ευανάγνωστο | -#### Επιλογές ανά Πλατφόρμα +#### Επιλογές Ανά Πλατφόρμα **Windows:** -- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Σύγχρονο, πλήρες τερματικό -- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Ισχυρό περιβάλλον scripting -- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Παραδοσιακή γραμμή εντολών των Windows +- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Σύγχρονο, πλούσιο σε λειτουργίες τερματικό +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Δυνατό περιβάλλον scripting +- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Παραδοσιακή γραμμή εντολών Windows **macOS:** - **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - Ενσωματωμένη εφαρμογή τερματικού -- **[iTerm2](https://iterm2.com/)** - Βελτιωμένο τερματικό με προηγμένες δυνατότητες +- **[iTerm2](https://iterm2.com/)** - Ενισχυμένο τερματικό με προχωρημένες λειτουργίες **Linux:** -- **[Bash](https://www.gnu.org/software/bash/)** 💻 - Τυπικό shell του Linux -- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - Προηγμένος τερματικός εξομοιωτής +- **[Bash](https://www.gnu.org/software/bash/)** 💻 - Πρότυπο Linux shell +- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - Προηγμένος εξομοιωτής τερματικού > 💻 = Προεγκατεστημένο στο λειτουργικό σύστημα -> 🎯 **Μονοπάτι Εκμάθησης**: Ξεκίνα με βασικές εντολές όπως `cd` (αλλαγή φακέλου), `ls` ή `dir` (λίστα αρχείων), και `mkdir` (δημιουργία φακέλου). Εξασκήσου με σύγχρονες εντολές ροής εργασίας όπως `npm install`, `git status`, και `code .` (άνοιγμα τρέχοντος φακέλου στο VS Code). Καθώς νιώθεις πιο άνετα, θα μαθαίνεις φυσικά πιο προχωρημένες εντολές και τεχνικές αυτοματισμού. +> 🎯 **Μονοπάτι Μάθησης:** Ξεκίνα με βασικές εντολές όπως `cd` (αλλαγή φακέλου), `ls` ή `dir` (λίστα αρχείων), και `mkdir` (δημιουργία φακέλου). Πρακτική με μοντέρνες εντολές ροής εργασίας όπως `npm install`, `git status`, και `code .` (ανοίγει τον τρέχοντα φάκελο στο VS Code). Καθώς νιώθεις πιο άνετα, θα μάθεις φυσικά πιο προχωρημένες εντολές και τεχνικές αυτοματοποίησης. -### Τεκμηρίωση: Ο Πάντα Διαθέσιμος Μέντοράς σου στη Μάθηση +### Τεκμηρίωση: Ο Πάντα Διαθέσιμος Μέντορας Μάθησης σου -Εντάξει, άσε με να μοιραστώ ένα μικρό μυστικό που θα σε κάνει να αισθανθείς πολύ καλύτερα ως αρχάριος: ακόμα και οι πιο έμπειροι προγραμματιστές περνάνε μεγάλο μέρος του χρόνου τους διαβάζοντας τεκμηρίωση. Και αυτό δεν είναι επειδή δεν ξέρουν τι κάνουν – είναι σημάδι σοφίας! +Εντάξει, άσε με να μοιραστώ ένα μικρό μυστικό που θα σε κάνει να νιώσεις πολύ καλύτερα για το ότι είσαι αρχάριος: ακόμα και οι πιο έμπειροι προγραμματιστές περνούν τεράστιο μέρος του χρόνου τους διαβάζοντας τεκμηρίωση. Και αυτό δεν είναι επειδή δεν ξέρουν τι κάνουν – είναι στην πραγματικότητα σημάδι σοφίας! -Σκέψου την τεκμηρίωση ως την πρόσβαση στους πιο υπομονετικούς και γνώστες εκπαιδευτές του κόσμου που είναι διαθέσιμοι 24/7. Είσαι κολλημένος με ένα πρόβλημα στις 2 το ξημέρωμα; Η τεκμηρίωση είναι εκεί με έναν ζεστό εικονικό αγκαλιά και ακριβώς την απάντηση που χρειάζεσαι. Θέλεις να μάθεις για κάποια νέα δροσερή λειτουργία που όλοι συζητούν; Η τεκμηρίωση σε υποστηρίζει με βήμα-βήμα παραδείγματα. Προσπαθείς να καταλάβεις γιατί κάτι λειτουργεί όπως λειτουργεί; Το μάντεψες – η τεκμηρίωση είναι έτοιμη να το εξηγήσει με τρόπο που τελικά να βγάζει νόημα! +Σκέψου την τεκμηρίωση σαν να έχεις πρόσβαση στους πιο υπομονετικούς και γνώστες δασκάλους του κόσμου, διαθέσιμους 24/7. Έμεινες μπλοκαρισμένος σε ένα πρόβλημα στις 2 π.μ.; Η τεκμηρίωση είναι εκεί με μια ζεστή εικονική αγκαλιά και ακριβώς την απάντηση που χρειάζεσαι. Θέλεις να μάθεις για κάποια νέα φοβερή λειτουργία για την οποία μιλάνε όλοι; Η τεκμηρίωση σε στηρίζει με παραδείγματα βήμα-βήμα. Προσπαθείς να καταλάβεις γιατί κάτι λειτουργεί όπως λειτουργεί; Μάντεψε – η τεκμηρίωση είναι έτοιμη να το εξηγήσει με τρόπο που επιτέλους να "κολλάει"! -Κάτι που άλλαξε εντελώς την οπτική μου είναι το εξής: ο κόσμος της web ανάπτυξης αλλάζει αστραπιαία, και κανείς (εννοώ ΚΑΝΕΙΣ!) δεν θυμάται τα πάντα από μνήμης. Έχω δει έμπειρους προγραμματιστές με πάνω από 15 χρόνια εμπειρίας να ψάχνουν βασική σύνταξη, και ξέρεις τι; Αυτό δεν είναι ντροπή – είναι έξυπνο! Δεν πρόκειται για τέλεια μνήμη, αλλά για το να ξέρεις πού θα βρεις γρήγορα αξιόπιστες απαντήσεις και πώς να τις εφαρμόσεις. +Κάτι που άλλαξε ολοκληρωτικά την προοπτική μου: ο κόσμος της ανάπτυξης web κινείται απίστευτα γρήγορα, και κανείς (εννοώ καθόλου κανείς!) δεν κρατάει τα πάντα απομνημονευμένα. Έχω δει κορυφαίους προγραμματιστές με πάνω από 15 χρόνια εμπειρίας να ψάχνουν απλή σύνταξη, και ξέρεις κάτι; Αυτό δεν είναι ντροπιαστικό – είναι έξυπνο! Δεν είναι θέμα τέλειας μνήμης, αλλά το να ξέρεις πού να βρεις αξιόπιστες απαντήσεις γρήγορα και πώς να τις εφαρμόσεις. -**Εδώ συμβαίνει η πραγματική μαγεία:** +**Εδώ γίνεται η πραγματική μαγεία:** -Οι επαγγελματίες προγραμματιστές ξοδεύουν σημαντικό μέρος του χρόνου τους διαβάζοντας τεκμηρίωση – όχι επειδή δεν ξέρουν τι κάνουν, αλλά επειδή το τοπίο της web ανάπτυξης εξελίσσεται τόσο γρήγορα που η συνεχής μάθηση είναι απαραίτητη. Η καλή τεκμηρίωση σε βοηθάει να κατανοήσεις όχι μόνο *πώς* να χρησιμοποιήσεις κάτι, αλλά *γιατί* και *πότε* να το χρησιμοποιήσεις. +Οι επαγγελματίες προγραμματιστές αφιερώνουν μεγάλο μέρος του χρόνου τους διαβάζοντας τεκμηρίωση – όχι επειδή δεν ξέρουν τι κάνουν, αλλά επειδή το τοπίο της ανάπτυξης ιστού εξελίσσεται τόσο γρήγορα που η παραμονή ενημερωμένος απαιτεί συνεχή μάθηση. Η καλή τεκμηρίωση σε βοηθά να καταλάβεις όχι μόνο *πώς* να χρησιμοποιήσεις κάτι, αλλά *γιατί* και *πότε* να το χρησιμοποιήσεις. -#### Βασικοί Πόροι Τεκμηρίωσης +#### Απαραίτητοι Πόροι Τεκμηρίωσης **[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** -- Το πρότυπο χρυσού για την τεκμηρίωση τεχνολογιών web -- Αναλυτικοί οδηγοί για HTML, CSS, και JavaScript -- Περιλαμβάνει πληροφορίες συμβατότητας browsers -- Δείχνει πρακτικά παραδείγματα και διαδραστικές επίδειξεις +- Το χρυσό πρότυπο για τεκμηρίωση τεχνολογιών web +- Αναλυτικοί οδηγοί για HTML, CSS και JavaScript +- Περιλαμβάνει πληροφορίες συμβατότητας browser +- Προσφέρει πρακτικά παραδείγματα και διαδραστικές επιδείξεις **[Web.dev](https://web.dev)** (από την Google) - Σύγχρονες βέλτιστες πρακτικές ανάπτυξης web -- Οδηγοί για βελτιστοποίηση απόδοσης +- Οδηγοί βελτιστοποίησης επιδόσεων - Αρχές προσβασιμότητας και συμπεριληπτικού σχεδιασμού -- Μελέτες περίπτωσης από πραγματικά έργα +- Μελέτες περιπτώσεων από πραγματικά έργα **[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** -- Πόροι ανάπτυξης για τον Edge browser +- Πόροι ανάπτυξης browser Edge - Οδηγοί για Progressive Web Apps -- Ενημερώσεις για cross-platform ανάπτυξη +- Γνώσεις για ανάπτυξη πολλαπλών πλατφορμών **[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** -- Δομημένα προγράμματα εκμάθησης +- Διαρθρωμένα προγράμματα μάθησης - Βίντεο μαθήματα από ειδικούς του κλάδου -- Πρακτικές ασκήσεις κώδικα +- Πρακτικές ασκήσεις κωδικοποίησης -> 📚 **Στρατηγική Μελέτης**: Μην προσπαθείς να απομνημονεύσεις την τεκμηρίωση – μάθε να την περιηγείσαι αποτελεσματικά. Αποθήκευσε στις σελιδοδείκτες συχνά χρησιμοποιούμενους πόρους και εξασκήσου στη χρήση της αναζήτησης για να βρίσκεις πληροφορίες γρήγορα. +> 📚 **Στρατηγική Μελέτης:** Μην προσπαθείς να απομνημονεύεις την τεκμηρίωση – μάθε αντ' αυτού πώς να την περιηγείσαι αποδοτικά. Αποθήκευσε σελιδοδείκτες τα συχνά χρησιμοποιούμενα αναφορικά σημεία και εξασκήσου να χρησιμοποιείς λειτουργίες αναζήτησης για να βρίσκεις γρήγορα συγκεκριμένες πληροφορίες. -### 🔧 **Έλεγχος Εμπειρίας Εργαλείων: Τι Σου Κάθεται Καλά;** +### 🔧 **Έλεγχος Εμπειρίας στα Εργαλεία: Τι Σου Αρέσει;** -**Πάρε μια στιγμή να σκεφτείς:** -- Ποιο εργαλείο ανυπομονείς να δοκιμάσεις πρώτο; (Δεν υπάρχει λάθος απάντηση!) -- Η γραμμή εντολών εξακολουθεί να φαίνεται τρομακτική ή είσαι περίεργος για αυτήν; -- Μπορείς να φανταστείς να χρησιμοποιείς τα DevTools του browser για να ρίξεις μια ματιά πίσω από το παρασκήνιο των αγαπημένων σου ιστοσελίδων; +**Κάνε ένα διάλειμμα να σκεφτείς:** +- Ποιο εργαλείο είσαι πιο ενθουσιασμένος να δοκιμάσεις πρώτα; (Δεν υπάρχει λάθος απάντηση!) +- Η γραμμή εντολών ακόμα φαίνεται τρομακτική ή σε ενδιαφέρει να τη μάθεις; +- Μπορείς να φανταστείς να χρησιμοποιείς τα DevTools του browser για να ρίξεις μια ματιά πίσω από την κουρτίνα των αγαπημένων σου ιστοσελίδων; ```mermaid -pie title "Χρόνος που αφιερώνεται από τον προγραμματιστή με εργαλεία" +pie title "Χρόνος που Δαπανάται από τον Προγραμματιστή με Εργαλεία" "Επεξεργαστής Κώδικα" : 40 - "Δοκιμή σε Περιηγητή" : 25 + "Δοκιμές στον Περιηγητή" : 25 "Γραμμή Εντολών" : 15 "Ανάγνωση Τεκμηρίωσης" : 15 - "Αντιμετώπιση Σφαλμάτων" : 5 + "Εντοπισμός Σφαλμάτων" : 5 ``` -> **Αστεία παρατήρηση**: Οι περισσότεροι προγραμματιστές περνούν περίπου το 40% του χρόνου τους στον επεξεργαστή κώδικα, αλλά πρόσεξε πόσος χρόνος αφιερώνεται στο testing, τη μάθηση και την επίλυση προβλημάτων. Ο προγραμματισμός δεν είναι απλώς γραφή κώδικα – είναι κατασκευή εμπειριών! +> **Ενδιαφέρον στοιχείο:** Οι περισσότεροι προγραμματιστές περνούν περίπου το 40% του χρόνου τους στον επεξεργαστή κώδικα, αλλά παρατήρησε πόσος χρόνος πηγαίνει σε δοκιμές, μάθηση, και επίλυση προβλημάτων. Ο προγραμματισμός δεν είναι απλώς να γράφεις κώδικα – είναι να δημιουργείς εμπειρίες! -✅ **Θέμα για σκέψη**: Να κάτι ενδιαφέρον να σκεφτείς – πώς νομίζεις ότι τα εργαλεία για την κατασκευή ιστοσελίδων (ανάπτυξη) μπορεί να διαφέρουν από τα εργαλεία για το σχεδιασμό της εμφάνισής τους (design); Είναι σαν τη διαφορά μεταξύ ενός αρχιτέκτονα που σχεδιάζει ένα όμορφο σπίτι και ενός εργολάβου που το κατασκευάζει. Και οι δύο είναι κρίσιμοι, αλλά χρειάζονται διαφορετικά κουτιά εργαλείων! Αυτός ο τρόπος σκέψης θα σε βοηθήσει πραγματικά να δεις τη μεγαλύτερη εικόνα του πώς ζωντανεύουν οι ιστοσελίδες. +✅ **Θέμα για σκέψη:** Να κάτι ενδιαφέρον για να το σκεφτείς – πώς νομίζεις ότι τα εργαλεία για την κατασκευή ιστοσελίδων (ανάπτυξη) μπορεί να διαφέρουν από τα εργαλεία για τον σχεδιασμό της εμφάνισής τους (σχεδιασμός); Είναι σαν τη διαφορά μεταξύ ενός αρχιτέκτονα που σχεδιάζει ένα όμορφο σπίτι και ενός εργολάβου που το χτίζει πραγματικά. Και τα δύο είναι κρίσιμα, αλλά χρειάζονται διαφορετικά εργαλειοθήκες! Αυτός ο τρόπος σκέψης θα σε βοηθήσει να δεις τη μεγαλύτερη εικόνα του πώς ζωντανεύουν οι ιστοσελίδες. ## Πρόκληση GitHub Copilot Agent 🚀 Χρησιμοποίησε τη λειτουργία Agent για να ολοκληρώσεις την παρακάτω πρόκληση: -**Περιγραφή:** Ερεύνησε τα χαρακτηριστικά ενός μοντέρνου επεξεργαστή κώδικα ή IDE και δείξε πώς μπορεί να βελτιώσει τη ροή εργασίας σου ως web developer. +**Περιγραφή:** Εξερεύνησε τα χαρακτηριστικά ενός σύγχρονου επεξεργαστή κώδικα ή IDE και δείξε πώς μπορεί να βελτιώσει τη ροή εργασίας σου ως web developer. -**Προτροπή:** Επίλεξε έναν επεξεργαστή κώδικα ή IDE (όπως Visual Studio Code, WebStorm, ή ένα cloud-based IDE). Κατάγραψε τρία χαρακτηριστικά ή επεκτάσεις που σε βοηθούν να γράφεις, αποσφαλματώνεις, ή να διατηρείς τον κώδικα πιο αποτελεσματικά. Για κάθε ένα, δώσε μια σύντομη εξήγηση για το πώς ωφελεί τη ροή εργασίας σου. +**Οδηγία:** Επέλεξε έναν επεξεργαστή κώδικα ή IDE (όπως Visual Studio Code, WebStorm ή ένα cloud-based IDE). Κατάγραψε τρία χαρακτηριστικά ή επεκτάσεις που σε βοηθούν να γράφεις, να αποσφαλματώνεις ή να διατηρείς κώδικα πιο αποδοτικά. Για κάθε ένα, δώσε μια σύντομη εξήγηση πώς ωφελεί τη ροή εργασίας σου. --- ## 🚀 Πρόκληση -**Εντάξει, ντετέκτιβ, έτοιμος για την πρώτη σου υπόθεση;** +**Λοιπόν, ντετέκτιβ, έτοιμος για την πρώτη σου υπόθεση;** -Τώρα που έχεις αυτή τη φοβερή βάση, έχω μια περιπέτεια που θα σε βοηθήσει να δεις πόσο απίστευτα διαφορετικός και συναρπαστικός είναι ο κόσμος του προγραμματισμού. Και πρόσεχε – δεν πρόκειται ακόμα για γραφή κώδικα, οπότε κανένα άγχος! Σκέψου τον εαυτό σου ως ντετέκτιβ γλωσσών προγραμματισμού στην πρώτη σου συναρπαστική υπόθεση! +Τώρα που έχεις αυτή την υπέροχη βάση, έχω μια περιπέτεια που θα σε βοηθήσει να δεις πόσο απίστευτα διαφορετικός και συναρπαστικός είναι ο κόσμος του προγραμματισμού. Και άκου – δεν πρόκειται ακόμα για γραφή κώδικα, οπότε μη νιώθεις πίεση! Φαντάσου τον εαυτό σου ως ντετέκτιβ γλωσσών προγραμματισμού στην πρώτη σου συναρπαστική υπόθεση! -**Η αποστολή σου, αν την αποδεχθείς:** -1. **Γίνε εξερευνητής γλωσσών**: Διάλεξε τρεις γλώσσες προγραμματισμού από εντελώς διαφορετικά σύμπαντα – ίσως μία που φτιάχνει ιστοσελίδες, μία που δημιουργεί εφαρμογές κινητών, και μία που επεξεργάζεται δεδομένα για επιστήμονες. Βρες παραδείγματα της ίδιας απλής εργασίας γραμμένα σε κάθε γλώσσα. Σου υπόσχομαι ότι θα εντυπωσιαστείς από το πόσο διαφορετικά μπορεί να φαίνονται ενώ κάνουν ακριβώς το ίδιο! +**Η αποστολή σου, αν αρνηθείς να την αποδεχτείς:** +1. **Γίνε εξερευνητής γλωσσών:** Διάλεξε τρεις γλώσσες προγραμματισμού από τελείως διαφορετικούς κόσμους – ίσως μία που φτιάχνει ιστοσελίδες, μία που δημιουργεί κινητές εφαρμογές, και μία που επεξεργάζεται δεδομένα για επιστήμονες. Βρες παραδείγματα για το ίδιο απλό έργο γραμμένα σε κάθε γλώσσα. Υπόσχομαι ότι θα εντυπωσιαστείς πόσο διαφορετικά μπορούν να φαίνονται, παρόλο που κάνουν το ίδιο ακριβώς πράγμα! -2. **Αποκάλυψε τις ιστορίες προέλευσής τους**: Τι κάνει κάθε γλώσσα ξεχωριστή; Ένα ωραίο γεγονός – κάθε γλώσσα προγραμματισμού δημιουργήθηκε γιατί κάποιος σκέφτηκε, «Ξέρεις κάτι; Πρέπει να υπάρχει καλύτερος τρόπος να λυθεί αυτό το συγκεκριμένο πρόβλημα.» Μπορείς να καταλάβεις ποια ήταν αυτά τα προβλήματα; Μερικές από αυτές τις ιστορίες είναι πραγματικά συναρπαστικές! +2. **Αποκάλυψε την προέλευσή τους:** Τι κάνει κάθε γλώσσα ξεχωριστή; Ιδού ένα ωραίο γεγονός – κάθε γλώσσα προγραμματισμού δημιουργήθηκε γιατί κάποιος σκέφτηκε, «Ξέρεις κάτι; Πρέπει να υπάρχει καλύτερος τρόπος να λυθεί αυτό το συγκεκριμένο πρόβλημα.» Μπορείς να καταλάβεις ποια ήταν αυτά τα προβλήματα; Μερικές από αυτές τις ιστορίες είναι πραγματικά συναρπαστικές! -3. **Γνώρισε τις κοινότητες**: Δες πώς είναι φιλόξενες και παθιασμένες οι κοινότητες κάθε γλώσσας. Κάποιες έχουν εκατομμύρια προγραμματιστές που μοιράζονται γνώση και βοηθούν ο ένας τον άλλον, άλλες είναι μικρότερες αλλά απίστευτα δεμένες και υποστηρικτικές. Θα λατρέψεις να δεις τις διαφορετικές προσωπικότητες που έχουν αυτές οι κοινότητες! +3. **Γνώρισε τις κοινότητες:** Δες πόσο φιλόξενες και παθιασμένες είναι οι κοινότητες κάθε γλώσσας. Κάποιες έχουν εκατομμύρια προγραμματιστών που μοιράζονται γνώση και βοηθούν ο ένας τον άλλον, άλλες είναι μικρότερες αλλά απίστευτα δεμένες και υποστηρικτικές. Θα λατρέψεις να δεις τις διαφορετικές προσωπικότητες αυτών των κοινοτήτων! -4. **Άκου το ένστικτό σου**: Ποια γλώσσα σου φαίνεται πιο προσβάσιμη τώρα; Μην αγχωθείς για την «τέλεια» επιλογή – απλώς άκου το ένστικτό σου! Δεν υπάρχει λάθος απάντηση εδώ, και πάντα μπορείς να εξερευνήσεις άλλες αργότερα. +4. **Ακολούθησε το ένστικτό σου:** Ποια γλώσσα σου φαίνεται πιο προσιτή αυτή τη στιγμή; Μην αγχώνεσαι για την «τέλεια» επιλογή – απλά άκου το ένστικτό σου! Ειλικρινά δεν υπάρχει λάθος απάντηση εδώ, και μπορείς πάντα να εξερευνήσεις άλλες αργότερα. -**Επιπλέον ντετέκτιβ εργασία**: Μάθε αν μπορείς ποια μεγάλα sites ή εφαρμογές είναι φτιαγμένα με κάθε γλώσσα. Σου εγγυώμαι ότι θα σοκαριστείς μαθαίνοντας τι τροφοδοτεί Instagram, Netflix ή εκείνο το κινητό παιχνίδι που δεν μπορείς να σταματήσεις να παίζεις! +**Μπόνους για τον ντετέκτιβ:** Δες αν μπορείς να ανακαλύψεις ποιοι μεγάλοι ιστότοποι ή εφαρμογές είναι χτισμένοι με κάθε γλώσσα. Σου εγγυώμαι ότι θα σοκαριστείς να μάθεις τι τροφοδοτεί το Instagram, το Netflix ή εκείνο το κινητό παιχνίδι που δεν μπορείς να σταματήσεις να παίζεις! -> 💡 **Θυμήσου**: Δεν προσπαθείς να γίνεις ειδικός σε καμία από αυτές τις γλώσσες σήμερα. Απλώς γνωρίζεις τη γειτονιά πριν αποφασίσεις πού θέλεις να στήσεις μαγαζί. Πάρε τον χρόνο σου, διασκέδασε και άσε την περιέργεια να σε οδηγήσει! +> 💡 **Θυμήσου:** Δεν προσπαθείς να γίνεις ειδικός σε καμία από αυτές τις γλώσσες σήμερα. Απλώς γνωρίζεις τη γειτονιά πριν αποφασίσεις πού θέλεις να στήσεις το μαγαζί σου. Πάρε το χρόνο σου, διασκέδασε, και άφησε την περιέργειά σου να σε καθοδηγήσει! -## Ας Γιορτάσουμε Ό,τι Ανακάλυψες! +## Ας Γιορτάσουμε Όσα Ανακάλυψες! -Θεέ μου, έχουμε απορροφήσει τόσες απίστευτες πληροφορίες σήμερα! Είμαι πραγματικά ενθουσιασμένος να δω πόσο από αυτό το καταπληκτικό ταξίδι έχει μείνει μέσα σου. Και να θυμάσαι – δεν είναι διαγώνισμα που πρέπει να πετύχεις απόλυτα. Είναι περισσότερο μια γιορτή για όλα τα ωραία πράγματα που έμαθες για αυτόν τον συναρπαστικό κόσμο στον οποίο πρόκειται να βουτήξεις! +Ω Θεέ μου, έχεις απορροφήσει τόσο απίστευτες πληροφορίες σήμερα! Είμαι πραγματικά ενθουσιασμένος να δω πόσα από αυτό το υπέροχο ταξίδι έχεις κρατήσει μαζί σου. Και θυμήσου – αυτό δεν είναι ένα τεστ όπου πρέπει να τα κάνεις όλα τέλεια. Είναι περισσότερο ένας εορτασμός όλων των φοβερών πραγμάτων που έμαθες για αυτόν τον συναρπαστικό κόσμο που πρόκειται να βυθιστείς! [Κάνε το κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/web/) -## Ανασκόπηση & Αυτομελέτη -**Πάρε το χρόνο σου να εξερευνήσεις και να το διασκεδάσεις!** +## Ανασκόπηση & Αυτομάθηση -Κάλυψες πολύ υλικό σήμερα, και αυτό είναι κάτι να νιώθεις περήφανος! Τώρα έρχεται το διασκεδαστικό κομμάτι – να εξερευνήσεις τα θέματα που κέντρισαν την περιέργειά σου. Θυμήσου, αυτό δεν είναι εργασία για το σπίτι – είναι μια περιπέτεια! +**Πάρε το χρόνο σου να εξερευνήσεις και να διασκεδάσεις!** +Έχεις καλύψει πολλή ύλη σήμερα, και αυτό είναι κάτι για το οποίο μπορείς να είσαι περήφανος! Τώρα ξεκινά το διασκεδαστικό μέρος – να εξερευνήσεις τα θέματα που προκάλεσαν την περιέργειά σου. Θυμήσου, αυτό δεν είναι σπίτι – είναι μια περιπέτεια! **Βυθίσου πιο βαθιά σε ό,τι σε ενθουσιάζει:** -**Πάρε πρακτική με γλώσσες προγραμματισμού:** +**Δοκίμασε πρακτικά τις γλώσσες προγραμματισμού:** - Επισκέψου τις επίσημες ιστοσελίδες 2-3 γλωσσών που τράβηξαν την προσοχή σου. Η κάθε μία έχει τη δική της προσωπικότητα και ιστορία! -- Δοκίμασε κάποια διαδικτυακά προγραμματιστικά περιβάλλοντα όπως το [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), ή [Replit](https://replit.com/). Μην φοβηθείς να πειραματιστείς – δεν θα σπάσεις τίποτα! -- Διάβασε για το πώς γεννήθηκε η αγαπημένη σου γλώσσα. Σοβαρά, μερικές από αυτές τις ιστορίες προέλευσης είναι συναρπαστικές και θα σε βοηθήσουν να καταλάβεις γιατί οι γλώσσες λειτουργούν όπως λειτουργούν. +- Δοκίμασε κάποια διαδικτυακά playgrounds κώδικα όπως το [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), ή [Replit](https://replit.com/). Μην φοβηθείς να πειραματιστείς – δεν μπορείς να σπάσεις τίποτα! +- Διάβασε για το πώς δημιουργήθηκε η αγαπημένη σου γλώσσα. Σοβαρά τώρα, μερικές από αυτές τις ιστορίες προέλευσης είναι συναρπαστικές και θα σε βοηθήσουν να καταλάβεις γιατί οι γλώσσες λειτουργούν όπως λειτουργούν. -**Νιώσε άνετα με τα νέα σου εργαλεία:** -- Κατέβασε το Visual Studio Code αν δεν το έχεις ήδη – είναι δωρεάν και θα το λατρέψεις! -- Περάσε λίγα λεπτά εξερευνώντας την αγορά επεκτάσεων (Extensions marketplace). Είναι σαν ένα κατάστημα εφαρμογών για τον κώδικά σου! -- Άνοιξε τα Εργαλεία Προγραμματιστή (Developer Tools) του browser σου και κάνε κλικ εδώ κι εκεί. Μην ανησυχείς αν δεν καταλαβαίνεις τα πάντα – απλώς εξοικειώσου με το τι υπάρχει. +**Γίνε άνετος με τα νέα σου εργαλεία:** +- Κατέβασε το Visual Studio Code αν δεν το έχεις κάνει ήδη – είναι δωρεάν και θα το λατρέψεις! +- Περάστε μερικά λεπτά περιηγούμενος στην αγορά επεκτάσεων. Είναι σαν ένα app store για τον επεξεργαστή κώδικά σου! +- Άνοιξε τα Developer Tools του browser σου και κάνε κλικ ανάμεσα. Μην ανησυχείς αν δεν καταλαβαίνεις τα πάντα – απλά εξοικειώσου με όσα υπάρχουν εκεί. -**Γίνε μέρος της κοινότητας:** -- Ακολούθησε κάποιες κοινότητες προγραμματιστών στο [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), ή [GitHub](https://github.com/). Η κοινότητα προγραμματιστών είναι απίστευτα φιλόξενη προς τους νέους! -- Δες βίντεο με μαθήματα για αρχάριους στο YouTube. Υπάρχουν τόσοι πολλοί υπέροχοι δημιουργοί που θυμούνται πώς είναι να ξεκινάς. +**Γίνε μέλος της κοινότητας:** +- Ακολούθησε μερικές κοινότητες προγραμματιστών στο [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), ή [GitHub](https://github.com/). Η κοινότητα προγραμματιστών είναι εξαιρετικά φιλόξενη για τους νεοεισερχόμενους! +- Δες μερικά βίντεο για αρχάριους στο YouTube. Υπάρχουν πολλοί εξαιρετικοί δημιουργοί εκεί έξω που θυμούνται πώς είναι να ξεκινάς. - Σκέψου να συμμετάσχεις σε τοπικές συναντήσεις ή διαδικτυακές κοινότητες. Πίστεψέ με, οι προγραμματιστές αγαπούν να βοηθούν τους νεοεισερχόμενους! -> 🎯 **Άκου, αυτό θέλω να θυμάσαι**: Δεν περιμένουμε να γίνεις μάγος του κώδικα μέσα σε μια νύχτα! Τώρα απλώς γνωρίζεις αυτόν τον απίθανο νέο κόσμο που πρόκειται να γίνεις μέρος του. Πάρε το χρόνο σου, απόλαυσε το ταξίδι, και θυμήσου – κάθε προγραμματιστής που θαυμάζεις κάθονταν ακριβώς εκεί που είσαι τώρα, νιώθοντας ενθουσιασμό και ίσως λίγο υπερφορτωμένος. Είναι απόλυτα φυσιολογικό, και αυτό σημαίνει ότι τα πας πολύ καλά! - - +> 🎯 **Άκου, αυτό θέλω να θυμάσαι**: Δεν αναμένεται να γίνεις μάγος του κώδικα μέσα σε μία νύχτα! Αυτή τη στιγμή, απλώς γνωρίζεις αυτόν τον καταπληκτικό νέο κόσμο που πρόκειται να γίνεις μέρος του. Πάρε τον χρόνο σου, απόλαυσε το ταξίδι, και θυμήσου – κάθε προγραμματιστής που θαυμάζεις κάποτε καθότανε ακριβώς εκεί που είσαι τώρα, νιώθοντας ενθουσιασμό και ίσως λίγο μπερδεμένος. Αυτό είναι τελείως φυσιολογικό, και σημαίνει ότι τα πας καλά! -## Εργασία +## Ανάθεση [Reading the Docs](assignment.md) -> 💡 **Μικρή παρότρυνση για την εργασία σου**: Θα ήθελα πολύ να σε δω να εξερευνήσεις εργαλεία που δεν έχουμε καλύψει ακόμα! Άφησε για λίγο στην άκρη τους επεξεργαστές, browsers και εργαλεία γραμμής εντολών που έχουμε ήδη αναφέρει – υπάρχει ένας ολόκληρος καταπληκτικός κόσμος με απίθανα εργαλεία ανάπτυξης που περιμένουν να τα ανακαλύψεις. Ψάξε για αυτά που συντηρούνται ενεργά και έχουν ζωντανές, φιλικές κοινότητες (συνήθως έχουν τα καλύτερα tutorials και τους πιο υποστηρικτικούς ανθρώπους όταν κολλήσεις και χρειαστείς βοήθεια). +> 💡 **Μικρή ώθηση για την ανάθεσή σου**: Θα ήθελα πάρα πολύ να σε δω να εξερευνάς κάποια εργαλεία που δεν έχουμε καλύψει ακόμα! Παράβλεψε τους επεξεργαστές, browsers και εργαλεία γραμμής εντολών που έχουμε ήδη αναφέρει – υπάρχει όλο αυτό το απίστευτο σύμπαν εκπληκτικών εργαλείων ανάπτυξης που περιμένει να ανακαλυφθεί. Ψάξε για αυτά που συντηρούνται ενεργά και έχουν ζωντανές, βοηθητικές κοινότητες (αυτά έχουν τις καλύτερες οδηγίες και τα πιο υποστηρικτικά άτομα όταν κολλήσεις και χρειαστείς ένα φιλικό χέρι). --- ## 🚀 Το Χρονοδιάγραμμα του Ταξιδιού σου στον Προγραμματισμό -### ⚡ **Τι μπορείς να κάνεις στα επόμενα 5 λεπτά** -- [ ] Αποθήκευσε σελιδοδείκτες 2-3 ιστοσελίδες γλωσσών προγραμματισμού που τράβηξαν την προσοχή σου -- [ ] Κατέβασε το Visual Studio Code αν δεν το έχεις ήδη -- [ ] Άνοιξε τα DevTools του browser σου (F12) και κάνε κλικ σε οποιαδήποτε ιστοσελίδα -- [ ] Γίνε μέλος σε μια κοινότητα προγραμματιστών (Dev.to, Reddit r/webdev, ή Stack Overflow) +### ⚡ **Τι Μπορείς να Κάνεις στα Επόμενα 5 Λεπτά** +- [ ] Κράτα σελιδοδείκτη σε ιστοσελίδες 2-3 γλωσσών προγραμματισμού που τράβηξαν το ενδιαφέρον σου +- [ ] Κατέβασε το Visual Studio Code αν δεν το έχεις ήδη κάνει +- [ ] Άνοιξε τα DevTools του browser σου (F12) και κλίκαρε σε οποιαδήποτε ιστοσελίδα +- [ ] Γίνε μέλος σε μία κοινότητα προγραμματισμού (Dev.to, Reddit r/webdev, ή Stack Overflow) -### ⏰ **Τι μπορείς να πετύχεις αυτήν την ώρα** -- [ ] Ολοκλήρωσε το quiz μετά το μάθημα και σκέψου τις απαντήσεις σου +### ⏰ **Τι Μπορείς να Ολοκληρώσεις Αυτή την Ώρα** +- [ ] Ολοκλήρωσε το κουίζ μετά το μάθημα και σκέψου τις απαντήσεις σου - [ ] Ρύθμισε το VS Code με την επέκταση GitHub Copilot - [ ] Δοκίμασε ένα παράδειγμα "Hello World" σε 2 διαφορετικές γλώσσες προγραμματισμού online - [ ] Δες ένα βίντεο "Μια μέρα στη ζωή ενός προγραμματιστή" στο YouTube -- [ ] Ξεκίνα την έρευνα σου για τις γλώσσες προγραμματισμού (από την πρόκληση) +- [ ] Ξεκίνα την ερευνητική σου δουλειά για τις γλώσσες προγραμματισμού (από την πρόκληση) -### 📅 **Η περιπέτεια της εβδομάδας σου** -- [ ] Ολοκλήρωσε την εργασία και εξερεύνησε 3 νέα εργαλεία ανάπτυξης +### 📅 **Η Περιπέτεια της Εβδομάδας σου** +- [ ] Ολοκλήρωσε την ανάθεση και εξερεύνησε 3 νέα εργαλεία ανάπτυξης - [ ] Ακολούθησε 5 προγραμματιστές ή λογαριασμούς προγραμματισμού στα social media -- [ ] Δοκίμασε να φτιάξεις κάτι μικρό στο CodePen ή Replit (ακόμα και μόνο "Hello, [Το Όνομά Σου]!") -- [ ] Διάβασε ένα άρθρο προγραμματιστή για το ταξίδι κάποιου με τον κώδικα -- [ ] Συμμετέχει σε ένα εικονικό meetup ή δες μια ομιλία για προγραμματισμό -- [ ] Άρχισε να μαθαίνεις τη γλώσσα που διάλεξες με online tutorials +- [ ] Προσπάθησε να φτιάξεις κάτι μικρό στο CodePen ή Replit (ακόμα και απλά "Hello, [Το Όνομά σου]!") +- [ ] Διάβασε ένα post σε blog προγραμματιστή σχετικά με το ταξίδι κάποιου στον κώδικα +- [ ] Συμμετάσχετε σε μια διαδικτυακή συνάντηση ή παρακολούθησε μια ομιλία προγραμματισμού +- [ ] Ξεκίνα να μαθαίνεις τη γλώσσα που επέλεξες με διαδικτυακά μαθήματα -### 🗓️ **Η μεταμόρφωση του μήνα σου** +### 🗓️ **Η Μεταμόρφωσή σου Μέσα στον Μήνα** - [ ] Φτιάξε το πρώτο σου μικρό project (ακόμα και μια απλή ιστοσελίδα μετράει!) -- [ ] Συνεισφέρε σε ένα ανοιχτού κώδικα project (ξεκίνα με διορθώσεις τεκμηρίωσης) -- [ ] Γίνε μέντορας σε κάποιον που μόλις ξεκινάει το ταξίδι στον προγραμματισμό -- [ ] Δημιούργησε την προσωπική σου ιστοσελίδα-πορτφόλιο προγραμματιστή +- [ ] Συνεισφέρε σε ένα open-source project (ξεκίνα με διορθώσεις τεκμηρίωσης) +- [ ] Μέντορας σε κάποιον που μόλις ξεκινά το ταξίδι προγραμματισμού +- [ ] Δημιούργησε την προσωπική σου ιστοσελίδα-χαρτοφυλάκιο προγραμματιστή - [ ] Συνδέσου με τοπικές κοινότητες προγραμματιστών ή ομάδες μελέτης -- [ ] Ξεκίνα να σχεδιάζεις τον επόμενο στόχο μάθησής σου +- [ ] Ξεκίνα να σχεδιάζεις το επόμενο εκπαιδευτικό σου ορόσημο -### 🎯 **Τελικός έλεγχος αναστοχασμού** +### 🎯 **Τελικός Απολογισμός** -**Πριν προχωρήσεις, πάρε μια στιγμή να γιορτάσεις:** -- Ποιο ήταν το ένα πράγμα για τον προγραμματισμό σήμερα που σε ενθουσίασε; -- Ποιο εργαλείο ή έννοια θέλεις να εξερευνήσεις πρώτα; -- Πώς αισθάνεσαι που ξεκινάς αυτό το ταξίδι στον προγραμματισμό; -- Ποια είναι μια ερώτηση που θα ήθελες να κάνεις σε έναν προγραμματιστή τώρα; +**Πριν προχωρήσεις, πάρε μια στιγμή για να γιορτάσεις:** +- Ποιο είναι ένα πράγμα για τον προγραμματισμό που σε ενθουσίασε σήμερα; +- Ποιο εργαλείο ή έννοια θέλεις να εξερευνήσεις πρώτο; +- Πώς νιώθεις που ξεκινάς αυτό το ταξίδι στον προγραμματισμό; +- Ποια είναι μια ερώτηση που θα ήθελες να κάνεις σε έναν προγραμματιστή αυτή τη στιγμή; ```mermaid journey - title Το Ταξίδι σας για την Ενίσχυση της Αυτοπεποίθησής σας + title Το Ταξίδι Ενίσχυσης της Αυτοπεποίθησής Σου section Σήμερα Curious: 3: You Overwhelmed: 4: You @@ -838,16 +839,16 @@ journey Exploring: 4: You Learning: 5: You Connecting: 4: You - section Επόμενος Μήνας + section Τον Επόμενο Μήνα Building: 5: You Confident: 5: You Helping Others: 5: You ``` -> 🌟 **Θυμήσου**: Κάθε ειδικός ήταν κάποτε αρχάριος. Κάθε έμπειρος προγραμματιστής ένιωσε κάποτε ακριβώς όπως νιώθεις τώρα – ενθουσιασμό, ίσως λίγη υπερφόρτωση, και σίγουρα περιέργεια για το τι είναι δυνατό. Είσαι σε καταπληκτική παρέα, και αυτό το ταξίδι πρόκειται να είναι απίθανο. Καλώς ήρθες στον υπέροχο κόσμο του προγραμματισμού! 🎉 +> 🌟 **Θυμήσου**: Κάθε ειδικός ήταν κάποτε αρχάριος. Κάθε ανώτερος προγραμματιστής ένιωθε ακριβώς όπως εσύ τώρα – ενθουσιασμένος, ίσως λίγο μπερδεμένος, και σίγουρα περίεργος για το τι είναι δυνατόν. Βρίσκεσαι σε καταπληκτική παρέα, και αυτό το ταξίδι θα είναι απίστευτο. Καλωσόρισες στον υπέροχο κόσμο του προγραμματισμού! 🎉 --- **Αποποίηση ευθυνών**: -Το παρόν έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να έχετε υπόψη σας ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα προέλευσής του πρέπει να θεωρείται η έγκυρη πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθεια για ακρίβεια, παρακαλούμε να γνωρίζετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του πρέπει να θεωρείται η αξιόπιστη πηγή. Για κρίσιμες πληροφορίες, συνιστάται η επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/AGENTS.md b/translations/el/AGENTS.md index b10a934d6..09ed63570 100644 --- a/translations/el/AGENTS.md +++ b/translations/el/AGENTS.md @@ -2,36 +2,36 @@ ## Επισκόπηση Έργου -Αυτό είναι ένα εκπαιδευτικό αποθετήριο προγράμματος σπουδών για τη διδασκαλία των βασικών αρχών ανάπτυξης ιστού σε αρχάριους. Το πρόγραμμα σπουδών είναι ένα ολοκληρωμένο μάθημα 12 εβδομάδων που έχει αναπτυχθεί από τους Microsoft Cloud Advocates, περιλαμβάνοντας 24 πρακτικά μαθήματα που καλύπτουν JavaScript, CSS και HTML. +Αυτό είναι ένα εκπαιδευτικό αποθετήριο προγράμματος σπουδών για τη διδασκαλία των βασικών της ανάπτυξης ιστού σε αρχάριους. Το πρόγραμμα σπουδών είναι ένα ολοκληρωμένο μάθημα 12 εβδομάδων που έχει αναπτυχθεί από τους Microsoft Cloud Advocates, με 24 πρακτικά μαθήματα που καλύπτουν JavaScript, CSS και HTML. ### Κύρια Στοιχεία -- **Εκπαιδευτικό Περιεχόμενο**: 24 οργανωμένα μαθήματα ταξινομημένα σε ενότητες έργων -- **Πρακτικά Έργα**: Terrarium, Παιχνίδι Πληκτρολόγησης, Επέκταση Περιηγητή, Παιχνίδι Διαστήματος, Εφαρμογή Τραπεζικής, Επεξεργαστής Κώδικα και Βοηθός Συνομιλίας AI -- **Διαδραστικά Quiz**: 48 κουίζ με 3 ερωτήσεις το καθένα (αξιολογήσεις πριν/μετά το μάθημα) -- **Υποστήριξη Πολλών Γλωσσών**: Αυτόματες μεταφράσεις σε 50+ γλώσσες μέσω GitHub Actions +- **Εκπαιδευτικό Περιεχόμενο**: 24 δομημένα μαθήματα οργανωμένα σε ενότητες με βάση έργα +- **Πρακτικά Έργα**: Terrarium, Παιχνίδι Πληκτρολόγησης, Επέκταση Browser, Παιχνίδι στο Διάστημα, Τραπεζική Εφαρμογή, Επεξεργαστής Κώδικα και Βοηθός Chat με AI +- **Διαδραστικά Κουίζ**: 48 κουίζ με 3 ερωτήσεις το καθένα (αξιολογήσεις πριν/μετά τα μαθήματα) +- **Πολυγλωσσική Υποστήριξη**: Αυτόματες μεταφράσεις για πάνω από 50 γλώσσες μέσω GitHub Actions - **Τεχνολογίες**: HTML, CSS, JavaScript, Vue.js 3, Vite, Node.js, Express, Python (για έργα AI) ### Αρχιτεκτονική - Εκπαιδευτικό αποθετήριο με δομή βασισμένη σε μαθήματα - Κάθε φάκελος μαθήματος περιέχει README, παραδείγματα κώδικα και λύσεις -- Αυτόνομα έργα σε ξεχωριστούς καταλόγους (quiz-app, διάφορα έργα μαθημάτων) -- Σύστημα μετάφρασης με χρήση GitHub Actions (co-op-translator) -- Τεκμηρίωση που σερβίρεται μέσω Docsify και διατίθεται σε μορφή PDF +- Ανεξάρτητα έργα σε ξεχωριστούς καταλόγους (quiz-app, διάφορα μαθήματα έργων) +- Σύστημα μετάφρασης που χρησιμοποιεί GitHub Actions (co-op-translator) +- Τεκμηρίωση προσβάσιμη μέσω Docsify και διαθέσιμη ως PDF -## Εντολές Ρύθμισης +## Εντολές Ρυθμίσεων -Αυτό το αποθετήριο προορίζεται κυρίως για κατανάλωση εκπαιδευτικού περιεχομένου. Για εργασία σε συγκεκριμένα έργα: +Αυτό το αποθετήριο προορίζεται κυρίως για κατανάλωση εκπαιδευτικού περιεχομένου. Για εργασία με συγκεκριμένα έργα: -### Ρύθμιση Κύριου Αποθετηρίου +### Κύρια Ρύθμιση Αποθετηρίου ```bash git clone https://github.com/microsoft/Web-Dev-For-Beginners.git cd Web-Dev-For-Beginners ``` -### Ρύθμιση Εφαρμογής Κουίζ (Vue 3 + Vite) +### Ρύθμιση Quiz App (Vue 3 + Vite) ```bash cd quiz-app @@ -41,7 +41,7 @@ npm run build # Δημιουργία για παραγωγή npm run lint # Εκτέλεση ESLint ``` -### API Έργο Τράπεζας (Node.js + Express) +### API Τραπεζικού Έργου (Node.js + Express) ```bash cd 7-bank-project/api @@ -51,7 +51,7 @@ npm run lint # Εκτέλεση ESLint npm run format # Μορφοποίηση με Prettier ``` -### Έργα Επέκτασης Περιηγητή +### Έργα Επέκτασης Browser ```bash cd 5-browser-extension/solution @@ -59,15 +59,15 @@ npm install # Ακολουθήστε τις οδηγίες φόρτωσης επεκτάσεων ειδικές για τον περιηγητή ``` -### Έργα Παιχνιδιού Διαστήματος +### Έργα Παιχνιδιού στο Διάστημα ```bash cd 6-space-game/solution npm install -# Ανοίξτε το index.html στον περιηγητή ή χρησιμοποιήστε το Live Server +# Ανοίξτε το index.html σε πρόγραμμα περιήγησης ή χρησιμοποιήστε Live Server ``` -### Έργο Συνομιλίας (Python Backend) +### Έργο Chat (Backend Python) ```bash cd 9-chat-project/solution/backend/python @@ -76,207 +76,207 @@ pip install openai python api.py ``` -## Ροή Εργασίας Ανάπτυξης +## Ροή Ανάπτυξης ### Για Συνεργάτες Περιεχομένου -1. **Διακλάδωση (Fork)** του αποθετηρίου στο λογαριασμό σας στο GitHub -2. **Κλωνοποίηση (Clone)** του fork τοπικά -3. **Δημιουργία νέου κλάδου** για τις αλλαγές σας -4. Κάντε αλλαγές στο περιεχόμενο των μαθημάτων ή στα παραδείγματα κώδικα -5. Δοκιμάστε τις αλλαγές κώδικα στους αντίστοιχους φακέλους έργων -6. Υποβάλετε pull requests ακολουθώντας τις οδηγίες συμβολής +1. **Κάντε fork το αποθετήριο** στον λογαριασμό σας στο GitHub +2. **Κλωνοποιήστε το fork τοπικά** +3. **Δημιουργήστε νέο branch** για τις αλλαγές σας +4. Κάντε αλλαγές σε περιεχόμενο μαθήματος ή παραδείγματα κώδικα +5. Δοκιμάστε τις αλλαγές σε σχετικούς καταλόγους έργων +6. Υποβάλετε pull requests σύμφωνα με τις οδηγίες συνεισφοράς ### Για Μαθητές -1. Κάντε fork ή clone το αποθετήριο -2. Πλοηγηθείτε στους φακέλους μαθημάτων κατά σειρά +1. Κάντε fork ή κλωνοποιήστε το αποθετήριο +2. Πλοηγηθείτε στους καταλόγους μαθημάτων διαδοχικά 3. Διαβάστε τα αρχεία README για κάθε μάθημα 4. Ολοκληρώστε τα κουίζ πριν το μάθημα στη διεύθυνση https://ff-quizzes.netlify.app/web/ -5. Μελετήστε τα παραδείγματα κώδικα στους φακέλους μαθημάτων +5. Εργαστείτε μέσα από τα παραδείγματα κώδικα στους φακέλους μαθημάτων 6. Ολοκληρώστε εργασίες και προκλήσεις 7. Κάντε τα κουίζ μετά το μάθημα ### Ζωντανή Ανάπτυξη -- **Τεκμηρίωση**: Τρέξτε `docsify serve` στην ρίζα (θύρα 3000) -- **Εφαρμογή Κουίζ**: Τρέξτε `npm run dev` στον φάκελο quiz-app -- **Έργα**: Χρησιμοποιήστε την επέκταση VS Code Live Server για έργα HTML -- **API Έργα**: Τρέξτε `npm start` στους αντίστοιχους φακέλους API +- **Τεκμηρίωση**: Εκτελέστε `docsify serve` στον ριζικό φάκελο (θύρα 3000) +- **Quiz App**: Εκτελέστε `npm run dev` στον φάκελο quiz-app +- **Έργα**: Χρησιμοποιήστε το VS Code Live Server extension για HTML έργα +- **API Έργα**: Εκτελέστε `npm start` στους αντίστοιχους φακέλους API ## Οδηγίες Δοκιμών -### Δοκιμή Εφαρμογής Κουίζ +### Δοκιμές Quiz App ```bash cd quiz-app -npm run lint # Έλεγχος για προβλήματα μορφοποίησης κώδικα -npm run build # Επαλήθευση επιτυχίας της κατασκευής +npm run lint # Ελέγξτε για προβλήματα στο στυλ κώδικα +npm run build # Επιβεβαιώστε ότι η κατασκευή είναι επιτυχής ``` -### Δοκιμή API Τράπεζας +### Δοκιμές Bank API ```bash cd 7-bank-project/api -npm run lint # Έλεγχος για ζητήματα στυλ κώδικα -node server.js # Επαλήθευση εκκίνησης διακομιστή χωρίς σφάλματα +npm run lint # Ελέγξτε για προβλήματα στο στυλ κώδικα +node server.js # Επαληθεύστε ότι ο διακομιστής ξεκινά χωρίς σφάλματα ``` ### Γενική Προσέγγιση Δοκιμών -- Πρόκειται για εκπαιδευτικό αποθετήριο χωρίς πλήρεις αυτοματοποιημένες δοκιμές +- Αυτό είναι ένα εκπαιδευτικό αποθετήριο χωρίς πλήρεις αυτοματοποιημένες δοκιμές - Οι χειροκίνητες δοκιμές εστιάζουν σε: - - Εκτέλεση παραδειγμάτων κώδικα χωρίς σφάλματα - - Σωστή λειτουργία συνδέσμων στην τεκμηρίωση - - Επιτυχής ολοκλήρωση δημιουργίας έργων - - Τα παραδείγματα ακολουθούν βέλτιστες πρακτικές + - Τα παραδείγματα κώδικα να τρέχουν χωρίς σφάλματα + - Οι σύνδεσμοι στην τεκμηρίωση να λειτουργούν σωστά + - Οι κατασκευές έργων να ολοκληρώνονται επιτυχώς + - Τα παραδείγματα να ακολουθούν βέλτιστες πρακτικές -### Έλεγχοι Πριν την Υποβολή +### Έλεγχοι Πριν Υποβολή -- Τρέξτε `npm run lint` σε φακέλους με package.json +- Εκτελέστε `npm run lint` σε φακέλους με package.json - Επαληθεύστε ότι οι σύνδεσμοι markdown είναι έγκυροι -- Δοκιμάστε παραδείγματα κώδικα στον περιηγητή ή Node.js -- Επιβεβαιώστε ότι οι μεταφράσεις διατηρούν σωστή δομή +- Δοκιμάστε παραδείγματα κώδικα στο πρόγραμμα περιήγησης ή Node.js +- Ελέγξτε ότι οι μεταφράσεις διατηρούν τη σωστή δομή ## Οδηγίες Στυλ Κώδικα ### JavaScript - Χρησιμοποιήστε σύγχρονη σύνταξη ES6+ -- Ακολουθήστε τις τυπικές ρυθμίσεις ESLint που παρέχονται στα έργα +- Ακολουθήστε τις τυποποιημένες ρυθμίσεις ESLint που παρέχονται στα έργα - Χρησιμοποιήστε κατανοητά ονόματα μεταβλητών και συναρτήσεων για εκπαιδευτική σαφήνεια - Προσθέστε σχόλια που εξηγούν έννοιες για τους μαθητές -- Μορφοποιήστε με Prettier όπου έχει ρυθμιστεί +- Διαμορφώστε με Prettier όπου έχει ρυθμιστεί ### HTML/CSS - Σημαντικά στοιχεία HTML5 -- Αρχές responsive σχεδίασης -- Καθαρή ονοματοθεσία κλάσεων +- Αρχές responsive design +- Καθαρή ονοματοδοσία κλάσεων - Σχόλια που εξηγούν τεχνικές CSS για μαθητές ### Python - Οδηγίες στυλ PEP 8 - Καθαρά, εκπαιδευτικά παραδείγματα κώδικα -- Σημειώσεις τύπων όπου βοηθούν στη μάθηση +- Υποδείξεις τύπων όπου βοηθούν στη μάθηση ### Τεκμηρίωση Markdown -- Καθαρή ιεραρχία κεφαλίδων -- Μπλοκ κώδικα με δήλωση γλώσσας -- Σύνδεσμοι για επιπλέον πόρους -- Στιγμιότυπα και εικόνες στους φακέλους `images/` -- Εναλλακτικό κείμενο για εικόνες για προσβασιμότητα +- Ξεκάθαρη ιεραρχία τίτλων +- Μπλοκ κώδικα με καθορισμένη γλώσσα +- Σύνδεσμοι σε πρόσθετους πόρους +- Στιγμιότυπα και εικόνες στους καταλόγους `images/` +- Περιγραφικό κείμενο (alt) για εικόνες για προσβασιμότητα ### Οργάνωση Αρχείων -- Μαθήματα αριθμημένα διαδοχικά (1-getting-started-lessons, 2-js-basics κτλ.) -- Κάθε έργο έχει φακέλους `solution/` και συχνά `start/` ή `your-work/` -- Αποθηκεύονται εικόνες σε φακέλους `images/` κάθε μαθήματος -- Μεταφράσεις στη δομή `translations/{language-code}/` +- Μαθήματα αριθμημένα διαδοχικά (1-getting-started-lessons, 2-js-basics, κλπ.) +- Κάθε έργο έχει φακέλους `solution/` και συνήθως `start/` ή `your-work/` +- Οι εικόνες αποθηκεύονται σε φακέλους `images/` συγκεκριμένων μαθημάτων +- Οι μεταφράσεις βρίσκονται στη δομή `translations/{language-code}/` -## Δημιουργία και Ανάπτυξη +## Κατασκευή και Ανάπτυξη -### Ανάπτυξη Εφαρμογής Κουίζ (Azure Static Web Apps) +### Ανάπτυξη Quiz App (Azure Static Web Apps) -Η εφαρμογή κουίζ έχει ρυθμιστεί για ανάπτυξη σε Azure Static Web Apps: +Το quiz-app είναι διαμορφωμένο για ανάπτυξη σε Azure Static Web Apps: ```bash cd quiz-app -npm run build # Δημιουργεί τον φάκελο dist/ -# Αναπτύσσει μέσω ροής εργασίας GitHub Actions κατά την ώθηση στο main +npm run build # Δημιουργεί το φάκελο dist/ +# Αναπτύσσει μέσω της ροής εργασίας GitHub Actions κατά την προώθηση στο main ``` -Ρυθμίσεις Azure Static Web Apps: -- **Τοποθεσία εφαρμογής**: `/quiz-app` -- **Τοποθεσία εξόδου**: `dist` +Διαμόρφωση Azure Static Web Apps: +- **Θέση εφαρμογής**: `/quiz-app` +- **Θέση εξόδου**: `dist` - **Ροή εργασίας**: `.github/workflows/azure-static-web-apps-ashy-river-0debb7803.yml` ### Δημιουργία PDF Τεκμηρίωσης ```bash -npm install # Εγκαταστήστε το docsify-to-pdf -npm run convert # Δημιουργήστε PDF από το docs +npm install # Εγκατάσταση του docsify-to-pdf +npm run convert # Δημιουργία PDF από docs ``` ### Τεκμηρίωση Docsify ```bash npm install -g docsify-cli # Εγκαταστήστε το Docsify παγκοσμίως -docsify serve # Εξυπηρετήστε στο localhost:3000 +docsify serve # Σερβίρετε στο localhost:3000 ``` -### Δημιουργίες ανά Έργο +### Κατασκευές Ανά Έργο -Κάθε φάκελος έργου μπορεί να έχει τη δική του διαδικασία δημιουργίας: -- Vue έργα: `npm run build` δημιουργεί πακέτα παραγωγής -- Στατικά έργα: Δεν απαιτείται βήμα δημιουργίας, τα αρχεία σερβίρονται απευθείας +Κάθε φάκελος έργου μπορεί να έχει τη δική του διαδικασία κατασκευής: +- Έργα Vue: `npm run build` δημιουργεί παραγωγικά πακέτα +- Στατικά έργα: Χωρίς βήμα κατασκευής, τα εξυπηρετεί άμεσα ## Οδηγίες Pull Request -### Μορφοποίηση Τίτλου +### Μορφή Τίτλου -Χρησιμοποιήστε σαφείς, περιγραφικούς τίτλους που δείχνουν το πεδίο αλλαγής: -- `[Quiz-app] Προσθήκη νέου κουίζ για μάθημα X` -- `[Lesson-3] Διόρθωση ορθογραφικού λάθους στο έργο terrarium` +Χρησιμοποιήστε σαφείς, περιγραφικούς τίτλους που δείχνουν το αντικείμενο αλλαγής: +- `[Quiz-app] Προσθήκη νέου κουίζ για το μάθημα X` +- `[Lesson-3] Διόρθωση τυπογραφικού στο έργο terrarium` - `[Translation] Προσθήκη ισπανικής μετάφρασης για το μάθημα 5` -- `[Docs] Ενημέρωση οδηγών ρύθμισης` +- `[Docs] Ενημέρωση οδηγιών ρύθμισης` ### Απαραίτητοι Έλεγχοι Πριν υποβάλετε PR: 1. **Ποιότητα Κώδικα**: - - Τρέξτε `npm run lint` στους σχετικούς φακέλους έργων + - Εκτελέστε `npm run lint` σε σχετικούς φακέλους έργων - Διορθώστε όλα τα σφάλματα και προειδοποιήσεις lint -2. **Επαλήθευση Δημιουργίας**: - - Τρέξτε `npm run build` εφόσον ισχύει - - Επιβεβαιώστε απουσία σφαλμάτων δημιουργίας +2. **Επαλήθευση Κατασκευής**: + - Εκτελέστε `npm run build` όπου έχει εφαρμογή + - Βεβαιωθείτε ότι δεν υπάρχουν σφάλματα κατασκευής -3. **Έλεγχος Συνδέσμων**: - - Δοκιμάστε όλους τους συνδέσμους markdown - - Επαληθεύστε την απόδοση εικόνων +3. **Επαλήθευση Συνδέσμων**: + - Ελέγξτε όλους τους συνδέσμους markdown + - Εξασφαλίστε ότι οι εικόνες φορτώνουν σωστά -4. **Έλεγχος Περιεχομένου**: - - Επιμεληθείτε για ορθογραφικά και γραμματικά λάθη - - Επιβεβαιώστε ότι τα παραδείγματα κώδικα είναι σωστά και εκπαιδευτικά - - Διασφαλίστε ότι οι μεταφράσεις διατηρούν το αρχικό νόημα +4. **Ανασκόπηση Περιεχομένου**: + - Διορθώστε ορθογραφικά και γραμματικά λάθη + - Επαληθεύστε την ορθότητα και εκπαιδευτική αξία των παραδειγμάτων κώδικα + - Ελέγξτε ότι οι μεταφράσεις διατηρούν το αρχικό νόημα -### Απαιτήσεις Συμβολής +### Απαιτήσεις Συμμετοχής -- Συμφωνήστε με το Microsoft CLA (αυτόματος έλεγχος στην πρώτη PR) -- Ακολουθήστε τον [Κώδικα Συμπεριφοράς της Microsoft Open Source](https://opensource.microsoft.com/codeofconduct/) +- Συμφωνία με το Microsoft CLA (αυτοματοποιημένος έλεγχος στο πρώτο PR) +- Ακολούθηση του [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) - Δείτε το [CONTRIBUTING.md](./CONTRIBUTING.md) για λεπτομερείς οδηγίες -- Αναφέρετε αριθμούς θεμάτων στην περιγραφή PR όπου ισχύει +- Αναφορά αριθμού θεμάτων στην περιγραφή PR όταν ισχύει ### Διαδικασία Αναθεώρησης -- Τα PR ελέγχονται από συντηρητές και την κοινότητα +- Τα PR ελέγχονται από διαχειριστές και την κοινότητα - Δίνεται προτεραιότητα στην εκπαιδευτική σαφήνεια - Τα παραδείγματα κώδικα πρέπει να ακολουθούν τις τρέχουσες βέλτιστες πρακτικές - Οι μεταφράσεις ελέγχονται για ακρίβεια και πολιτισμική καταλληλότητα ## Σύστημα Μετάφρασης -### Αυτόματη Μετάφραση +### Αυτόματες Μεταφράσεις - Χρησιμοποιεί GitHub Actions με ροή εργασίας co-op-translator -- Μεταφράζει αυτόματα σε 50+ γλώσσες -- Αρχεία πηγής στους κύριους φακέλους -- Μεταφρασμένα αρχεία στους φακέλους `translations/{language-code}/` +- Μεταφράζει σε πάνω από 50 γλώσσες αυτόματα +- Αρχεία πηγής στους κύριους καταλόγους +- Μεταφρασμένα αρχεία σε φακέλους `translations/{language-code}/` ### Προσθήκη Χειροκίνητων Βελτιώσεων Μετάφρασης -1. Εντοπίστε το αρχείο στο `translations/{language-code}/` +1. Εντοπίστε το αρχείο σε `translations/{language-code}/` 2. Κάντε βελτιώσεις διατηρώντας τη δομή -3. Επιβεβαιώστε ότι τα παραδείγματα κώδικα είναι λειτουργικά -4. Δοκιμάστε τυχόν τοπικοποιημένο περιεχόμενο κουίζ +3. Βεβαιωθείτε ότι τα παραδείγματα κώδικα παραμένουν λειτουργικά +4. Δοκιμάστε το τοπικευμένο περιεχόμενο κουίζ ### Μεταδεδομένα Μετάφρασης -Τα μεταφρασμένα αρχεία περιλαμβάνουν κεφαλίδα μεταδεδομένων: +Τα μεταφρασμένα αρχεία περιλαμβάνουν επικεφαλίδα μεταδεδομένων: ```markdown ``` -## Αποσφαλμάτωση και Επίλυση Προβλημάτων +## Αντιμετώπιση Σφαλμάτων και Επίλυση Προβλημάτων -### Συνήθη Προβλήματα +### Συνηθισμένα Προβλήματα -**Η εφαρμογή κουίζ δεν ξεκινά**: -- Ελέγξτε την έκδοση Node.js (προτείνεται v14+) -- Διαγράψτε τους φακέλους `node_modules` και το αρχείο `package-lock.json`, τρέξτε ξανά `npm install` +**Αποτυχία εκκίνησης της εφαρμογής κουίζ**: +- Ελέγξτε την έκδοση Node.js (συνιστάται v14+) +- Διαγράψτε `node_modules` και `package-lock.json`, εκτελέστε ξανά `npm install` - Ελέγξτε για συγκρούσεις θυρών (προεπιλογή: Vite χρησιμοποιεί θύρα 5173) -**Ο server API δεν ξεκινά**: -- Βεβαιωθείτε ότι η έκδοση Node.js είναι >=10 -- Ελέγξτε αν η θύρα είναι ελεύθερη -- Εξασφαλίστε ότι έχουν εγκατασταθεί όλες οι εξαρτήσεις με `npm install` +**Ο διακομιστής API δεν ξεκινά**: +- Επαληθεύστε ότι η έκδοση Node.js είναι επαρκής (node >=10) +- Ελέγξτε αν η θύρα χρησιμοποιείται ήδη +- Βεβαιωθείτε ότι όλες οι εξαρτήσεις έχουν εγκατασταθεί με `npm install` -**Η επέκταση περιηγητή δεν φορτώνει**: -- Βεβαιωθείτε ότι το manifest.json είναι σωστά μορφοποιημένο -- Ελέγξτε για σφάλματα στην κονσόλα του περιηγητή -- Ακολουθήστε τις οδηγίες εγκατάστασης της επέκτασης που είναι ειδικές για τον περιηγητή +**Η επέκταση browser δεν φορτώνει**: +- Επαληθεύστε ότι το manifest.json είναι σωστά μορφοποιημένο +- Ελέγξτε την κονσόλα του browser για σφάλματα +- Ακολουθήστε οδηγίες εγκατάστασης επεκτάσεων ειδικές για τον browser -**Προβλήματα με το έργο συνομιλίας Python**: -- Βεβαιωθείτε ότι έχει εγκατασταθεί το πακέτο OpenAI: `pip install openai` -- Βεβαιωθείτε ότι η μεταβλητή περιβάλλοντος GITHUB_TOKEN υπάρχει +**Προβλήματα με το έργο Python chat**: +- Βεβαιωθείτε ότι το πακέτο OpenAI είναι εγκατεστημένο: `pip install openai` +- Επαληθεύστε ότι το περιβαλλοντικό μεταβλητό GITHUB_TOKEN έχει οριστεί - Ελέγξτε τα δικαιώματα πρόσβασης στα GitHub Models -**Τα Docsify δεν σερβίρουν τεκμηρίωση**: -- Εγκαταστήστε το docsify-cli παγκοσμίως: `npm install -g docsify-cli` -- Εκτελέστε από τη ρίζα του αποθετηρίου +**Η Docsify δεν εξυπηρετεί τεκμηρίωση**: +- Εγκαταστήστε docsify-cli παγκόσμια: `npm install -g docsify-cli` +- Εκτελέστε από τον ριζικό φάκελο του αποθετηρίου - Ελέγξτε ότι υπάρχει το αρχείο `docs/_sidebar.md` -### Συμβουλές Ανάπτυξης Περιβάλλοντος +### Συμβουλές για Περιβάλλον Ανάπτυξης -- Χρησιμοποιήστε VS Code με την επέκταση Live Server για έργα HTML -- Εγκαταστήστε τις επεκτάσεις ESLint και Prettier για συνεπή μορφοποίηση -- Χρησιμοποιήστε τα DevTools του περιηγητή για αποσφαλμάτωση JavaScript -- Για έργα Vue, εγκαταστήστε την επέκταση Vue DevTools στον περιηγητή +- Χρησιμοποιήστε VS Code με επέκταση Live Server για HTML έργα +- Εγκαταστήστε ESLint και Prettier για συνεπή μορφοποίηση +- Χρησιμοποιήστε DevTools του browser για debugging JavaScript +- Για έργα Vue, εγκαταστήστε την επέκταση Vue DevTools στον browser -### Σκέψεις για την Απόδοση +### Θέματα Απόδοσης -- Μεγάλος αριθμός μεταφρασμένων αρχείων (50+ γλώσσες) σημαίνει μεγάλο μέγεθος κλώνου -- Χρησιμοποιήστε shallow clone αν εργάζεστε μόνο στο περιεχόμενο: `git clone --depth 1` -- Αποκλείστε τις μεταφράσεις από τις αναζητήσεις όταν δουλεύετε στα Αγγλικά -- Οι διαδικασίες δημιουργίας μπορεί να είναι αργές στην πρώτη εκτέλεση (npm install, Vite build) +- Ο μεγάλος αριθμός μεταφρασμένων αρχείων (πάνω από 50 γλώσσες) σημαίνει ότι οι πλήρεις κλωνοποιήσεις είναι μεγάλες +- Χρησιμοποιήστε shallow clone αν εργάζεστε μόνο με περιεχόμενο: `git clone --depth 1` +- Αποφύγετε τις μεταφράσεις στις αναζητήσεις όταν εργάζεστε με αγγλικό περιεχόμενο +- Οι διαδικασίες κατασκευής μπορεί να είναι αργές στην πρώτη εκτέλεση (npm install, κατασκευή Vite) -## Σκέψεις Ασφαλείας +## Θέματα Ασφαλείας -### Μεταβλητές Περιβάλλοντος +### Περιβαλλοντικές Μεταβλητές - Τα κλειδιά API δεν πρέπει ποτέ να δεσμεύονται στο αποθετήριο - Χρησιμοποιήστε αρχεία `.env` (ήδη στο `.gitignore`) -- Τεκμηριώστε τις απαιτούμενες μεταβλητές περιβάλλοντος στα README των έργων +- Τεκμηριώστε τις απαιτούμενες περιβαλλοντικές μεταβλητές στα README των έργων -### Έργα Python +### Python Έργα - Χρησιμοποιήστε εικονικά περιβάλλοντα: `python -m venv venv` -- Κρατάτε τις εξαρτήσεις ενημερωμένες -- Τα tokens GitHub πρέπει να έχουν τα ελάχιστα απαραίτητα δικαιώματα +- Διατηρήστε τις εξαρτήσεις ενημερωμένες +- Τα GitHub tokens πρέπει να έχουν ελάχιστα απαραίτητα δικαιώματα ### Πρόσβαση σε GitHub Models - Απαιτούνται Personal Access Tokens (PAT) για GitHub Models -- Τα tokens πρέπει να φυλάσσονται ως μεταβλητές περιβάλλοντος +- Τα tokens πρέπει να αποθηκεύονται ως περιβαλλοντικές μεταβλητές - Ποτέ μην δεσμεύετε tokens ή διαπιστευτήρια ## Επιπλέον Σημειώσεις -### Στοχευόμενο Κοινό +### Στόχος Κοινού -- Απόλυτοι αρχάριοι στην ανάπτυξη ιστού -- Φοιτητές και αυτοδίδακτοι -- Καθηγητές που χρησιμοποιούν το πρόγραμμα σπουδών στις τάξεις +- Πλήρεις αρχάριοι στην ανάπτυξη ιστού +- Μαθητές και αυτοδίδακτοι +- Εκπαιδευτικοί που χρησιμοποιούν το πρόγραμμα σπουδών σε τάξεις - Το περιεχόμενο έχει σχεδιαστεί για προσβασιμότητα και σταδιακή ανάπτυξη δεξιοτήτων ### Εκπαιδευτική Φιλοσοφία -- Προσέγγιση μάθησης βασισμένη σε έργα -- Συχνές επαναλήψεις γνώσης (κουίζ) -- Πρακτικές ασκήσεις κώδικα -- Παραδείγματα εφαρμογών πραγματικού κόσμου -- Εστίαση στις βασικές αρχές πριν τα frameworks +- Προσέγγιση μάθησης μέσω έργων +- Συχνές δοκιμές γνώσεων (κουίζ) +- Πρακτικές ασκήσεις κωδικοποίησης +- Παραδείγματα εφαρμογών σε πραγματικό κόσμο +- Εστίαση στα βασικά πριν τα frameworks ### Συντήρηση Αποθετηρίου -- Δραστήρια κοινότητα μαθητών και συνεργατών +- Ενεργή κοινότητα μαθητών και συνεργατών - Τακτικές ενημερώσεις εξαρτήσεων και περιεχομένου -- Παρακολούθηση θεμάτων και συζητήσεων από τους συντηρητές +- Παρακολούθηση θεμάτων και συζητήσεων από τους διαχειριστές - Αυτόματες ενημερώσεις μεταφράσεων μέσω GitHub Actions ### Σχετικοί Πόροι @@ -381,28 +381,28 @@ CO_OP_TRANSLATOR_METADATA: - [Microsoft Learn modules](https://docs.microsoft.com/learn/) - [Student Hub resources](https://docs.microsoft.com/learn/student-hub/) - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) συνιστάται για μαθητές -- Επιπλέον μαθήματα: Generative AI, Data Science, ML, IoT διαθέσιμα +- Επιπλέον μαθήματα: Generative AI, Data Science, ML, IoT curricula διαθέσιμα ### Εργασία με Συγκεκριμένα Έργα -Για λεπτομερείς οδηγίες για τα επιμέρους έργα, ανατρέξτε στα αρχεία README σε: -- `quiz-app/README.md` - Εφαρμογή κουίζ Vue 3 -- `7-bank-project/README.md` - Εφαρμογή τραπεζικού με αυθεντικοποίηση -- `5-browser-extension/README.md` - Ανάπτυξη επέκτασης περιηγητή -- `6-space-game/README.md` - Παιχνίδι βασισμένο σε canvas +Για λεπτομερείς οδηγίες σε μεμονωμένα έργα, ανατρέξτε στα αρχεία README σε: +- `quiz-app/README.md` - Εφαρμογή quiz με Vue 3 +- `7-bank-project/README.md` - Τραπεζική εφαρμογή με αυθεντικοποίηση +- `5-browser-extension/README.md` - Ανάπτυξη επέκτασης browser +- `6-space-game/README.md` - Ανάπτυξη παιχνιδιού βασισμένου σε Canvas - `9-chat-project/README.md` - Έργο βοηθού συνομιλίας AI ### Δομή Monorepo -Παρόλο που δεν είναι παραδοσιακό monorepo, αυτό το αποθετήριο περιέχει πολλαπλά ανεξάρτητα έργα: -- Κάθε μάθημα είναι αυτόνομο +Αν και δεν είναι παραδοσιακό monorepo, αυτό το αποθετήριο περιέχει πολλαπλά ανεξάρτητα έργα: +- Κάθε μάθημα είναι ανεξάρτητο - Τα έργα δεν μοιράζονται εξαρτήσεις -- Εργαστείτε σε επιμέρους έργα χωρίς να επηρεάζετε άλλα -- Κλωνοποιήστε ολόκληρο το αποθετήριο για πλήρη εμπειρία προγράμματος σπουδών +- Εργαστείτε σε μεμονωμένα έργα χωρίς να επηρεάζετε τα άλλα +- Κλωνοποιήστε ολόκληρο το αποθετήριο για την πλήρη εμπειρία προγράμματος σπουδών --- -**Αποποίηση Ευθύνης**: -Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που προσπαθούμε για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η επίσημη πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για οποιεσδήποτε παρανοήσεις ή λανθασμένες ερμηνείες προκύψουν από τη χρήση αυτής της μετάφρασης. +**Αποποίηση ευθυνών**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλούμε να σημειώσετε ότι οι αυτοματοποιημένες μεταφράσεις μπορεί να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/README.md b/translations/el/README.md index a396bff4d..602c8e4c3 100644 --- a/translations/el/README.md +++ b/translations/el/README.md @@ -10,70 +10,80 @@ [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -# Ανάπτυξη Ιστού για Αρχάριους - Ένα Πρόγραμμα Σπουδών +# Ανάπτυξη Ιστού για Αρχαρίους - Ένα Πρόγραμμα Σπουδών -Μάθετε τα βασικά της ανάπτυξης ιστού με το ολοκληρωμένο μας μάθημα 12 εβδομάδων από τους Microsoft Cloud Advocates. Κάθε ένα από τα 24 μαθήματα εμβαθύνει σε JavaScript, CSS και HTML μέσα από πρακτικά έργα όπως τεραρίουμ, επεκτάσεις προγράμματος περιήγησης και παιχνίδια στο διάστημα. Ασχοληθείτε με κουίζ, συζητήσεις και πρακτικές εργασίες. Αναβαθμίστε τις δεξιότητές σας και βελτιστοποιήστε την απορρόφηση γνώσεων με την αποτελεσματική παιδαγωγική βασισμένη σε έργα. Ξεκινήστε το ταξίδι σας στον κώδικα σήμερα! +Μάθετε τα βασικά της ανάπτυξης ιστοσελίδων με το ολοκληρωμένο 12-εβδομαδιαίο μάθημά μας από τους Microsoft Cloud Advocates. Κάθε ένα από τα 24 μαθήματα εμβαθύνει σε JavaScript, CSS και HTML μέσω πρακτικών έργων όπως τεραριαμικά, επεκτάσεις προγράμματος περιήγησης και παιχνίδια στο διάστημα. Συμμετέχετε σε κουίζ, συζητήσεις και πρακτικές αναθέσεις. Βελτιώστε τις δεξιότητές σας και μεγιστοποιήστε τη διατήρηση γνώσεων με την αποτελεσματική παιδαγωγική μας που βασίζεται σε έργα. Ξεκινήστε το ταξίδι κωδικοποίησής σας σήμερα! -Εγγραφείτε στην Κοινότητα Discord Azure AI Foundry +Γίνετε μέλος της κοινότητας Azure AI Foundry στο Discord [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -Ακολουθήστε αυτά τα βήματα για να ξεκινήσετε να χρησιμοποιείτε αυτούς τους πόρους: -1. **Αντιγράψτε το Αποθετήριο**: Κάντε κλικ [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) +Ακολουθήστε αυτά τα βήματα για να ξεκινήσετε με αυτούς τους πόρους: +1. **Δημιουργήστε Fork το Αποθετήριο**: Κάντε κλικ [![GitHub forks](https://img.shields.io/github/forks/microsoft/Web-Dev-For-beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/Web-Dev-For-Beginners/fork) 2. **Κλωνοποιήστε το Αποθετήριο**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -3. [**Εγγραφείτε στο Discord του Azure AI Foundry και γνωρίστε ειδικούς και άλλους προγραμματιστές**](https://discord.com/invite/ByRwuEEgH4) +3. [**Γίνετε μέλος του Azure AI Foundry Discord και γνωρίστε ειδικούς και άλλους προγραμματιστές**](https://discord.com/invite/ByRwuEEgH4) -### 🌐 Υποστήριξη Πολλών Γλωσσών +### 🌐 Υποστήριξη Πολλαπλών Γλωσσών -#### Υποστηρίζεται μέσω GitHub Action (Αυτόματη & Πάντα Ενημερωμένη) +#### Υποστηρίζεται μέσω GitHub Action (Αυτοματοποιημένα & Πάντα Ενημερωμένα) [Arabic](../ar/README.md) | [Bengali](../bn/README.md) | [Bulgarian](../bg/README.md) | [Burmese (Myanmar)](../my/README.md) | [Chinese (Simplified)](../zh-CN/README.md) | [Chinese (Traditional, Hong Kong)](../zh-HK/README.md) | [Chinese (Traditional, Macau)](../zh-MO/README.md) | [Chinese (Traditional, Taiwan)](../zh-TW/README.md) | [Croatian](../hr/README.md) | [Czech](../cs/README.md) | [Danish](../da/README.md) | [Dutch](../nl/README.md) | [Estonian](../et/README.md) | [Finnish](../fi/README.md) | [French](../fr/README.md) | [German](../de/README.md) | [Greek](./README.md) | [Hebrew](../he/README.md) | [Hindi](../hi/README.md) | [Hungarian](../hu/README.md) | [Indonesian](../id/README.md) | [Italian](../it/README.md) | [Japanese](../ja/README.md) | [Kannada](../kn/README.md) | [Korean](../ko/README.md) | [Lithuanian](../lt/README.md) | [Malay](../ms/README.md) | [Malayalam](../ml/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Nigerian Pidgin](../pcm/README.md) | [Norwegian](../no/README.md) | [Persian (Farsi)](../fa/README.md) | [Polish](../pl/README.md) | [Portuguese (Brazil)](../pt-BR/README.md) | [Portuguese (Portugal)](../pt-PT/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Romanian](../ro/README.md) | [Russian](../ru/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Slovak](../sk/README.md) | [Slovenian](../sl/README.md) | [Spanish](../es/README.md) | [Swahili](../sw/README.md) | [Swedish](../sv/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Tamil](../ta/README.md) | [Telugu](../te/README.md) | [Thai](../th/README.md) | [Turkish](../tr/README.md) | [Ukrainian](../uk/README.md) | [Urdu](../ur/README.md) | [Vietnamese](../vi/README.md) -> **Προτιμάτε να Κλωνοποιήσετε τοπικά;** - -> Αυτό το αποθετήριο περιλαμβάνει πάνω από 50 μεταφράσεις γλωσσών που αυξάνουν σημαντικά το μέγεθος λήψης. Για να κλωνοποιήσετε χωρίς τις μεταφράσεις, χρησιμοποιήστε sparse checkout: +> **Προτιμάτε να κλωνοποιήσετε τοπικά;** +> +> Αυτό το αποθετήριο περιλαμβάνει πάνω από 50 μεταφράσεις γλωσσών, που αυξάνουν σημαντικά το μέγεθος λήψης. Για να κλωνοποιήσετε χωρίς μεταφράσεις, χρησιμοποιήστε τον αραιό έλεγχο: +> +> **Bash / macOS / Linux:** > ```bash > git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git > cd Web-Dev-For-Beginners > git sparse-checkout set --no-cone '/*' '!translations' '!translated_images' > ``` +> +> **CMD (Windows):** +> ```cmd +> git clone --filter=blob:none --sparse https://github.com/microsoft/Web-Dev-For-Beginners.git +> cd Web-Dev-For-Beginners +> git sparse-checkout set --no-cone "/*" "!translations" "!translated_images" +> ``` +> > Αυτό σας δίνει όλα όσα χρειάζεστε για να ολοκληρώσετε το μάθημα με πολύ πιο γρήγορη λήψη. -**Εάν επιθυμείτε να υποστηριχθούν επιπλέον γλώσσες μετάφρασης, αυτές είναι καταγεγραμμένες [εδώ](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** +**Εάν επιθυμείτε να υποστηρίζονται επιπλέον γλώσσες μετάφρασης, αναφέρονται [εδώ](https://github.com/Azure/co-op-translator/blob/main/getting_started/supported-languages.md)** -[![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Open%20in%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) +[![Open in Visual Studio Code](https://img.shields.io/static/v1?logo=visualstudiocode&label=&message=Άνοιγμα%20στο%20Visual%20Studio%20Code&labelColor=2c2c32&color=007acc&logoColor=007acc)](https://open.vscode.dev/microsoft/Web-Dev-For-Beginners) -#### 🧑‍🎓 _Είσαι φοιτητής/φοιτήτρια;_ +#### 🧑‍🎓 _Είστε φοιτητής;_ -Επισκεφθείτε τη [**σελίδα Student Hub**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) όπου θα βρείτε πόρους για αρχάριους, πακέτα φοιτητών και ακόμα τρόπους να λάβετε δωρεάν κουπόνι πιστοποίησης. Αυτή είναι η σελίδα που θέλετε να αποθηκεύσετε στα αγαπημένα σας και να ελέγχετε περιστασιακά καθώς ενημερώνουμε το περιεχόμενο κάθε μήνα. +Επισκεφθείτε τη [**Σελίδα για Φοιτητές**](https://docs.microsoft.com/learn/student-hub/?WT.mc_id=academic-77807-sagibbon) όπου θα βρείτε πόρους για αρχάριους, πακέτα για φοιτητές και ακόμα τρόπους να πάρετε δωρεάν κουπόνι πιστοποιητικού. Αυτή είναι η σελίδα που θέλετε να αποθηκεύσετε στα αγαπημένα σας και να ελέγχετε περιοδικά καθώς ανανεώνουμε το περιεχόμενο κάθε μήνα. -### 📣 Ανακοίνωση - Νέες προκλήσεις λειτουργίας GitHub Copilot Agent για ολοκλήρωση! +### 📣 Ανακοίνωση - Νέες προκλήσεις λειτουργίας GitHub Copilot Agent για να ολοκληρώσετε! -Προστέθηκε νέα πρόκληση, αναζητήστε το "GitHub Copilot Agent Challenge 🚀" στα περισσότερα κεφάλαια. Αυτή είναι μια νέα πρόκληση για να ολοκληρώσετε χρησιμοποιώντας το GitHub Copilot και το Agent mode. Αν δεν έχετε χρησιμοποιήσει το Agent mode πριν, μπορεί όχι μόνο να δημιουργεί κείμενο αλλά και να δημιουργεί και να επεξεργάζεται αρχεία, να εκτελεί εντολές και άλλα. +Νέα πρόκληση προστέθηκε, ψάξτε για "GitHub Copilot Agent Challenge 🚀" στα περισσότερα κεφάλαια. Αυτή είναι μια νέα πρόκληση για να ολοκληρώσετε χρησιμοποιώντας το GitHub Copilot και τη λειτουργία Agent. Αν δεν έχετε χρησιμοποιήσει τη λειτουργία Agent πριν, μπορεί όχι μόνο να δημιουργεί κείμενο αλλά και να δημιουργεί και να επεξεργάζεται αρχεία, να εκτελεί εντολές και άλλα. -### 📣 Ανακοίνωση - _Νέο έργο για κατασκευή με χρήση Γενετικής Τεχνητής Νοημοσύνης_ +### 📣 Ανακοίνωση - _Νέο Έργο για κατασκευή με τη χρήση Generative AI_ -Πρόσθετο νέο έργο Βοηθού AI, δείτε το [έργο](./9-chat-project/README.md) +Πρόσφατα προστέθηκε ένα νέο έργο βοηθού AI, δείτε το [έργο](./9-chat-project/README.md) -### 📣 Ανακοίνωση - _Νέο Πρόγραμμα Σπουδών_ για Γενετική Τεχνητή Νοημοσύνη σε JavaScript μόλις κυκλοφόρησε +### 📣 Ανακοίνωση - _Νέο πρόγραμμα σπουδών_ για Generative AI για JavaScript μόλις κυκλοφόρησε -Μην χάσετε το νέο μας πρόγραμμα σπουδών για Γενετική Τεχνητή Νοημοσύνη! +Μην χάσετε το νέο μας πρόγραμμα σπουδών για Generative AI! Επισκεφθείτε [https://aka.ms/genai-js-course](https://aka.ms/genai-js-course) για να ξεκινήσετε! ![Background](../../translated_images/el/background.148a8d43afde5730.webp) -- Μαθήματα που καλύπτουν από τα βασικά ως το RAG. -- Αλληλεπιδράστε με ιστορικούς χαρακτήρες μέσω GenAI και της εφαρμογής συνοδού μας. -- Διασκεδαστική και καλογραμμένη αφήγηση, θα ταξιδεύετε στο χρόνο! +- Μαθήματα που καλύπτουν από τα βασικά μέχρι το RAG. +- Αλληλεπιδράστε με ιστορικούς χαρακτήρες χρησιμοποιώντας GenAI και την companion εφαρμογή μας. +- Διασκεδαστική και συναρπαστική αφήγηση, θα ταξιδεύετε στο χρόνο! ![character](../../translated_images/el/character.5c0dd8e067ffd693.webp) -Κάθε μάθημα περιλαμβάνει μια εργασία για ολοκλήρωση, έναν έλεγχο γνώσης και μια πρόκληση για να σας καθοδηγήσει στη μάθηση θεμάτων όπως: -- Εντολές και μηχανική εντολών +Κάθε μάθημα περιλαμβάνει ανάθεση για ολοκλήρωση, έλεγχο γνώσεων και πρόκληση που σας καθοδηγούν στην εκμάθηση θεμάτων όπως: +- Πώς να δημιουργείτε prompts και μηχανική prompts - Δημιουργία εφαρμογών κειμένου και εικόνας - Εφαρμογές αναζήτησης @@ -83,130 +93,129 @@ ## 🌱 Ξεκινώντας -> **Καθηγητές**, έχουμε [περιλάβει μερικές προτάσεις](for-teachers.md) για το πώς να χρησιμοποιήσετε αυτό το πρόγραμμα σπουδών. Θα εκτιμούσαμε το feedback σας [στο φόρουμ συζητήσεών μας](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! +> **Καθηγητές**, έχουμε [συμπεριλάβει ορισμένες προτάσεις](for-teachers.md) για το πώς να χρησιμοποιήσετε αυτό το πρόγραμμα σπουδών. Θα θέλαμε πολύ τα σχόλιά σας [στο φόρουμ συζητήσεών μας](https://github.com/microsoft/Web-Dev-For-Beginners/discussions/categories/teacher-corner)! -**[Μαθητές](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, για κάθε μάθημα, ξεκινήστε με ένα προ-λεκτικό κουίζ και συνεχίστε διαβάζοντας το υλικό του μαθήματος, ολοκληρώνοντας τις διάφορες δραστηριότητες και ελέγχοντας την κατανόησή σας με το μετα-λεκτικό κουίζ. +**[Μαθητές](https://aka.ms/student-page/?WT.mc_id=academic-77807-sagibbon)**, για κάθε μάθημα, ξεκινήστε με ένα προ-μάθημα κουίζ και συνεχίστε διαβάζοντας το υλικό του μαθήματος, ολοκληρώνοντας τις διάφορες δραστηριότητες και ελέγξτε την κατανόησή σας με το μετα-μάθημα κουίζ. -Για να βελτιώσετε την εκπαιδευτική σας εμπειρία, συνδεθείτε με τους συναδέλφους σας για να δουλέψετε μαζί στα έργα! Οι συζητήσεις ενθαρρύνονται στο [φόρουμ συζητήσεών μας](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) όπου η ομάδα των μεσαζόντων μας θα είναι διαθέσιμη για να απαντήσει στις ερωτήσεις σας. +Για να βελτιώσετε την εμπειρία μάθησής σας, συνδεθείτε με τους συμφοιτητές σας για να δουλέψετε στα έργα μαζί! Οι συζητήσεις ενθαρρύνονται στο [φόρουμ συζητήσεών μας](https://github.com/microsoft/Web-Dev-For-Beginners/discussions) όπου η ομάδα των συντονιστών μας θα είναι διαθέσιμη να απαντήσει στις ερωτήσεις σας. Για περαιτέρω εκπαίδευση, συνιστούμε ανεπιφύλακτα να εξερευνήσετε το [Microsoft Learn](https://learn.microsoft.com/users/wirelesslife/collections/p1ddcy5jwy0jkm?WT.mc_id=academic-77807-sagibbon) για επιπλέον υλικό μελέτης. ### 📋 Ρύθμιση του περιβάλλοντός σας -Αυτό το πρόγραμμα σπουδών έχει ένα περιβάλλον ανάπτυξης έτοιμο για χρήση! Καθώς ξεκινάτε, μπορείτε να επιλέξετε να τρέξετε το πρόγραμμα σε [Codespace](https://github.com/features/codespaces/) (_ένα περιβάλλον βασισμένο σε πρόγραμμα περιήγησης, χωρίς ανάγκη εγκαταστάσεων_), ή τοπικά στον υπολογιστή σας χρησιμοποιώντας έναν επεξεργαστή κειμένου όπως το [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +Αυτό το πρόγραμμα σπουδών έχει έτοιμο περιβάλλον ανάπτυξης! Όταν ξεκινάτε, μπορείτε να επιλέξετε να τρέξετε το πρόγραμμα σε ένα [Codespace](https://github.com/features/codespaces/) (_περιβάλλον βασισμένο σε πρόγραμμα περιήγησης, χωρίς ανάγκη εγκατάστασης_), ή τοπικά στον υπολογιστή σας χρησιμοποιώντας έναν επεξεργαστή κειμένου όπως το [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). #### Δημιουργήστε το αποθετήριό σας -Για να αποθηκεύετε εύκολα τη δουλειά σας, συνιστάται να δημιουργήσετε το δικό σας αντίγραφο αυτού του αποθετηρίου. Μπορείτε να το κάνετε πατώντας το κουμπί **Use this template** στο πάνω μέρος της σελίδας. Αυτό θα δημιουργήσει ένα νέο αποθετήριο στο λογαριασμό σας στο GitHub με ένα αντίγραφο του προγράμματος σπουδών. +Για να αποθηκεύετε εύκολα τη δουλειά σας, συνιστάται να δημιουργήσετε το δικό σας αντίγραφο αυτού του αποθετηρίου. Μπορείτε να το κάνετε κάνοντας κλικ στο κουμπί **Use this template** στην κορυφή της σελίδας. Αυτό θα δημιουργήσει ένα νέο αποθετήριο στον λογαριασμό σας στο GitHub με ένα αντίγραφο του προγράμματος σπουδών. Ακολουθήστε αυτά τα βήματα: -1. **Αντιγράψτε το Αποθετήριο**: Κάντε κλικ στο κουμπί "Fork" στην πάνω δεξιά γωνία αυτής της σελίδας. +1. **Δημιουργήστε Fork το Αποθετήριο**: Κάντε κλικ στο κουμπί "Fork" στην επάνω δεξιά γωνία αυτής της σελίδας. 2. **Κλωνοποιήστε το Αποθετήριο**: `git clone https://github.com/microsoft/Web-Dev-For-Beginners.git` -#### Εκτέλεση του προγράμματος σε Codespace +#### Τρέξιμο του προγράμματος σε Codespace -Στο αντίγραφο αυτού του αποθετηρίου που δημιουργήσατε, κάντε κλικ στο κουμπί **Code** και επιλέξτε **Open with Codespaces**. Αυτό θα δημιουργήσει ένα νέο Codespace για να δουλέψετε. +Στο αντίγραφο που δημιουργήσατε, κάντε κλικ στο κουμπί **Code** και επιλέξτε **Open with Codespaces**. Αυτό θα δημιουργήσει έναν νέο Codespace για να εργαστείτε. ![Codespace](../../translated_images/el/createcodespace.0238bbf4d7a8d955.webp) -#### Εκτέλεση του προγράμματος τοπικά στον υπολογιστή σας - -Για να τρέξετε αυτό το πρόγραμμα τοπικά, θα χρειαστείτε έναν επεξεργαστή κειμένου, ένα πρόγραμμα περιήγησης και ένα εργαλείο γραμμής εντολών. Το πρώτο μάθημά μας, [Εισαγωγή στις Γλώσσες Προγραμματισμού και στα Εργαλεία του Χειριστή](../../1-getting-started-lessons/1-intro-to-programming-languages), θα σας καθοδηγήσει στις διάφορες επιλογές για κάθε ένα από αυτά τα εργαλεία για να επιλέξετε εκείνο που σας ταιριάζει καλύτερα. - -Η σύστασή μας είναι να χρησιμοποιήσετε [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) ως επεξεργαστή, που επίσης διαθέτει ενσωματωμένο [Τερματικό](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Μπορείτε να κατεβάσετε το Visual Studio Code [εδώ](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +#### Τρέξιμο του προγράμματος τοπικά στον υπολογιστή σας +Για να τρέξετε αυτό το πρόγραμμα τοπικά στον υπολογιστή σας θα χρειαστείτε έναν επεξεργαστή κειμένου, έναν πρόγραμμα περιήγησης και ένα εργαλείο γραμμής εντολών. Το πρώτο μας μάθημα, [Εισαγωγή στις Γλώσσες Προγραμματισμού και στα Εργαλεία](../../1-getting-started-lessons/1-intro-to-programming-languages), θα σας καθοδηγήσει ανάμεσα στις διάφορες επιλογές για κάθε ένα από αυτά τα εργαλεία, για να επιλέξετε ποια δουλεύει καλύτερα για εσάς. -1. Κλωνοποιήστε το αποθετήριό σας στον υπολογιστή σας. Μπορείτε να το κάνετε πατώντας το κουμπί **Code** και αντιγράφοντας το URL: +Η σύστασή μας είναι να χρησιμοποιήσετε το [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) ως επεξεργαστή σας, που έχει επίσης ενσωματωμένο [τερματικό](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon). Μπορείτε να κατεβάσετε το Visual Studio Code [εδώ](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon). +1. Κλωνοποιήστε το αποθετήριο στον υπολογιστή σας. Μπορείτε να το κάνετε κάνοντας κλικ στο κουμπί **Code** και αντιγράφοντας τη διεύθυνση URL: [CodeSpace](./images/createcodespace.png) - Στη συνέχεια, ανοίξτε το [Τερματικό](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) μέσα στο [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) και εκτελέστε την ακόλουθη εντολή, αντικαθιστώντας το `` με το URL που μόλις αντιγράψατε: + + Στη συνέχεια, ανοίξτε το [Terminal](https://code.visualstudio.com/docs/terminal/basics/?WT.mc_id=academic-77807-sagibbon) μέσα στο [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) και εκτελέστε την ακόλουθη εντολή, αντικαθιστώντας το `` με τη διεύθυνση URL που μόλις αντιγράψατε: ```bash git clone ``` -2. Ανοίξτε τον φάκελο στο Visual Studio Code. Μπορείτε να το κάνετε κάνοντας κλικ στο **File** > **Open Folder** και επιλέγοντας τον φάκελο που μόλις κλωνοποιήσατε. +2. Ανοίξτε το φάκελο στο Visual Studio Code. Μπορείτε να το κάνετε κάνοντας κλικ στο **File** > **Open Folder** και επιλέγοντας το φάκελο που μόλις κλωνοποιήσατε. -> Συνιστώμενες επεκτάσεις για το Visual Studio Code: +> Προτεινόμενες επεκτάσεις Visual Studio Code: > > * [Live Server](https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer&WT.mc_id=academic-77807-sagibbon) - για προεπισκόπηση σελίδων HTML μέσα στο Visual Studio Code > * [Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&WT.mc_id=academic-77807-sagibbon) - για να σας βοηθήσει να γράφετε κώδικα πιο γρήγορα ## 📂 Κάθε μάθημα περιλαμβάνει: -- προαιρετική σχεδίαση ιδεών (sketchnote) +- προαιρετικό σκιτσάκι - προαιρετικό συμπληρωματικό βίντεο -- προθέρμανση quiz πριν το μάθημα +- προ-μαθησιακό quiz για προθέρμανση - γραπτό μάθημα -- για μαθήματα βασισμένα σε project, οδηγίες βήμα προς βήμα για το πώς να χτίσετε το έργο +- για μαθήματα βασισμένα σε έργα, οδηγούς βήμα προς βήμα για την κατασκευή του έργου - ελέγχους γνώσης - μια πρόκληση - συμπληρωματική ανάγνωση -- εργασίες -- [τεστ μετά το μάθημα](https://ff-quizzes.netlify.app/web/) +- ανάθεση +- [μετα-μαθησιακό quiz](https://ff-quizzes.netlify.app/web/) -> **Μια σημείωση για τα κουίζ**: Όλα τα κουίζ βρίσκονται στον φάκελο Quiz-app, συνολικά 48 κουίζ με τρεις ερωτήσεις το καθένα. Είναι διαθέσιμα [εδώ](https://ff-quizzes.netlify.app/web/) και η εφαρμογή κουίζ μπορεί να τρέξει τοπικά ή να αναπτυχθεί στο Azure· ακολουθήστε τις οδηγίες στον φάκελο `quiz-app`. +> **Σημείωση σχετικά με τα quiz**: Όλα τα quiz περιέχονται στο φάκελο Quiz-app, συνολικά 48 quiz με τρεις ερωτήσεις το καθένα. Είναι διαθέσιμα [εδώ](https://ff-quizzes.netlify.app/web/), η εφαρμογή quiz μπορεί να τρέξει τοπικά ή να αναπτυχθεί στο Azure· ακολουθήστε τις οδηγίες στον φάκελο `quiz-app`. ## 🗃️ Μαθήματα -| | Όνομα Έργου | Διδασκόμενες Έννοιες | Στόχοι Μάθησης | Σχετικό Μάθημα | Συγγραφέας | +| | Όνομα Έργου | Διδασκόμενες Έννοιες | Μαθησιακοί Στόχοι | Συνδεδεμένο Μάθημα | Συγγραφέας | | :-: | :------------------------------------------------------: | :--------------------------------------------------------------------: | ----------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------: | :---------------------: | -| 01 | Ξεκινώντας | Εισαγωγή στον Προγραμματισμό και τα Εργαλεία του Επαγγέλματος | Μάθετε τις βασικές αρχές πίσω από τις περισσότερες γλώσσες προγραμματισμού και για το λογισμικό που βοηθά τους επαγγελματίες προγραμματιστές να κάνουν τη δουλειά τους | [Εισαγωγή στις Γλώσσες Προγραμματισμού και στα Εργαλεία](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | -| 02 | Ξεκινώντας | Βασικά του GitHub, περιλαμβάνει τη συνεργασία με ομάδα | Πώς να χρησιμοποιήσετε το GitHub στο έργο σας, πώς να συνεργάζεστε με άλλους σε μια βάση κώδικα | [Εισαγωγή στο GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | -| 03 | Ξεκινώντας | Προσβασιμότητα | Μάθετε τα βασικά της προσβασιμότητας στον ιστό | [Βασικά της Προσβασιμότητας](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | -| 04 | Βασικά JS | Τύποι Δεδομένων JavaScript | Τα βασικά των τύπων δεδομένων JavaScript | [Τύποι Δεδομένων](./2-js-basics/1-data-types/README.md) | Jasmine | -| 05 | Βασικά JS | Συναρτήσεις και Μέθοδοι | Μάθετε για τις συναρτήσεις και τις μεθόδους για τη διαχείριση της ροής λογικής μιας εφαρμογής | [Συναρτήσεις και Μέθοδοι](./2-js-basics/2-functions-methods/README.md) | Jasmine and Christopher | -| 06 | Βασικά JS | Λήψη Αποφάσεων με JS | Μάθετε πώς να δημιουργείτε συνθήκες στον κώδικά σας χρησιμοποιώντας μεθόδους λήψης αποφάσεων | [Λήψη Αποφάσεων](./2-js-basics/3-making-decisions/README.md) | Jasmine | -| 07 | Βασικά JS | Πίνακες και Βρόχοι | Εργαστείτε με δεδομένα χρησιμοποιώντας πίνακες και βρόχους στην JavaScript | [Πίνακες και Βρόχοι](./2-js-basics/4-arrays-loops/README.md) | Jasmine | -| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML στην πράξη | Δημιουργήστε το HTML για να φτιάξετε ένα online terrarium, εστιάζοντας στη δημιουργία διάταξης | [Εισαγωγή στο HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | -| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS στην πράξη | Δημιουργήστε το CSS για το στυλιζάρισμα του online terrarium, εστιάζοντας στα βασικά του CSS, συμπεριλαμβανομένου και του responsive design | [Εισαγωγή στο CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | -| 10 | [Terrarium](./3-terrarium/solution/README.md) | Κλεισίματα JavaScript, χειρισμός DOM | Δημιουργήστε τον JavaScript κώδικα για να κάνει το terrarium λειτουργικό ως interface με σύρσιμο και απόθεση, εστιάζοντας σε κλεισίματα και χειρισμό DOM | [Κλεισίματα JavaScript, χειρισμός DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | -| 11 | [Παιχνίδι Πληκτρολόγησης](./4-typing-game/solution/README.md) | Δημιουργία Παιχνιδιού Πληκτρολόγησης | Μάθετε πώς να χρησιμοποιείτε τα γεγονότα πληκτρολογίου για να οδηγήσετε τη λογική της εφαρμογής JavaScript | [Προγραμματισμός με Γεγονότα](./4-typing-game/typing-game/README.md) | Christopher | -| 12 | [Πράσινη Επέκταση Περιηγητή](./5-browser-extension/solution/README.md) | Εργασία με Περιηγητές | Μάθετε πώς λειτουργούν οι περιηγητές, την ιστορία τους και πώς να στήσετε τα πρώτα στοιχεία μιας επέκτασης περιηγητή | [Σχετικά με τους Περιηγητές](./5-browser-extension/1-about-browsers/README.md) | Jen | -| 13 | [Πράσινη Επέκταση Περιηγητή](./5-browser-extension/solution/README.md) | Δημιουργία φόρμας, κλήση API και αποθήκευση μεταβλητών στο τοπικό αποθετήριο | Δημιουργήστε τα στοιχεία JavaScript της επέκτασης περιηγητή σας για να καλέσετε ένα API χρησιμοποιώντας μεταβλητές αποθηκευμένες στο τοπικό αποθετήριο | [APIs, Φόρμες και Τοπικό Αποθετήριο](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | -| 14 | [Πράσινη Επέκταση Περιηγητή](./5-browser-extension/solution/README.md) | Διαδικασίες υπόβαθρου στον περιηγητή, απόδοση στον ιστό | Χρησιμοποιήστε τις διαδικασίες υπόβαθρου για τη διαχείριση του εικονιδίου της επέκτασης· μάθετε για την απόδοση του ιστού και κάποιες βελτιστοποιήσεις για βελτίωση | [Εργασίες Υπόβαθρου και Απόδοση](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | -| 15 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Προχωρημένη Ανάπτυξη Παιχνιδιών με JavaScript | Μάθετε για την Κληρονομικότητα χρησιμοποιώντας τόσο Κλάσεις όσο και Σύνθεση και το μοτίβο Pub/Sub, σε προετοιμασία για την κατασκευή ενός παιχνιδιού | [Εισαγωγή στην Προχωρημένη Ανάπτυξη Παιχνιδιών](./6-space-game/1-introduction/README.md) | Chris | -| 16 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Σχεδίαση σε καμβά | Μάθετε για το Canvas API, που χρησιμοποιείται για ζωγραφική στοιχείων στην οθόνη | [Σχεδίαση σε Καμβά](./6-space-game/2-drawing-to-canvas/README.md) | Chris | -| 17 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Κίνηση στοιχείων στην οθόνη | Ανακαλύψτε πώς τα στοιχεία μπορούν να κινηθούν χρησιμοποιώντας καρτεσιανές συντεταγμένες και το Canvas API | [Κίνηση Στοιχείων](./6-space-game/3-moving-elements-around/README.md) | Chris | -| 18 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Ανίχνευση συγκρούσεων | Κάντε τα στοιχεία να συγκρούονται και να αντιδρούν μεταξύ τους χρησιμοποιώντας πατήματα πλήκτρων και διαθέτοντας λειτουργία ανάρρωσης για ομαλή απόδοση στο παιχνίδι | [Ανίχνευση Σύγκρουσης](./6-space-game/4-collision-detection/README.md) | Chris | -| 19 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Διατήρηση σκορ | Εκτελέστε μαθηματικούς υπολογισμούς βάσει της κατάστασης και απόδοσης του παιχνιδιού | [Διατήρηση Σκορ](./6-space-game/5-keeping-score/README.md) | Chris | -| 20 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Τερματισμός και επανεκκίνηση παιχνιδιού | Μάθετε για τον τερματισμό και την επανεκκίνηση του παιχνιδιού, συμπεριλαμβανομένου του καθαρισμού πόρων και της επαναφοράς μεταβλητών | [Η Συνθήκη Τερματισμού](./6-space-game/6-end-condition/README.md) | Chris | -| 21 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Πρότυπα HTML και Διαδρομές σε μια Web Εφαρμογή | Μάθετε πώς να δημιουργήσετε τη δομή μιας πολυσέλιδης ιστοσελίδας χρησιμοποιώντας routing και πρότυπα HTML | [Πρότυπα HTML και Διαδρομές](./7-bank-project/1-template-route/README.md) | Yohan | -| 22 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Δημιουργία Φόρμας Σύνδεσης και Εγγραφής | Μάθετε για τη δημιουργία φορμών και τη διαχείριση των διαδικασιών επικύρωσης | [Φόρμες](./7-bank-project/2-forms/README.md) | Yohan | -| 23 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Μέθοδοι Ανάκτησης και Χρήσης Δεδομένων | Πώς ρέουν τα δεδομένα μέσα και έξω από την εφαρμογή σας, πώς να τα ανακτάτε, να τα αποθηκεύετε και να τα απορρίπτετε | [Δεδομένα](./7-bank-project/3-data/README.md) | Yohan | -| 24 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Έννοιες Διαχείρισης Κατάστασης | Μάθετε πώς η εφαρμογή διατηρεί την κατάσταση και πώς να τη διαχειρίζεστε προγραμματιστικά | [Διαχείριση Κατάστασης](./7-bank-project/4-state-management/README.md) | Yohan | -| 25 | [Κώδικας Περιηγητή/VSCode](../../8-code-editor) | Εργασία με το VScode | Μάθετε πώς να χρησιμοποιείτε έναν επεξεργαστή κώδικα | [Χρήση επεξεργαστή κώδικα VScode](./8-code-editor/1-using-a-code-editor/README.md) | Chris | -| 26 | [Βοηθοί Τεχνητής Νοημοσύνης](./9-chat-project/README.md) | Εργασία με AI | Μάθετε πώς να δημιουργήσετε τον δικό σας βοηθό τεχνητής νοημοσύνης | [Έργο Βοηθού AI](./9-chat-project/README.md) | Chris | +| 01 | Ξεκινώντας | Εισαγωγή στον Προγραμματισμό και τα Εργαλεία της Εργασίας | Μάθετε τις βασικές αρχές πίσω από τις περισσότερες γλώσσες προγραμματισμού και για το λογισμικό που βοηθά τους επαγγελματίες προγραμματιστές να κάνουν τη δουλειά τους | [Εισαγωγή στις Γλώσσες Προγραμματισμού και Εργαλεία](./1-getting-started-lessons/1-intro-to-programming-languages/README.md) | Jasmine | +| 02 | Ξεκινώντας | Βασικά του GitHub, περιλαμβάνει συνεργασία με ομάδα | Πώς να χρησιμοποιείτε το GitHub στο έργο σας, πώς να συνεργάζεστε με άλλους σε βάση κώδικα | [Εισαγωγή στο GitHub](./1-getting-started-lessons/2-github-basics/README.md) | Floor | +| 03 | Ξεκινώντας | Προσβασιμότητα | Μάθετε τα βασικά της προσβασιμότητας ιστού | [Βασικά της Προσβασιμότητας](./1-getting-started-lessons/3-accessibility/README.md) | Christopher | +| 04 | Βασικά JS | Τύποι Δεδομένων JavaScript | Τα βασικά των τύπων δεδομένων JavaScript | [Τύποι Δεδομένων](./2-js-basics/1-data-types/README.md) | Jasmine | +| 05 | Βασικά JS | Συναρτήσεις και Μέθοδοι | Μάθετε για τις συναρτήσεις και μεθόδους για τη διαχείριση της ροής λογικής μιας εφαρμογής | [Συναρτήσεις και Μέθοδοι](./2-js-basics/2-functions-methods/README.md) | Jasmine και Christopher | +| 06 | Βασικά JS | Λήψη Αποφάσεων με JS | Μάθετε πώς να δημιουργείτε συνθήκες στον κώδικά σας χρησιμοποιώντας μεθόδους λήψης αποφάσεων | [Λήψη Αποφάσεων](./2-js-basics/3-making-decisions/README.md) | Jasmine | +| 07 | Βασικά JS | Πίνακες και Βρόχοι | Εργαστείτε με δεδομένα χρησιμοποιώντας πίνακες και βρόχους σε JavaScript | [Πίνακες και Βρόχοι](./2-js-basics/4-arrays-loops/README.md) | Jasmine | +| 08 | [Terrarium](./3-terrarium/solution/README.md) | HTML στην Πράξη | Δημιουργήστε το HTML για ένα διαδικτυακό terrarium, εστιάζοντας στην κατασκευή μιας διάταξης | [Εισαγωγή στο HTML](./3-terrarium/1-intro-to-html/README.md) | Jen | +| 09 | [Terrarium](./3-terrarium/solution/README.md) | CSS στην Πράξη | Δημιουργήστε το CSS για το στυλ του διαδικτυακού terrarium, εστιάζοντας στα βασικά του CSS, συμπεριλαμβανομένης της ανταπόκρισης της σελίδας | [Εισαγωγή στο CSS](./3-terrarium/2-intro-to-css/README.md) | Jen | +| 10 | [Terrarium](./3-terrarium/solution/README.md) | Κλεισίματα JavaScript, χειρισμός DOM | Δημιουργήστε τον JavaScript κώδικα για τη λειτουργία του terrarium ως διεπαφή drag/drop, εστιάζοντας στα κλεισίματα και χειρισμό DOM | [Κλεισίματα JavaScript, χειρισμός DOM](./3-terrarium/3-intro-to-DOM-and-closures/README.md) | Jen | +| 11 | [Παιχνίδι Πληκτρολόγησης](./4-typing-game/solution/README.md) | Δημιουργία Παιχνιδιού Πληκτρολόγησης | Μάθετε πώς να χρησιμοποιείτε τα γεγονότα πληκτρολογίου για να κατευθύνετε τη λογική της εφαρμογής JavaScript | [Προγραμματισμός με βάση τα γεγονότα](./4-typing-game/typing-game/README.md) | Christopher | +| 12 | [Πράσινη Επέκταση Περιηγητή](./5-browser-extension/solution/README.md) | Εργασία με Περιηγητές | Μάθετε πώς λειτουργούν οι περιηγητές, την ιστορία τους και πώς να στήσετε τα πρώτα στοιχεία επέκτασης περιηγητή | [Σχετικά με τους Περιηγητές](./5-browser-extension/1-about-browsers/README.md) | Jen | +| 13 | [Πράσινη Επέκταση Περιηγητή](./5-browser-extension/solution/README.md) | Δημιουργία φόρμας, κλήση API και αποθήκευση μεταβλητών στο τοπικό αποθηκευτικό χώρο | Δημιουργήστε τα στοιχεία JavaScript της επέκτασης περιηγητή σας για να καλέσετε ένα API χρησιμοποιώντας μεταβλητές αποθηκευμένες τοπικά | [APIs, Φόρμες και Τοπική Αποθήκευση](./5-browser-extension/2-forms-browsers-local-storage/README.md) | Jen | +| 14 | [Πράσινη Επέκταση Περιηγητή](./5-browser-extension/solution/README.md) | Φόντινες διεργασίες στον περιηγητή, απόδοση ιστοσελίδας | Χρησιμοποιήστε τις φόντινες διεργασίες του περιηγητή για να διαχειριστείτε το εικονίδιο της επέκτασης· μάθετε για την απόδοση του ιστού και ορισμένες βελτιστοποιήσεις | [Φόντινες εργασίες και Απόδοση](./5-browser-extension/3-background-tasks-and-performance/README.md) | Jen | +| 15 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Προχωρημένη Ανάπτυξη Παιχνιδιών με JavaScript | Μάθετε για την Κληρονομικότητα χρησιμοποιώντας και Κλάσεις και Σύνθεση και το πρότυπο Pub/Sub, ως προετοιμασία για τη δημιουργία παιχνιδιού | [Εισαγωγή στην Προχωρημένη Ανάπτυξη Παιχνιδιών](./6-space-game/1-introduction/README.md) | Chris | +| 16 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Σχεδίαση στον καμβά | Μάθετε για το Canvas API, που χρησιμοποιείται για να ζωγραφίζετε στοιχεία σε οθόνη | [Σχεδίαση στον Καμβά](./6-space-game/2-drawing-to-canvas/README.md) | Chris | +| 17 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Μετακίνηση στοιχείων στην οθόνη | Ανακαλύψτε πώς τα στοιχεία μπορούν να αποκτούν κίνηση χρησιμοποιώντας τα καρτεσιανά συντεταγμένα και το Canvas API | [Μετακίνηση Στοιχείων](./6-space-game/3-moving-elements-around/README.md) | Chris | +| 18 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Ανίχνευση συγκρούσεων | Κάντε τα στοιχεία να συγκρούονται και να αντιδρούν το ένα στο άλλο χρησιμοποιώντας πατήματα και παρέχετε λειτουργία ψύξης για τη βελτίωση της απόδοσης του παιχνιδιού | [Ανίχνευση Συγκρούσεων](./6-space-game/4-collision-detection/README.md) | Chris | +| 19 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Διατήρηση σκορ | Εκτελέστε μαθηματικούς υπολογισμούς με βάση την κατάσταση και απόδοση του παιχνιδιού | [Διατήρηση Σκορ](./6-space-game/5-keeping-score/README.md) | Chris | +| 20 | [Παιχνίδι Διαστήματος](./6-space-game/solution/README.md) | Τερματισμός και επανεκκίνηση παιχνιδιού | Μάθετε για τον τερματισμό και την επανεκκίνηση του παιχνιδιού, συμπεριλαμβανομένου του καθαρισμού πόρων και της επαναφοράς τιμών μεταβλητών | [Η Συνθήκη Τερματισμού](./6-space-game/6-end-condition/README.md) | Chris | +| 21 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Πρότυπα HTML και Διαδρομές σε μια Ιστοσελίδα | Μάθετε πώς να δημιουργήσετε τη δομή μιας πολυσέλιδης ιστοσελίδας χρησιμοποιώντας δρομολόγηση και πρότυπα HTML | [Πρότυπα HTML και Διαδρομές](./7-bank-project/1-template-route/README.md) | Yohan | +| 22 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Δημιουργία Φόρμας Εισόδου και Εγγραφής | Μάθετε για τη δημιουργία φορμών και τη διαχείριση ρουτινών ελέγχου | [Φόρμες](./7-bank-project/2-forms/README.md) | Yohan | +| 23 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Μέθοδοι Λήψης και Χρήσης Δεδομένων | Πώς τα δεδομένα ρέουν μέσα κι έξω από την εφαρμογή σας, πώς να τα λαμβάνετε, να τα αποθηκεύετε και να τα απορρίπτετε | [Δεδομένα](./7-bank-project/3-data/README.md) | Yohan | +| 24 | [Εφαρμογή Τραπεζικής](./7-bank-project/solution/README.md) | Έννοιες Διαχείρισης Κατάστασης | Μάθετε πώς η εφαρμογή σας διατηρεί κατάσταση και πώς να τη διαχειρίζεστε προγραμματιστικά | [Διαχείριση Κατάστασης](./7-bank-project/4-state-management/README.md) | Yohan | +| 25 | [Κώδικας Browser/VScode](../../8-code-editor) | Εργασία με το VScode | Μάθετε πώς να χρησιμοποιείτε έναν επεξεργαστή κώδικα | [Χρήση του επεξεργαστή κώδικα VScode](./8-code-editor/1-using-a-code-editor/README.md) | Chris | +| 26 | [Βοηθοί Τεχνητής Νοημοσύνης](./9-chat-project/README.md) | Εργασία με ΤΝ | Μάθετε πώς να φτιάξετε τον δικό σας βοηθό ΤΝ | [Έργο βοηθού ΤΝ](./9-chat-project/README.md) | Chris | ## 🏫 Παιδαγωγική Το πρόγραμμα σπουδών μας έχει σχεδιαστεί με δύο βασικές παιδαγωγικές αρχές στο μυαλό: * μάθηση βασισμένη σε έργα -* συχνά κουίζ +* συχνά quiz -Το πρόγραμμα διδάσκει τα βασικά της JavaScript, HTML και CSS, καθώς και τα πιο σύγχρονα εργαλεία και τεχνικές που χρησιμοποιούν οι σύγχρονοι προγραμματιστές ιστού. Οι μαθητές θα έχουν την ευκαιρία να αναπτύξουν πρακτική εμπειρία δημιουργώντας ένα παιχνίδι πληκτρολόγησης, ένα εικονικό terrarium, μια οικολογική επέκταση περιηγητή, ένα παιχνίδι τύπου εισβολέα στο διάστημα και μια τραπεζική εφαρμογή για επιχειρήσεις. Μέχρι το τέλος της σειράς, οι μαθητές θα έχουν αποκτήσει μια στέρεη κατανόηση της ανάπτυξης στον ιστό. +Το πρόγραμμα διδάσκει τα βασικά του JavaScript, HTML και CSS, καθώς και τα πιο πρόσφατα εργαλεία και τεχνικές που χρησιμοποιούν οι σημερινοί προγραμματιστές ιστού. Οι σπουδαστές θα έχουν την ευκαιρία να αποκτήσουν πρακτική εμπειρία χτίζοντας ένα παιχνίδι πληκτρολόγησης, ένα εικονικό terrarium, μια φιλική προς το περιβάλλον επέκταση περιηγητή, ένα παιχνίδι τύπου space-invader και μια τραπεζική εφαρμογή για επιχειρήσεις. Μέχρι το τέλος της σειράς, οι μαθητές θα έχουν αποκτήσει σταθερή κατανόηση της ανάπτυξης ιστού. -> 🎓 Μπορείτε να παρακολουθήσετε τα πρώτα μαθήματα αυτού του προγράμματος ως [Μονοπάτι Μάθησης](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) στο Microsoft Learn! +> 🎓 Μπορείτε να παρακολουθήσετε τα πρώτα λίγα μαθήματα αυτού του προγράμματος σπουδών ως [Μονοπάτι Μάθησης](https://docs.microsoft.com/learn/paths/web-development-101/?WT.mc_id=academic-77807-sagibbon) στο Microsoft Learn! -Διασφαλίζοντας ότι το περιεχόμενο εναρμονίζεται με τα έργα, η διαδικασία γίνεται πιο ελκυστική για τους μαθητές και η διατήρηση των εννοιών ενισχύεται. Επίσης, γράψαμε αρκετά εισαγωγικά μαθήματα στα βασικά της JavaScript για την εισαγωγή εννοιών, συνοδευόμενα από ένα βίντεο από τη συλλογή βίντεο "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)", αρκετοί από τους συγγραφείς του οποίου συνέβαλαν σε αυτό το πρόγραμμα σπουδών. +Διασφαλίζοντας ότι το περιεχόμενο ευθυγραμμίζεται με τα έργα, η διαδικασία γίνεται πιο ελκυστική για τους μαθητές και η διατήρηση των εννοιών ενισχύεται. Επίσης γράψαμε αρκετά αρχικά μαθήματα στα βασικά της JavaScript για να παρουσιάσουμε έννοιες, σε συνδυασμό με βίντεο από τη συλλογή "[Beginners Series to: JavaScript](https://channel9.msdn.com/Series/Beginners-Series-to-JavaScript/?WT.mc_id=academic-77807-sagibbon)" με βιντεομαθήματα, με μερικούς από τους συγγραφείς τους να έχουν συμβάλει σε αυτό το πρόγραμμα σπουδών. -Επιπλέον, ένα χαμηλού ρίσκου κουίζ πριν το μάθημα θέτει την πρόθεση του μαθητή προς την εκμάθηση ενός θέματος, ενώ ένα δεύτερο κουίζ μετά το μάθημα εξασφαλίζει περαιτέρω διατήρηση. Αυτό το πρόγραμμα σπουδών σχεδιάστηκε να είναι ευέλικτο και διασκεδαστικό και μπορεί να παρακολουθηθεί ολόκληρο ή κατά τμήματα. Τα έργα ξεκινούν μικρά και γίνονται όλο και πιο σύνθετα προς το τέλος του κύκλου των 12 εβδομάδων. +Επιπλέον, ένα ανεπίσημο quiz πριν από το μάθημα θέτει τον σκοπό του μαθητή προς την εκμάθηση μιας θεματικής ενότητας, ενώ ένα δεύτερο quiz μετά το μάθημα διασφαλίζει περαιτέρω διατήρηση. Αυτό το πρόγραμμα σπουδών έχει σχεδιαστεί ώστε να είναι ευέλικτο και διασκεδαστικό και μπορεί να παρακολουθηθεί στο σύνολό του ή μεμονωμένα τμήματα. Τα έργα ξεκινούν μικρά και γίνονται όλο και πιο σύνθετα μέχρι το τέλος του δωδεκαβδομαδιαίου κύκλου. -Παρόλο που αποφεύγουμε εσκεμμένα την εισαγωγή πλαισίων εργασίας JavaScript για να εστιάσουμε στις βασικές δεξιότητες που χρειάζεται ένας προγραμματιστής ιστού πριν από την υιοθέτηση πλαισίου, ένα καλό επόμενο βήμα για την ολοκλήρωση αυτού του προγράμματος θα ήταν η εκμάθηση του Node.js μέσω μιας άλλης συλλογής βίντεο: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". +Ενώ έχουμε σκοπίμως αποφύγει την εισαγωγή πλαισίων JavaScript για να επικεντρωθούμε στις βασικές δεξιότητες που χρειάζεται ένας προγραμματιστής ιστού πριν την υιοθέτηση πλαισίου, ένα καλό επόμενο βήμα για την ολοκλήρωση αυτού του προγράμματος σπουδών θα ήταν η εκμάθηση του Node.js μέσω μιας άλλης συλλογής βίντεο: "[Beginner Series to: Node.js](https://channel9.msdn.com/Series/Beginners-Series-to-Nodejs/?WT.mc_id=academic-77807-sagibbon)". -> Επισκεφτείτε τις οδηγίες μας [Κώδικας Συμπεριφοράς](CODE_OF_CONDUCT.md) και [Συνεισφοράς](CONTRIBUTING.md). Καλωσορίζουμε τα εποικοδομητικά σας σχόλια! +> Επισκεφτείτε τους [Κανόνες Συμπεριφοράς](CODE_OF_CONDUCT.md) και τις οδηγίες [Συμμετοχής](CONTRIBUTING.md). Καλωσορίζουμε τις εποικοδομητικές σας παρατηρήσεις! ## 🧭 Πρόσβαση εκτός σύνδεσης -Μπορείτε να εκτελέσετε αυτή την τεκμηρίωση εκτός σύνδεσης χρησιμοποιώντας το [Docsify](https://docsify.js.org/#/). Κάντε fork αυτό το αποθετήριο, [εγκαταστήστε το Docsify](https://docsify.js.org/#/quickstart) στη τοπική σας μηχανή και μετά στο ριζικό φάκελο αυτού του αποθετηρίου, πληκτρολογήστε `docsify serve`. Ο ιστότοπος θα σερβιριστεί στην πόρτα 3000 στον τοπικό σας υπολογιστή: `localhost:3000`. +Μπορείτε να τρέξετε αυτή την τεκμηρίωση εκτός σύνδεσης χρησιμοποιώντας το [Docsify](https://docsify.js.org/#/). Κλωνοποιήστε το αποθετήριο, [εγκαταστήστε το Docsify](https://docsify.js.org/#/quickstart) στον τοπικό σας υπολογιστή και μετά στον ριζικό φάκελο του αποθετηρίου, πληκτρολογήστε `docsify serve`. Ο ιστότοπος θα σερβιριστεί στην θύρα 3000 στο τοπικό σας μηχάνημα: `localhost:3000`. ## 📘 PDF - -Ένα PDF με όλα τα μαθήματα μπορείτε να βρείτε [εδώ](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). +Ένα PDF με όλα τα μαθήματα μπορεί να βρεθεί [εδώ](https://microsoft.github.io/Web-Dev-For-Beginners/pdf/readme.pdf). ## 🎒 Άλλα Μαθήματα + Η ομάδα μας παράγει και άλλα μαθήματα! Δείτε: @@ -224,7 +233,7 @@ --- -### Σειρά για Δημιουργική Τεχνητή Νοημοσύνη +### Σειρά για Τη Γενετική Τεχνητή Νοημοσύνη [![Generative AI for Beginners](https://img.shields.io/badge/Generative%20AI%20for%20Beginners-8B5CF6?style=for-the-badge&labelColor=E5E7EB&color=8B5CF6)](https://github.com/microsoft/generative-ai-for-beginners?WT.mc_id=academic-105485-koreyst) [![Generative AI (.NET)](https://img.shields.io/badge/Generative%20AI%20(.NET)-9333EA?style=for-the-badge&labelColor=E5E7EB&color=9333EA)](https://github.com/microsoft/Generative-AI-for-beginners-dotnet?WT.mc_id=academic-105485-koreyst) [![Generative AI (Java)](https://img.shields.io/badge/Generative%20AI%20(Java)-C084FC?style=for-the-badge&labelColor=E5E7EB&color=C084FC)](https://github.com/microsoft/generative-ai-for-beginners-java?WT.mc_id=academic-105485-koreyst) @@ -232,7 +241,7 @@ --- -### Κεντρική Μάθηση +### Βασική Μάθηση [![ML for Beginners](https://img.shields.io/badge/ML%20for%20Beginners-22C55E?style=for-the-badge&labelColor=E5E7EB&color=22C55E)](https://aka.ms/ml-beginners?WT.mc_id=academic-105485-koreyst) [![Data Science for Beginners](https://img.shields.io/badge/Data%20Science%20for%20Beginners-84CC16?style=for-the-badge&labelColor=E5E7EB&color=84CC16)](https://aka.ms/datascience-beginners?WT.mc_id=academic-105485-koreyst) [![AI for Beginners](https://img.shields.io/badge/AI%20for%20Beginners-A3E635?style=for-the-badge&labelColor=E5E7EB&color=A3E635)](https://aka.ms/ai-beginners?WT.mc_id=academic-105485-koreyst) @@ -251,11 +260,11 @@ ## Λήψη Βοήθειας -Αν κολλήσετε ή έχετε ερωτήσεις σχετικά με τη δημιουργία εφαρμογών AI, συμμετάσχετε με άλλους μαθητές και έμπειρους προγραμματιστές σε συζητήσεις σχετικά με το MCP. Είναι μια υποστηρικτική κοινότητα όπου οι ερωτήσεις είναι ευπρόσδεκτες και η γνώση μοιράζεται ελεύθερα. +Αν κολλήσετε ή έχετε απορίες σχετικά με την ανάπτυξη εφαρμογών ΤΝ, συμμετάσχετε σε συζητήσεις με άλλους μαθητές και έμπειρους προγραμματιστές για το MCP. Είναι μια υποστηρικτική κοινότητα όπου οι ερωτήσεις είναι ευπρόσδεκτες και η γνώση μοιράζεται ελεύθερα. [![Microsoft Foundry Discord](https://dcbadge.limes.pink/api/server/nTYy5BXMWG)](https://discord.gg/nTYy5BXMWG) -Αν έχετε ανατροφοδότηση για το προϊόν ή λάθη κατά την ανάπτυξη, επισκεφθείτε: +Εάν έχετε ανατροφοδότηση προϊόντος ή λάθη κατά την ανάπτυξη, επισκεφτείτε: [![Microsoft Foundry Developer Forum](https://img.shields.io/badge/GitHub-Microsoft_Foundry_Developer_Forum-blue?style=for-the-badge&logo=github&color=000000&logoColor=fff)](https://aka.ms/foundry/forum) @@ -266,6 +275,6 @@ --- -**Απόρρητο**: -Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας υπηρεσία μετάφρασης με τεχνητή νοημοσύνη [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που επιδιώκουμε την ακρίβεια, παρακαλείστε να γνωρίζετε ότι οι αυτοματοποιημένες μεταφράσεις μπορεί να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη γλώσσα του θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπινο μεταφραστή. Δεν φέρουμε ευθύνη για τυχόν παρερμηνείες ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. +**Αποποίηση ευθυνών**: +Το παρόν έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρότι προσπαθούμε για ακρίβεια, παρακαλούμε να σημειώσετε ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το αρχικό έγγραφο στη μητρική του γλώσσα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή λανθασμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/en/.co-op-translator.json b/translations/en/.co-op-translator.json new file mode 100644 index 000000000..51d15da1c --- /dev/null +++ b/translations/en/.co-op-translator.json @@ -0,0 +1,584 @@ +{ + "1-getting-started-lessons/1-intro-to-programming-languages/README.md": { + "original_hash": "bec5e35642176d9e483552bfc82996d8", + "translation_date": "2026-03-06T11:35:13+00:00", + "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/README.md", + "language_code": "en" + }, + "1-getting-started-lessons/1-intro-to-programming-languages/assignment.md": { + "original_hash": "17b8ec8e85d99e27dcb3f73842e583be", + "translation_date": "2026-03-06T11:35:29+00:00", + "source_file": "1-getting-started-lessons/1-intro-to-programming-languages/assignment.md", + "language_code": "en" + }, + "1-getting-started-lessons/2-github-basics/README.md": { + "original_hash": "5c383cc2cc23bb164b06417d1c107a44", + "translation_date": "2026-03-06T11:37:58+00:00", + "source_file": "1-getting-started-lessons/2-github-basics/README.md", + "language_code": "en" + }, + "1-getting-started-lessons/3-accessibility/README.md": { + "original_hash": "7f2c48e04754724123ea100a822765e5", + "translation_date": "2026-03-06T11:31:39+00:00", + "source_file": "1-getting-started-lessons/3-accessibility/README.md", + "language_code": "en" + }, + "1-getting-started-lessons/3-accessibility/assignment.md": { + "original_hash": "e6d0f456dfc22afb41bbdefeb5ec179d", + "translation_date": "2026-03-06T11:32:26+00:00", + "source_file": "1-getting-started-lessons/3-accessibility/assignment.md", + "language_code": "en" + }, + "1-getting-started-lessons/README.md": { + "original_hash": "770d9f83dddc841c19f210dee5fe0712", + "translation_date": "2025-10-03T13:25:08+00:00", + "source_file": "1-getting-started-lessons/README.md", + "language_code": "en" + }, + "10-ai-framework-project/README.md": { + "original_hash": "3925b6a1c31c60755eaae4d578232c25", + "translation_date": "2026-03-06T10:39:12+00:00", + "source_file": "10-ai-framework-project/README.md", + "language_code": "en" + }, + "2-js-basics/1-data-types/README.md": { + "original_hash": "672b0bb6e8b431075f3bdb7130590d2d", + "translation_date": "2026-03-06T10:48:37+00:00", + "source_file": "2-js-basics/1-data-types/README.md", + "language_code": "en" + }, + "2-js-basics/1-data-types/assignment.md": { + "original_hash": "6fd645e97c48cd5eb5a3d290815ec8b5", + "translation_date": "2026-03-06T10:48:45+00:00", + "source_file": "2-js-basics/1-data-types/assignment.md", + "language_code": "en" + }, + "2-js-basics/2-functions-methods/README.md": { + "original_hash": "71f7d7dafa1c7194d79ddac87f669ff9", + "translation_date": "2026-03-06T10:46:37+00:00", + "source_file": "2-js-basics/2-functions-methods/README.md", + "language_code": "en" + }, + "2-js-basics/2-functions-methods/assignment.md": { + "original_hash": "8328f58f4593b4671656ff8f4b2edbd9", + "translation_date": "2026-03-06T10:46:50+00:00", + "source_file": "2-js-basics/2-functions-methods/assignment.md", + "language_code": "en" + }, + "2-js-basics/3-making-decisions/README.md": { + "original_hash": "c688385d15dd3645e924ea0ffee8967f", + "translation_date": "2026-03-06T10:50:36+00:00", + "source_file": "2-js-basics/3-making-decisions/README.md", + "language_code": "en" + }, + "2-js-basics/3-making-decisions/assignment.md": { + "original_hash": "ffe366b2d1f037b99fbadbe1dc81083d", + "translation_date": "2026-03-06T10:50:56+00:00", + "source_file": "2-js-basics/3-making-decisions/assignment.md", + "language_code": "en" + }, + "2-js-basics/4-arrays-loops/README.md": { + "original_hash": "1710a50a519a6e4a1b40a5638783018d", + "translation_date": "2026-03-06T10:52:54+00:00", + "source_file": "2-js-basics/4-arrays-loops/README.md", + "language_code": "en" + }, + "2-js-basics/4-arrays-loops/assignment.md": { + "original_hash": "8abcada0534e0fb3a7556ea3c5a2a8a4", + "translation_date": "2026-03-06T10:53:08+00:00", + "source_file": "2-js-basics/4-arrays-loops/assignment.md", + "language_code": "en" + }, + "2-js-basics/README.md": { + "original_hash": "cc9e70a2f096c67389c8acff1521fc27", + "translation_date": "2025-08-28T11:39:19+00:00", + "source_file": "2-js-basics/README.md", + "language_code": "en" + }, + "3-terrarium/1-intro-to-html/README.md": { + "original_hash": "3fcfa99c4897e051b558b5eaf1e8cc74", + "translation_date": "2026-03-06T11:24:57+00:00", + "source_file": "3-terrarium/1-intro-to-html/README.md", + "language_code": "en" + }, + "3-terrarium/1-intro-to-html/assignment.md": { + "original_hash": "650e63282e1dfa032890fcf5c1c4119d", + "translation_date": "2026-03-06T11:25:17+00:00", + "source_file": "3-terrarium/1-intro-to-html/assignment.md", + "language_code": "en" + }, + "3-terrarium/2-intro-to-css/README.md": { + "original_hash": "e39f3a4e3bcccf94639e3af1248f8a4d", + "translation_date": "2026-03-06T11:28:35+00:00", + "source_file": "3-terrarium/2-intro-to-css/README.md", + "language_code": "en" + }, + "3-terrarium/2-intro-to-css/assignment.md": { + "original_hash": "bee6762d4092a13fc7c338814963f980", + "translation_date": "2026-03-06T11:28:50+00:00", + "source_file": "3-terrarium/2-intro-to-css/assignment.md", + "language_code": "en" + }, + "3-terrarium/3-intro-to-DOM-and-closures/README.md": { + "original_hash": "973e48ad87d67bf5bb819746c9f8e302", + "translation_date": "2026-03-06T11:27:00+00:00", + "source_file": "3-terrarium/3-intro-to-DOM-and-closures/README.md", + "language_code": "en" + }, + "3-terrarium/3-intro-to-DOM-and-closures/assignment.md": { + "original_hash": "947ca5ce7c94aee9c7de7034e762bc17", + "translation_date": "2026-03-06T11:27:21+00:00", + "source_file": "3-terrarium/3-intro-to-DOM-and-closures/assignment.md", + "language_code": "en" + }, + "3-terrarium/README.md": { + "original_hash": "bc5c5550f79d10add90ce419ee34abb3", + "translation_date": "2026-03-06T10:40:00+00:00", + "source_file": "3-terrarium/README.md", + "language_code": "en" + }, + "3-terrarium/solution/README.md": { + "original_hash": "6329fbe8bd936068debd78cca6f09c0a", + "translation_date": "2025-08-28T11:50:16+00:00", + "source_file": "3-terrarium/solution/README.md", + "language_code": "en" + }, + "4-typing-game/README.md": { + "original_hash": "efa2ab875b8bb5a7883816506da6b6d2", + "translation_date": "2026-03-06T10:39:54+00:00", + "source_file": "4-typing-game/README.md", + "language_code": "en" + }, + "4-typing-game/solution/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:58:40+00:00", + "source_file": "4-typing-game/solution/README.md", + "language_code": "en" + }, + "4-typing-game/typing-game/README.md": { + "original_hash": "da8bc72041a2bb3826a54654ee1a8844", + "translation_date": "2026-03-06T11:23:27+00:00", + "source_file": "4-typing-game/typing-game/README.md", + "language_code": "en" + }, + "4-typing-game/typing-game/assignment.md": { + "original_hash": "3eac59d70e2532a677a2ce6bf765485a", + "translation_date": "2026-03-06T11:23:39+00:00", + "source_file": "4-typing-game/typing-game/assignment.md", + "language_code": "en" + }, + "5-browser-extension/1-about-browsers/README.md": { + "original_hash": "00aa85715e1efd4930c17a23e3012e69", + "translation_date": "2026-03-06T11:11:23+00:00", + "source_file": "5-browser-extension/1-about-browsers/README.md", + "language_code": "en" + }, + "5-browser-extension/1-about-browsers/assignment.md": { + "original_hash": "b6897c02603d0045dd6d8256e8714baa", + "translation_date": "2026-03-06T11:11:39+00:00", + "source_file": "5-browser-extension/1-about-browsers/assignment.md", + "language_code": "en" + }, + "5-browser-extension/2-forms-browsers-local-storage/README.md": { + "original_hash": "2b6203a48c48d8234e0948353b47d84e", + "translation_date": "2026-03-06T11:07:39+00:00", + "source_file": "5-browser-extension/2-forms-browsers-local-storage/README.md", + "language_code": "en" + }, + "5-browser-extension/2-forms-browsers-local-storage/assignment.md": { + "original_hash": "25b8d28b8531352d4eb67291fd7824c4", + "translation_date": "2026-03-06T11:07:57+00:00", + "source_file": "5-browser-extension/2-forms-browsers-local-storage/assignment.md", + "language_code": "en" + }, + "5-browser-extension/3-background-tasks-and-performance/README.md": { + "original_hash": "b275fed2c6fc90d2b9b6661a3225faa2", + "translation_date": "2026-03-06T11:09:37+00:00", + "source_file": "5-browser-extension/3-background-tasks-and-performance/README.md", + "language_code": "en" + }, + "5-browser-extension/3-background-tasks-and-performance/assignment.md": { + "original_hash": "a203e560e58ccc6ba68bffc40c7c8676", + "translation_date": "2026-03-06T11:09:58+00:00", + "source_file": "5-browser-extension/3-background-tasks-and-performance/assignment.md", + "language_code": "en" + }, + "5-browser-extension/README.md": { + "original_hash": "b121a279a6ab39878491f3e572673515", + "translation_date": "2025-08-28T11:22:58+00:00", + "source_file": "5-browser-extension/README.md", + "language_code": "en" + }, + "5-browser-extension/solution/README.md": { + "original_hash": "fab4e6b4f0efcd587a9029d82991f597", + "translation_date": "2025-08-28T11:27:00+00:00", + "source_file": "5-browser-extension/solution/README.md", + "language_code": "en" + }, + "5-browser-extension/solution/translation/README.es.md": { + "original_hash": "cbaf73f94a9ab4c680a10ef871e92948", + "translation_date": "2025-08-28T11:28:22+00:00", + "source_file": "5-browser-extension/solution/translation/README.es.md", + "language_code": "en" + }, + "5-browser-extension/solution/translation/README.fr.md": { + "original_hash": "9361268ca430b2579375009e1eceb5e5", + "translation_date": "2025-08-28T11:29:07+00:00", + "source_file": "5-browser-extension/solution/translation/README.fr.md", + "language_code": "en" + }, + "5-browser-extension/solution/translation/README.hi.md": { + "original_hash": "dd58ae1b7707034f055718c1b68bc8de", + "translation_date": "2025-08-28T11:27:20+00:00", + "source_file": "5-browser-extension/solution/translation/README.hi.md", + "language_code": "en" + }, + "5-browser-extension/solution/translation/README.it.md": { + "original_hash": "9a6b22a2eff0f499b66236be973b24ad", + "translation_date": "2025-08-28T11:27:41+00:00", + "source_file": "5-browser-extension/solution/translation/README.it.md", + "language_code": "en" + }, + "5-browser-extension/solution/translation/README.ja.md": { + "original_hash": "3f5e6821e0febccfc5d05e7c944d9e3d", + "translation_date": "2025-08-28T11:28:01+00:00", + "source_file": "5-browser-extension/solution/translation/README.ja.md", + "language_code": "en" + }, + "5-browser-extension/solution/translation/README.ms.md": { + "original_hash": "21b364c158c8e4f698de65eeac16c9fe", + "translation_date": "2025-08-28T11:28:46+00:00", + "source_file": "5-browser-extension/solution/translation/README.ms.md", + "language_code": "en" + }, + "5-browser-extension/start/README.md": { + "original_hash": "26fd39046d264ba185dcb086d3a8cf3e", + "translation_date": "2025-08-28T11:26:41+00:00", + "source_file": "5-browser-extension/start/README.md", + "language_code": "en" + }, + "6-space-game/1-introduction/README.md": { + "original_hash": "a6332a7bb4d0be3bfd24199c83993777", + "translation_date": "2026-03-06T11:03:38+00:00", + "source_file": "6-space-game/1-introduction/README.md", + "language_code": "en" + }, + "6-space-game/1-introduction/assignment.md": { + "original_hash": "c8fc39a014d08247c082878122e2ba73", + "translation_date": "2026-03-06T11:03:54+00:00", + "source_file": "6-space-game/1-introduction/assignment.md", + "language_code": "en" + }, + "6-space-game/2-drawing-to-canvas/README.md": { + "original_hash": "7994743c5b21fdcceb36307916ef249a", + "translation_date": "2026-03-06T10:58:48+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/README.md", + "language_code": "en" + }, + "6-space-game/2-drawing-to-canvas/assignment.md": { + "original_hash": "87cd43afe5b69dbbffb5c4b209ea6791", + "translation_date": "2026-03-06T10:58:59+00:00", + "source_file": "6-space-game/2-drawing-to-canvas/assignment.md", + "language_code": "en" + }, + "6-space-game/3-moving-elements-around/README.md": { + "original_hash": "8c55a2bd4bc0ebe4c88198fd563a9e09", + "translation_date": "2026-03-06T11:05:43+00:00", + "source_file": "6-space-game/3-moving-elements-around/README.md", + "language_code": "en" + }, + "6-space-game/3-moving-elements-around/assignment.md": { + "original_hash": "c162b3b3a1cafc1483c8015e9b266f0d", + "translation_date": "2026-03-06T11:05:53+00:00", + "source_file": "6-space-game/3-moving-elements-around/assignment.md", + "language_code": "en" + }, + "6-space-game/4-collision-detection/README.md": { + "original_hash": "039b4d8ce65f5edd82cf48d9c3e6728c", + "translation_date": "2026-03-06T10:57:05+00:00", + "source_file": "6-space-game/4-collision-detection/README.md", + "language_code": "en" + }, + "6-space-game/4-collision-detection/assignment.md": { + "original_hash": "124efddbb65166cddb38075ad6dae324", + "translation_date": "2026-03-06T10:57:16+00:00", + "source_file": "6-space-game/4-collision-detection/assignment.md", + "language_code": "en" + }, + "6-space-game/4-collision-detection/solution/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:35:46+00:00", + "source_file": "6-space-game/4-collision-detection/solution/README.md", + "language_code": "en" + }, + "6-space-game/4-collision-detection/your-work/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:35:55+00:00", + "source_file": "6-space-game/4-collision-detection/your-work/README.md", + "language_code": "en" + }, + "6-space-game/5-keeping-score/README.md": { + "original_hash": "2ed9145a16cf576faa2a973dff84d099", + "translation_date": "2026-03-06T11:01:59+00:00", + "source_file": "6-space-game/5-keeping-score/README.md", + "language_code": "en" + }, + "6-space-game/5-keeping-score/assignment.md": { + "original_hash": "81f292dbda01685b91735e0398dc0504", + "translation_date": "2025-08-28T11:34:09+00:00", + "source_file": "6-space-game/5-keeping-score/assignment.md", + "language_code": "en" + }, + "6-space-game/5-keeping-score/solution/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:34:21+00:00", + "source_file": "6-space-game/5-keeping-score/solution/README.md", + "language_code": "en" + }, + "6-space-game/5-keeping-score/your-work/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:34:30+00:00", + "source_file": "6-space-game/5-keeping-score/your-work/README.md", + "language_code": "en" + }, + "6-space-game/6-end-condition/README.md": { + "original_hash": "a4b78043f4d64bf3ee24e0689b8b391d", + "translation_date": "2026-03-06T11:00:22+00:00", + "source_file": "6-space-game/6-end-condition/README.md", + "language_code": "en" + }, + "6-space-game/6-end-condition/assignment.md": { + "original_hash": "232d592791465c1678cab3a2bb6cd3e8", + "translation_date": "2026-03-06T11:00:50+00:00", + "source_file": "6-space-game/6-end-condition/assignment.md", + "language_code": "en" + }, + "6-space-game/6-end-condition/solution/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:38:05+00:00", + "source_file": "6-space-game/6-end-condition/solution/README.md", + "language_code": "en" + }, + "6-space-game/6-end-condition/your-work/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:38:14+00:00", + "source_file": "6-space-game/6-end-condition/your-work/README.md", + "language_code": "en" + }, + "6-space-game/README.md": { + "original_hash": "c40a698395ee5102715f7880bba3f2e7", + "translation_date": "2025-08-28T11:31:47+00:00", + "source_file": "6-space-game/README.md", + "language_code": "en" + }, + "6-space-game/solution/README.md": { + "original_hash": "068cbb9b3c10a96d503f6cdd6c9ace8c", + "translation_date": "2025-08-28T11:34:38+00:00", + "source_file": "6-space-game/solution/README.md", + "language_code": "en" + }, + "7-bank-project/1-template-route/README.md": { + "original_hash": "351678bece18f07d9daa987a881fb062", + "translation_date": "2026-03-06T11:16:13+00:00", + "source_file": "7-bank-project/1-template-route/README.md", + "language_code": "en" + }, + "7-bank-project/1-template-route/assignment.md": { + "original_hash": "df0dcecddcd28ea8cbf6ede0ad57d673", + "translation_date": "2026-03-06T11:16:24+00:00", + "source_file": "7-bank-project/1-template-route/assignment.md", + "language_code": "en" + }, + "7-bank-project/2-forms/README.md": { + "original_hash": "7cbdbd132d39a2bb493e85bc2a9387cc", + "translation_date": "2026-03-06T11:13:46+00:00", + "source_file": "7-bank-project/2-forms/README.md", + "language_code": "en" + }, + "7-bank-project/2-forms/assignment.md": { + "original_hash": "efb01fcafd2ef40c593a6e662fc938a8", + "translation_date": "2026-03-06T11:14:07+00:00", + "source_file": "7-bank-project/2-forms/assignment.md", + "language_code": "en" + }, + "7-bank-project/3-data/README.md": { + "original_hash": "86ee5069f27ea3151389d8687c95fac9", + "translation_date": "2026-03-06T11:18:59+00:00", + "source_file": "7-bank-project/3-data/README.md", + "language_code": "en" + }, + "7-bank-project/3-data/assignment.md": { + "original_hash": "d0a02cb117e91a5b5f24178080068a3d", + "translation_date": "2026-03-06T11:19:20+00:00", + "source_file": "7-bank-project/3-data/assignment.md", + "language_code": "en" + }, + "7-bank-project/4-state-management/README.md": { + "original_hash": "b807b09df716dc48a2b750835bf8e933", + "translation_date": "2026-03-06T11:21:23+00:00", + "source_file": "7-bank-project/4-state-management/README.md", + "language_code": "en" + }, + "7-bank-project/4-state-management/assignment.md": { + "original_hash": "50a7783473b39a2e0f133e271a102231", + "translation_date": "2026-03-06T11:21:50+00:00", + "source_file": "7-bank-project/4-state-management/assignment.md", + "language_code": "en" + }, + "7-bank-project/README.md": { + "original_hash": "830359535306594b448db6575ce5cdee", + "translation_date": "2025-08-28T11:13:52+00:00", + "source_file": "7-bank-project/README.md", + "language_code": "en" + }, + "7-bank-project/api/README.md": { + "original_hash": "9884f8c8a61cf56214450f8b16a094ce", + "translation_date": "2025-08-28T11:16:11+00:00", + "source_file": "7-bank-project/api/README.md", + "language_code": "en" + }, + "7-bank-project/solution/README.md": { + "original_hash": "461aa4fc74c6b1789c3a13b5d82c0cd9", + "translation_date": "2025-08-28T11:16:34+00:00", + "source_file": "7-bank-project/solution/README.md", + "language_code": "en" + }, + "8-code-editor/1-using-a-code-editor/README.md": { + "original_hash": "a9a3bcc037a447e2d8994d99e871cd9f", + "translation_date": "2026-03-06T10:54:48+00:00", + "source_file": "8-code-editor/1-using-a-code-editor/README.md", + "language_code": "en" + }, + "8-code-editor/1-using-a-code-editor/assignment.md": { + "original_hash": "effe56ba51c38d7bdfad1ea38288666b", + "translation_date": "2026-03-06T10:55:36+00:00", + "source_file": "8-code-editor/1-using-a-code-editor/assignment.md", + "language_code": "en" + }, + "9-chat-project/README.md": { + "original_hash": "2066c17078e9d18b5e309f31d8e8bc24", + "translation_date": "2026-03-06T10:44:47+00:00", + "source_file": "9-chat-project/README.md", + "language_code": "en" + }, + "9-chat-project/solution/README.md": { + "original_hash": "cb549dcad8eea3221cb89793aeaa3bb3", + "translation_date": "2025-09-01T15:17:50+00:00", + "source_file": "9-chat-project/solution/README.md", + "language_code": "en" + }, + "9-chat-project/solution/backend/README.md": { + "original_hash": "bcd2c2bbaae71151b1ed1b9170aa78af", + "translation_date": "2025-09-01T15:41:51+00:00", + "source_file": "9-chat-project/solution/backend/README.md", + "language_code": "en" + }, + "9-chat-project/solution/backend/python/README.md": { + "original_hash": "0aaa930f076f2d83cc872ad157f8ffd3", + "translation_date": "2026-03-06T11:38:06+00:00", + "source_file": "9-chat-project/solution/backend/python/README.md", + "language_code": "en" + }, + "9-chat-project/solution/frontend/README.md": { + "original_hash": "7746a470be8fc7f736eb1b43ebb710ee", + "translation_date": "2025-09-01T15:50:34+00:00", + "source_file": "9-chat-project/solution/frontend/README.md", + "language_code": "en" + }, + "AGENTS.md": { + "original_hash": "a362efd06d64d4134a0cfe8515a86d34", + "translation_date": "2025-10-03T11:11:50+00:00", + "source_file": "AGENTS.md", + "language_code": "en" + }, + "CODE_OF_CONDUCT.md": { + "original_hash": "b0a9b4cccd918195f58224d5793da1a6", + "translation_date": "2025-08-28T11:13:41+00:00", + "source_file": "CODE_OF_CONDUCT.md", + "language_code": "en" + }, + "CONTRIBUTING.md": { + "original_hash": "777400e9f0336c7ee2f9a1200a88478f", + "translation_date": "2025-08-28T11:12:28+00:00", + "source_file": "CONTRIBUTING.md", + "language_code": "en" + }, + "Git-Basics/README.md": { + "original_hash": "5cf5e1ed51455fefed4895fcc4d6ba2a", + "translation_date": "2025-10-03T15:43:56+00:00", + "source_file": "Git-Basics/README.md", + "language_code": "en" + }, + "README.md": { + "original_hash": "a2c9eed480687319517c08a6319e5536", + "translation_date": "2026-03-06T10:36:58+00:00", + "source_file": "README.md", + "language_code": "en" + }, + "Roadmap.md": { + "original_hash": "28bf6185fd7f27b62ddc210514366192", + "translation_date": "2026-03-06T11:54:38+00:00", + "source_file": "Roadmap.md", + "language_code": "en" + }, + "SECURITY.md": { + "original_hash": "4ecc3bf2e27983d4c780be6f26ee6228", + "translation_date": "2025-08-28T11:12:43+00:00", + "source_file": "SECURITY.md", + "language_code": "en" + }, + "SUPPORT.md": { + "original_hash": "c9d207ff77b4bb46e46dc2b607a8ec1a", + "translation_date": "2025-08-28T11:12:03+00:00", + "source_file": "SUPPORT.md", + "language_code": "en" + }, + "_404.md": { + "original_hash": "ea9f0804bd62f46d9808e953ec7fc459", + "translation_date": "2025-08-28T11:12:17+00:00", + "source_file": "_404.md", + "language_code": "en" + }, + "docs/_navbar.md": { + "original_hash": "3bd2f51ecf4ac9b39277cba748943793", + "translation_date": "2025-08-28T11:47:45+00:00", + "source_file": "docs/_navbar.md", + "language_code": "en" + }, + "docs/_sidebar.md": { + "original_hash": "655c91b5979de46f1d70d97f0c5f1d14", + "translation_date": "2025-08-28T11:47:26+00:00", + "source_file": "docs/_sidebar.md", + "language_code": "en" + }, + "for-teachers.md": { + "original_hash": "71009af209f81cc01a1f2d324200375f", + "translation_date": "2025-10-03T08:19:51+00:00", + "source_file": "for-teachers.md", + "language_code": "en" + }, + "lesson-template/README.md": { + "original_hash": "0494be70ad7fadd13a8c3d549c23e355", + "translation_date": "2025-08-28T11:48:01+00:00", + "source_file": "lesson-template/README.md", + "language_code": "en" + }, + "lesson-template/assignment.md": { + "original_hash": "b5f62ec256c7e43e771f0d3b4e1a9130", + "translation_date": "2025-08-28T11:48:16+00:00", + "source_file": "lesson-template/assignment.md", + "language_code": "en" + }, + "memory-game/README.md": { + "original_hash": "ff47271e53637b2ba6ba72ad2b70f6d7", + "translation_date": "2025-10-03T11:52:55+00:00", + "source_file": "memory-game/README.md", + "language_code": "en" + }, + "quiz-app/README.md": { + "original_hash": "5301875c55bb305e6046bed3a4fd06d2", + "translation_date": "2025-08-28T11:53:58+00:00", + "source_file": "quiz-app/README.md", + "language_code": "en" + } +} \ No newline at end of file diff --git a/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/README.md b/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/README.md index a46afa139..c6c31b1da 100644 --- a/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/README.md +++ b/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/README.md @@ -1,64 +1,238 @@ - -# Introduction to Programming Languages and Tools of the Trade +# Introduction to Programming Languages and Modern Developer Tools + +Hey there, future developer! 👋 Can I tell you something that still gives me chills every single day? You're about to discover that programming isn't just about computers – it's about having actual superpowers to bring your wildest ideas to life! + +You know that moment when you're using your favorite app and everything just clicks perfectly? When you tap a button and something absolutely magical happens that makes you go "wow, how did they DO that?" Well, someone just like you – probably sitting in their favorite coffee shop at 2 AM with their third espresso – wrote the code that created that magic. And here's what's going to blow your mind: by the end of this lesson, you'll not only understand how they did it, but you'll be itching to try it yourself! + +Look, I totally get it if programming feels intimidating right now. When I first started, I honestly thought you needed to be some kind of math genius or have been coding since you were five years old. But here's what completely changed my perspective: programming is exactly like learning to have conversations in a new language. You start with "hello" and "thank you," then work up to ordering coffee, and before you know it, you're having deep philosophical discussions! Except in this case, you're having conversations with computers, and honestly? They're the most patient conversation partners you'll ever have – they never judge your mistakes and they're always excited to try again! -This lesson introduces the fundamentals of programming languages. The topics discussed here are relevant to most modern programming languages today. In the 'Tools of the Trade' section, you'll explore software that can assist you as a developer. +Today, we're going to explore the incredible tools that make modern web development not just possible, but seriously addictive. I'm talking about the exact same editors, browsers, and workflows that developers at Netflix, Spotify, and your favorite indie app studio use every single day. And here's the part that's going to make you do a happy dance: most of these professional-grade, industry-standard tools are completely free! -![Intro Programming](../../../../translated_images/en/webdev101-programming.d6e3f98e61ac4bff0b27dcbf1c3f16c8ed46984866f2d29988929678b0058fde.png) +![Intro Programming](../../../../translated_images/en/webdev101-programming.d6e3f98e61ac4bff.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) -## Pre-Lecture Quiz -[Pre-lecture quiz](https://forms.office.com/r/dru4TE0U9n?origin=lprLink) +```mermaid +journey + title Your Programming Journey Today + section Discover + What is Programming: 5: You + Programming Languages: 4: You + Tools Overview: 5: You + section Explore + Code Editors: 4: You + Browsers & DevTools: 5: You + Command Line: 3: You + section Practice + Language Detective: 4: You + Tool Exploration: 5: You + Community Connection: 5: You +``` +## Let's See What You Already Know! + +Before we jump into the fun stuff, I'm curious – what do you already know about this programming world? And listen, if you're looking at these questions thinking "I literally have zero clue about any of this," that's not just okay, it's perfect! That means you're in exactly the right place. Think of this quiz like stretching before a workout – we're just warming up those brain muscles! + +[Take the pre-lesson quiz](https://ff-quizzes.netlify.app/web/) + + +## The Adventure We're About to Go On Together + +Okay, I am genuinely bouncing with excitement about what we're going to explore today! Seriously, I wish I could see your face when some of these concepts click. Here's the incredible journey we're taking together: + +- **What programming actually is (and why it's the coolest thing ever!)** – We're going to discover how code is literally the invisible magic powering everything around you, from that alarm that somehow knows it's Monday morning to the algorithm that perfectly curates your Netflix recommendations +- **Programming languages and their amazing personalities** – Imagine walking into a party where each person has completely different superpowers and ways of solving problems. That's what the programming language world is like, and you're going to love meeting them! +- **The fundamental building blocks that make digital magic happen** – Think of these as the ultimate creative LEGO set. Once you understand how these pieces fit together, you'll realize you can literally build anything your imagination dreams up +- **Professional tools that'll make you feel like you just got handed a wizard's wand** – I'm not being dramatic here – these tools will genuinely make you feel like you have superpowers, and the best part? They're the same ones the pros use! + +> 💡 **Here's the thing**: Don't even think about trying to memorize everything today! Right now, I just want you to feel that spark of excitement about what's possible. The details will stick naturally as we practice together – that's how real learning happens! + +> You can take this lesson on [Microsoft Learn](https://learn.microsoft.com/en-us/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! + +## So What Exactly *Is* Programming? + +Alright, let's tackle the million-dollar question: what is programming, really? + +I'll give you a story that completely changed how I think about this. Last week, I was trying to explain to my mom how to use our new smart TV remote. I caught myself saying things like "Press the red button, but not the big red button, the small red button on the left... no, your other left... okay, now hold it for two seconds, not one, not three..." Sound familiar? 😅 + +That's programming! It's the art of giving incredibly detailed, step-by-step instructions to something that's very powerful but needs everything spelled out perfectly. Except instead of explaining to your mom (who can ask "which red button?!"), you're explaining to a computer (which just does exactly what you say, even if what you said isn't quite what you meant). + +Here's what blew my mind when I first learned this: computers are actually pretty simple at their core. They literally only understand two things – 1 and 0, which is basically just "yes" and "no" or "on" and "off." That's it! But here's where it gets magical – we don't have to speak in 1s and 0s like we're in The Matrix. That's where **programming languages** come to the rescue. They're like having the world's best translator who takes your perfectly normal human thoughts and converts them into computer language. + +And here's what still gives me actual chills every morning when I wake up: literally *everything* digital in your life started with someone just like you, probably sitting in their pajamas with a cup of coffee, typing code on their laptop. That Instagram filter that makes you look flawless? Someone coded that. The recommendation that led you to your new favorite song? A developer built that algorithm. The app that helps you split dinner bills with friends? Yep, someone thought "this is annoying, I bet I could fix this" and then... they did! + +When you learn to program, you're not just picking up a new skill – you're becoming part of this incredible community of problem-solvers who spend their days thinking, "What if I could build something that makes someone's day just a little bit better?" Honestly, is there anything cooler than that? + +✅ **Fun Fact Hunt**: Here's something super cool to look up when you have a spare moment – who do you think was the world's first computer programmer? I'll give you a hint: it might not be who you're expecting! The story behind this person is absolutely fascinating and shows that programming has always been about creative problem-solving and thinking outside the box. -## Introduction +### 🧠 **Check-in Time: How Are You Feeling?** -In this lesson, we will cover: +**Take a moment to reflect:** +- Does the idea of "giving instructions to computers" make sense to you now? +- Can you think of a daily task you'd like to automate with programming? +- What questions are bubbling up in your mind about this whole programming thing? -- What programming is -- Types of programming languages -- Basic components of a program -- Useful software and tools for professional developers +> **Remember**: It's totally normal if some concepts feel fuzzy right now. Learning programming is like learning a new language – it takes time for your brain to build those neural pathways. You're doing great! -> You can take this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/introduction-programming/?WT.mc_id=academic-77807-sagibbon)! +## Programming Languages Are Like Different Flavors of Magic -## What is Programming? +Okay, this is going to sound weird, but stick with me – programming languages are a lot like different types of music. Think about it: you've got jazz, which is smooth and improvisational, rock that's powerful and straightforward, classical that's elegant and structured, and hip-hop that's creative and expressive. Each style has its own vibe, its own community of passionate fans, and each one is perfect for different moods and occasions. -Programming (also called coding) is the process of writing instructions for a device, such as a computer or mobile device. These instructions are written using a programming language, which the device interprets. These sets of instructions may be referred to by various names, such as *program*, *computer program*, *application (app)*, or *executable*. +Programming languages work exactly the same way! You wouldn't use the same language to build a fun mobile game that you'd use to crunch massive amounts of climate data, just like you wouldn't play death metal at a yoga class (well, most yoga classes anyway! 😄). -A *program* can be anything created with code—websites, games, and phone apps are all programs. While it's possible to create a program without writing code, the underlying logic is interpreted by the device, and that logic is most likely written in code. A program that is *running* or *executing* code is carrying out instructions. The device you're using to read this lesson is running a program to display it on your screen. +But here's what absolutely blows my mind every time I think about it: these languages are like having the most patient, brilliant interpreter in the world sitting right next to you. You can express your ideas in a way that feels natural to your human brain, and they handle all the incredibly complex work of translating that into the 1s and 0s that computers actually speak. It's like having a friend who's perfectly fluent in both "human creativity" and "computer logic" – and they never get tired, never need coffee breaks, and never judge you for asking the same question twice! -✅ Research task: Who is considered the world's first computer programmer? +### Popular Programming Languages and Their Uses -## Programming Languages +```mermaid +mindmap + root((Programming Languages)) + Web Development + JavaScript + Frontend Magic + Interactive Websites + TypeScript + JavaScript + Types + Enterprise Apps + Data & AI + Python + Data Science + Machine Learning + Automation + R + Statistics + Research + Mobile Apps + Java + Android + Enterprise + Swift + iOS + Apple Ecosystem + Kotlin + Modern Android + Cross-platform + Systems & Performance + C++ + Games + Performance Critical + Rust + Memory Safety + System Programming + Go + Cloud Services + Scalable Backend +``` +| Language | Best For | Why It's Popular | +|----------|----------|------------------| +| **JavaScript** | Web development, user interfaces | Runs in browsers and powers interactive websites | +| **Python** | Data science, automation, AI | Easy to read and learn, powerful libraries | +| **Java** | Enterprise applications, Android apps | Platform-independent, robust for large systems | +| **C#** | Windows applications, game development | Strong Microsoft ecosystem support | +| **Go** | Cloud services, backend systems | Fast, simple, designed for modern computing | + +### High-Level vs. Low-Level Languages + +Okay, this was honestly the concept that broke my brain when I first started learning, so I'm going to share the analogy that finally made it click for me – and I really hope it helps you too! + +Imagine you're visiting a country where you don't speak the language, and you desperately need to find the nearest bathroom (we've all been there, right? 😅): + +- **Low-level programming** is like learning the local dialect so well that you can chat with the grandmother selling fruit on the corner using cultural references, local slang, and inside jokes that only someone who grew up there would understand. Super impressive and incredibly efficient... if you happen to be fluent! But pretty overwhelming when you're just trying to find a bathroom. + +- **High-level programming** is like having that amazing local friend who just gets you. You can say "I really need to find a restroom" in plain English, and they handle all the cultural translation and give you directions in a way that makes perfect sense to your non-local brain. + +In programming terms: +- **Low-level languages** (like Assembly or C) let you have incredibly detailed conversations with the computer's actual hardware, but you need to think like a machine, which is... well, let's just say it's a pretty big mental shift! +- **High-level languages** (like JavaScript, Python, or C#) let you think like a human while they handle all the machine-speak behind the scenes. Plus, they have these incredibly welcoming communities full of people who remember what it was like to be new and genuinely want to help! + +Guess which ones I'm going to suggest you start with? 😉 High-level languages are like having training wheels that you never actually want to take off because they make the whole experience so much more enjoyable! + +```mermaid +flowchart TB + A["👤 Human Thought:
'I want to calculate Fibonacci numbers'"] --> B{Choose Language Level} + + B -->|High-Level| C["🌟 JavaScript/Python
Easy to read and write"] + B -->|Low-Level| D["⚙️ Assembly/C
Direct hardware control"] + + C --> E["📝 Write: fibonacci(10)"] + D --> F["📝 Write: mov r0,#00
sub r0,r0,#01"] + + E --> G["🤖 Computer Understanding:
Translator handles complexity"] + F --> G + + G --> H["💻 Same Result:
0, 1, 1, 2, 3, 5, 8, 13..."] + + style C fill:#e1f5fe + style D fill:#fff3e0 + style H fill:#e8f5e8 +``` +### Let Me Show You Why High-Level Languages Are So Much Friendlier + +Alright, I'm about to show you something that perfectly demonstrates why I fell in love with high-level languages, but first – I need you to promise me something. When you see that first code example, don't panic! It's supposed to look intimidating. That's exactly the point I'm making! + +We're going to look at the exact same task written in two completely different styles. Both create what's called the Fibonacci sequence – it's this beautiful mathematical pattern where each number is the sum of the two before it: 0, 1, 1, 2, 3, 5, 8, 13... (Fun fact: you'll find this pattern literally everywhere in nature – sunflower seed spirals, pinecone patterns, even the way galaxies form!) + +Ready to see the difference? Let's go! -Programming languages allow developers to write instructions for a device. Devices only understand binary (1s and 0s), which is not an efficient way for *most* developers to communicate. Programming languages act as a bridge between humans and computers. +**High-level language (JavaScript) – Human-friendly:** -Programming languages come in various formats and serve different purposes. For instance, JavaScript is primarily used for web applications, while Bash is mainly used for operating systems. +```javascript +// Step 1: Basic Fibonacci setup +const fibonacciCount = 10; +let current = 0; +let next = 1; -*Low-level languages* typically require fewer steps for a device to interpret instructions compared to *high-level languages*. However, high-level languages are popular due to their readability and support. JavaScript is considered a high-level language. +console.log('Fibonacci sequence:'); +``` -The following code demonstrates the difference between a high-level language (JavaScript) and a low-level language (ARM assembly code). +**Here's what this code does:** +- **Declare** a constant to specify how many Fibonacci numbers we want to generate +- **Initialize** two variables to track the current and next numbers in the sequence +- **Set up** the starting values (0 and 1) that define the Fibonacci pattern +- **Display** a header message to identify our output ```javascript -let number = 10 -let n1 = 0, n2 = 1, nextTerm; - -for (let i = 1; i <= number; i++) { - console.log(n1); - nextTerm = n1 + n2; - n1 = n2; - n2 = nextTerm; +// Step 2: Generate the sequence with a loop +for (let i = 0; i < fibonacciCount; i++) { + console.log(`Position ${i + 1}: ${current}`); + + // Calculate next number in sequence + const sum = current + next; + current = next; + next = sum; } ``` -```c +**Breaking down what happens here:** +- **Loop** through each position in our sequence using a `for` loop +- **Display** each number with its position using template literal formatting +- **Calculate** the next Fibonacci number by adding current and next values +- **Update** our tracking variables to move to the next iteration + +```javascript +// Step 3: Modern functional approach +const generateFibonacci = (count) => { + const sequence = [0, 1]; + + for (let i = 2; i < count; i++) { + sequence[i] = sequence[i - 1] + sequence[i - 2]; + } + + return sequence; +}; + +// Usage example +const fibSequence = generateFibonacci(10); +console.log(fibSequence); +``` + +**In the above, we've:** +- **Created** a reusable function using modern arrow function syntax +- **Built** an array to store the complete sequence rather than displaying one by one +- **Used** array indexing to calculate each new number from previous values +- **Returned** the complete sequence for flexible use in other parts of our program + +**Low-level language (ARM Assembly) – Computer-friendly:** + +```assembly area ascen,code,readonly entry code32 @@ -83,137 +257,600 @@ back add r0,r1 end ``` -Believe it or not, *both are doing the same thing*: printing a Fibonacci sequence up to 10. +Notice how the JavaScript version reads almost like English instructions, while the Assembly version uses cryptic commands that directly control the computer's processor. Both accomplish the exact same task, but the high-level language is much easier for humans to understand, write, and maintain. + +**Key differences you'll notice:** +- **Readability**: JavaScript uses descriptive names like `fibonacciCount` while Assembly uses cryptic labels like `r0`, `r1` +- **Comments**: High-level languages encourage explanatory comments that make code self-documenting +- **Structure**: JavaScript's logical flow matches how humans think about problems step-by-step +- **Maintenance**: Updating the JavaScript version for different requirements is straightforward and clear + +✅ **About the Fibonacci sequence**: This absolutely gorgeous number pattern (where each number equals the sum of the two before it: 0, 1, 1, 2, 3, 5, 8...) shows up literally *everywhere* in nature! You'll find it in sunflower spirals, pinecone patterns, the way nautilus shells curve, and even in how tree branches grow. It's pretty mind-blowing how math and code can help us understand and recreate the patterns that nature uses to create beauty! + + +## The Building Blocks That Make the Magic Happen + +Alright, now that you've seen what programming languages look like in action, let's break down the fundamental pieces that make up literally every program ever written. Think of these as the essential ingredients in your favorite recipe – once you understand what each one does, you'll be able to read and write code in pretty much any language! + +This is kind of like learning the grammar of programming. Remember back in school when you learned about nouns, verbs, and how to put sentences together? Programming has its own version of grammar, and honestly, it's way more logical and forgiving than English grammar ever was! 😄 + +### Statements: The Step-by-Step Instructions + +Let's start with **statements** – these are like individual sentences in a conversation with your computer. Each statement tells the computer to do one specific thing, kind of like giving directions: "Turn left here," "Stop at the red light," "Park in that spot." + +What I love about statements is how readable they usually are. Check this out: + +```javascript +// Basic statements that perform single actions +const userName = "Alex"; +console.log("Hello, world!"); +const sum = 5 + 3; +``` + +**Here's what this code does:** +- **Declare** a constant variable to store a user's name +- **Display** a greeting message to the console output +- **Calculate** and store the result of a mathematical operation + +```javascript +// Statements that interact with web pages +document.title = "My Awesome Website"; +document.body.style.backgroundColor = "lightblue"; +``` + +**Step by step, here's what's happening:** +- **Modify** the webpage's title that appears in the browser tab +- **Change** the background color of the entire page body + +### Variables: Your Program's Memory System + +Okay, **variables** are honestly one of my absolute favorite concepts to teach because they're so much like things you already use every single day! + +Think about your phone's contact list for a second. You don't memorize everyone's phone number – instead, you save "Mom," "Best Friend," or "Pizza Place That Delivers Until 2 AM" and let your phone remember the actual numbers. Variables work exactly the same way! They're like labeled containers where your program can store information and retrieve it later using a name that actually makes sense. + +Here's what's really cool: variables can change as your program runs (hence the name "variable" – see what they did there?). Just like you might update that pizza place contact when you discover somewhere even better, variables can be updated as your program learns new information or as situations change! + +Let me show you how beautifully simple this can be: + +```javascript +// Step 1: Creating basic variables +const siteName = "Weather Dashboard"; +let currentWeather = "sunny"; +let temperature = 75; +let isRaining = false; +``` + +**Understanding these concepts:** +- **Store** unchanging values in `const` variables (like site name) +- **Use** `let` for values that can change throughout your program +- **Assign** different data types: strings (text), numbers, and booleans (true/false) +- **Choose** descriptive names that explain what each variable contains + +```javascript +// Step 2: Working with objects to group related data +const weatherData = { + location: "San Francisco", + humidity: 65, + windSpeed: 12 +}; +``` + +**In the above, we've:** +- **Created** an object to group related weather information together +- **Organized** multiple pieces of data under one variable name +- **Used** key-value pairs to label each piece of information clearly + +```javascript +// Step 3: Using and updating variables +console.log(`${siteName}: Today is ${currentWeather} and ${temperature}°F`); +console.log(`Wind speed: ${weatherData.windSpeed} mph`); + +// Updating changeable variables +currentWeather = "cloudy"; +temperature = 68; +``` + +**Let's understand each part:** +- **Display** information using template literals with `${}` syntax +- **Access** object properties using dot notation (`weatherData.windSpeed`) +- **Update** variables declared with `let` to reflect changing conditions +- **Combine** multiple variables to create meaningful messages + +```javascript +// Step 4: Modern destructuring for cleaner code +const { location, humidity } = weatherData; +console.log(`${location} humidity: ${humidity}%`); +``` + +**What you need to know:** +- **Extract** specific properties from objects using destructuring assignment +- **Create** new variables automatically with the same names as object keys +- **Simplify** code by avoiding repetitive dot notation + +### Control Flow: Teaching Your Program to Think -✅ A Fibonacci sequence is [defined](https://en.wikipedia.org/wiki/Fibonacci_number) as a series of numbers where each number is the sum of the two preceding ones, starting from 0 and 1. The first 10 numbers in the Fibonacci sequence are 0, 1, 1, 2, 3, 5, 8, 13, 21, and 34. +Okay, this is where programming gets absolutely mind-blowing! **Control flow** is basically teaching your program how to make smart decisions, exactly like you do every single day without even thinking about it. -## Elements of a Program +Picture this: this morning you probably went through something like "If it's raining, I'll grab an umbrella. If it's cold, I'll wear a jacket. If I'm running late, I'll skip breakfast and grab coffee on the way." Your brain naturally follows this if-then logic dozens of times every day! -A single instruction in a program is called a *statement*. Statements usually have a character or line spacing that marks where the instruction ends, or *terminates*. The way a program terminates varies by language. +This is what makes programs feel intelligent and alive instead of just following some boring, predictable script. They can actually look at a situation, evaluate what's happening, and respond appropriately. It's like giving your program a brain that can adapt and make choices! -Statements in a program may depend on data provided by a user or other sources to execute instructions. Data can influence how a program behaves, so programming languages include ways to temporarily store data for later use. These are called *variables*. Variables are statements that instruct a device to save data in its memory. Variables in programs are similar to variables in algebra, where they have a unique name and their value can change over time. +Want to see how beautifully this works? Let me show you: -Some statements may not be executed by a device. This can happen intentionally, as designed by the developer, or accidentally due to unexpected errors. This type of control over an application makes it more robust and maintainable. Typically, these changes in control occur when certain conditions are met. A common statement used in modern programming to control program flow is the `if..else` statement. +```javascript +// Step 1: Basic conditional logic +const userAge = 17; + +if (userAge >= 18) { + console.log("You can vote!"); +} else { + const yearsToWait = 18 - userAge; + console.log(`You'll be able to vote in ${yearsToWait} year(s).`); +} +``` -✅ You'll learn more about this type of statement in future lessons. +**Here's what this code does:** +- **Check** if the user's age meets the voting requirement +- **Execute** different code blocks based on the condition result +- **Calculate** and display how long until voting eligibility if under 18 +- **Provide** specific, helpful feedback for each scenario + +```javascript +// Step 2: Multiple conditions with logical operators +const userAge = 17; +const hasPermission = true; + +if (userAge >= 18 && hasPermission) { + console.log("Access granted: You can enter the venue."); +} else if (userAge >= 16) { + console.log("You need parent permission to enter."); +} else { + console.log("Sorry, you must be at least 16 years old."); +} +``` + +**Breaking down what happens here:** +- **Combine** multiple conditions using the `&&` (and) operator +- **Create** a hierarchy of conditions using `else if` for multiple scenarios +- **Handle** all possible cases with a final `else` statement +- **Provide** clear, actionable feedback for each different situation + +```javascript +// Step 3: Concise conditional with ternary operator +const votingStatus = userAge >= 18 ? "Can vote" : "Cannot vote yet"; +console.log(`Status: ${votingStatus}`); +``` + +**What you need to remember:** +- **Use** the ternary operator (`? :`) for simple two-option conditions +- **Write** condition first, followed by `?`, then true result, then `:`, then false result +- **Apply** this pattern when you need to assign values based on conditions + +```javascript +// Step 4: Handling multiple specific cases +const dayOfWeek = "Tuesday"; + +switch (dayOfWeek) { + case "Monday": + case "Tuesday": + case "Wednesday": + case "Thursday": + case "Friday": + console.log("It's a weekday - time to work!"); + break; + case "Saturday": + case "Sunday": + console.log("It's the weekend - time to relax!"); + break; + default: + console.log("Invalid day of the week"); +} +``` + +**This code accomplishes the following:** +- **Match** the variable value against multiple specific cases +- **Group** similar cases together (weekdays vs. weekends) +- **Execute** the appropriate code block when a match is found +- **Include** a `default` case to handle unexpected values +- **Use** `break` statements to prevent code from continuing to the next case + +> 💡 **Real-world analogy**: Think of control flow like having the world's most patient GPS giving you directions. It might say "If there's traffic on Main Street, take the highway instead. If construction is blocking the highway, try the scenic route." Programs use exactly the same type of conditional logic to respond intelligently to different situations and always give users the best possible experience. + +### 🎯 **Concept Check: Building Blocks Mastery** + +**Let's see how you're doing with the fundamentals:** +- Can you explain the difference between a variable and a statement in your own words? +- Think of a real-world scenario where you'd use an if-then decision (like our voting example) +- What's one thing about programming logic that surprised you? + +**Quick confidence booster:** +```mermaid +flowchart LR + A["📝 Statements
(Instructions)"] --> B["📦 Variables
(Storage)"] --> C["🔀 Control Flow
(Decisions)"] --> D["🎉 Working Program!"] + + style A fill:#ffeb3b + style B fill:#4caf50 + style C fill:#2196f3 + style D fill:#ff4081 +``` +✅ **What's coming up next**: We're going to have an absolute blast diving deeper into these concepts as we continue this incredible journey together! Right now, just focus on feeling that excitement about all the amazing possibilities ahead of you. The specific skills and techniques will stick naturally as we practice together – I promise this is going to be so much more fun than you might expect! ## Tools of the Trade -[![Tools of the Trade](https://img.youtube.com/vi/69WJeXGBdxg/0.jpg)](https://youtube.com/watch?v=69WJeXGBdxg "Tools of the Trade") +Alright, this is honestly where I get so excited I can barely contain myself! 🚀 We're about to talk about the incredible tools that are going to make you feel like you just got handed the keys to a digital spaceship. + +You know how a chef has those perfectly balanced knives that feel like extensions of their hands? Or how a musician has that one guitar that seems to sing the moment they touch it? Well, developers have our own version of these magical tools, and here's what's going to absolutely blow your mind – most of them are completely free! + +I'm practically bouncing in my chair thinking about sharing these with you because they've completely revolutionized how we build software. We're talking about AI-powered coding assistants that can help write your code (I'm not even kidding!), cloud environments where you can build entire applications from literally anywhere with Wi-Fi, and debugging tools so sophisticated they're like having X-ray vision for your programs. + +And here's the part that still gives me chills: these aren't "beginner tools" that you'll outgrow. These are the exact same professional-grade tools that developers at Google, Netflix, and that indie app studio you love are using right this very moment. You're going to feel like such a pro using them! + +```mermaid +graph TD + A["💡 Your Idea"] --> B["⌨️ Code Editor
(VS Code)"] + B --> C["🌐 Browser DevTools
(Testing & Debugging)"] + C --> D["⚡ Command Line
(Automation & Tools)"] + D --> E["📚 Documentation
(Learning & Reference)"] + E --> F["🚀 Amazing Web App!"] + + B -.-> G["🤖 AI Assistant
(GitHub Copilot)"] + C -.-> H["📱 Device Testing
(Responsive Design)"] + D -.-> I["📦 Package Managers
(npm, yarn)"] + E -.-> J["👥 Community
(Stack Overflow)"] + + style A fill:#fff59d + style F fill:#c8e6c9 + style G fill:#e1f5fe + style H fill:#f3e5f5 + style I fill:#ffccbc + style J fill:#e8eaf6 +``` +### Code Editors and IDEs: Your New Digital Best Friends -> 🎥 Click the image above to watch a video about tooling +Let's talk about code editors – these are seriously about to become your new favorite places to hang out! Think of them as your personal coding sanctuary where you'll spend most of your time crafting and perfecting your digital creations. -In this section, you'll explore software that can be very useful as you begin your journey as a professional developer. +But here's what's absolutely magical about modern editors: they're not just fancy text editors. They're like having the most brilliant, supportive coding mentor sitting right next to you 24/7. They catch your typos before you even notice them, suggest improvements that make you look like a genius, help you understand what every piece of code does, and some of them can even predict what you're about to type and offer to finish your thoughts! -A **development environment** is a unique set of tools and features that developers frequently use when writing software. These tools may be customized to meet a developer's specific needs and can evolve over time as priorities shift, personal projects change, or different programming languages are used. Development environments are as unique as the developers who use them. +I remember when I first discovered auto-completion – I literally felt like I was living in the future. You start typing something, and your editor goes, "Hey, were you thinking of this function that does exactly what you need?" It's like having a mind reader as your coding buddy! -### Editors +**What makes these editors so incredible?** -One of the most essential tools for software development is the editor. Editors are where you write your code and sometimes where you run it. +Modern code editors offer an impressive array of features designed to boost your productivity: -Developers rely on editors for several reasons: +| Feature | What It Does | Why It Helps | +|---------|--------------|--------------| +| **Syntax Highlighting** | Colors different parts of your code | Makes code easier to read and spot errors | +| **Auto-completion** | Suggests code as you type | Speeds up coding and reduces typos | +| **Debugging Tools** | Helps you find and fix errors | Saves hours of troubleshooting time | +| **Extensions** | Add specialized features | Customize your editor for any technology | +| **AI Assistants** | Suggest code and explanations | Accelerates learning and productivity | -- *Debugging* helps identify bugs and errors by stepping through the code line by line. Some editors have built-in debugging capabilities, which can be customized for specific programming languages. -- *Syntax highlighting* adds colors and text formatting to code, making it easier to read. Most editors allow syntax highlighting customization. -- *Extensions and Integrations* are specialized tools created by developers for developers. These tools are not part of the base editor. For example, many developers document their code to explain how it works. They might install a spell-check extension to catch typos in the documentation. Most extensions are designed for specific editors, and most editors include a way to search for available extensions. -- *Customization* allows developers to tailor their development environment to their needs. Most editors are highly customizable and may even allow developers to create custom extensions. +> 🎥 **Video Resource**: Want to see these tools in action? Check out this [Tools of the Trade video](https://youtube.com/watch?v=69WJeXGBdxg) for a comprehensive overview. -#### Popular Editors and Web Development Extensions +#### Recommended Editors for Web Development -- [Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon) - - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) -- [Atom](https://atom.io/) - - [spell-check](https://atom.io/packages/spell-check) - - [teletype](https://atom.io/packages/teletype) - - [atom-beautify](https://atom.io/packages/atom-beautify) - -- [Sublimetext](https://www.sublimetext.com/) - - [emmet](https://emmet.io/) - - [SublimeLinter](http://www.sublimelinter.com/en/stable/) +**[Visual Studio Code](https://code.visualstudio.com/?WT.mc_id=academic-77807-sagibbon)** (Free) +- Most popular among web developers +- Excellent extension ecosystem +- Built-in terminal and Git integration +- **Must-have extensions**: + - [GitHub Copilot](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - AI-powered code suggestions + - [Live Share](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare) - Real-time collaboration + - [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) - Automatic code formatting + - [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) - Catch typos in your code -### Browsers +**[JetBrains WebStorm](https://www.jetbrains.com/webstorm/)** (Paid, free for students) +- Advanced debugging and testing tools +- Intelligent code completion +- Built-in version control -Another essential tool is the browser. Web developers use browsers to test how their code runs on the web. Browsers also display the visual elements of a web page written in the editor, such as HTML. +**Cloud-Based IDEs** (Various pricing) +- [GitHub Codespaces](https://github.com/features/codespaces) - Full VS Code in your browser +- [Replit](https://replit.com/) - Great for learning and sharing code +- [StackBlitz](https://stackblitz.com/) - Instant, full-stack web development -Many browsers include *developer tools* (DevTools), which offer features and information to help developers gather and analyze important details about their applications. For example, if a web page has errors, DevTools can be configured to capture information about when the errors occurred. +> 💡 **Getting Started Tip**: Start with Visual Studio Code – it's free, widely used in the industry, and has an enormous community creating helpful tutorials and extensions. -#### Popular Browsers and DevTools -- [Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon) -- [Chrome](https://developers.google.com/web/tools/chrome-devtools/) -- [Firefox](https://developer.mozilla.org/docs/Tools) +### Web Browsers: Your Secret Development Laboratory -### Command Line Tools +Okay, prepare to have your mind completely blown! You know how you've been using browsers to scroll through social media and watch videos? Well, it turns out they've been hiding this incredible secret developer laboratory this entire time, just waiting for you to discover it! -Some developers prefer a less graphical interface for their daily tasks and rely on the command line. Writing code involves a lot of typing, and some developers prefer not to disrupt their workflow by switching between the keyboard and mouse. They use keyboard shortcuts to navigate between desktop windows, work on different files, and use tools. While most tasks can be completed with a mouse, the command line allows developers to perform many tasks without switching between the mouse and keyboard. Another advantage of the command line is its configurability—you can save custom configurations, modify them later, and import them to other development machines. Since development environments are highly personalized, some developers avoid the command line, others rely on it entirely, and some prefer a mix of both. +Every single time you right-click on a webpage and select "Inspect Element," you're opening up a hidden world of developer tools that are honestly more powerful than some expensive software I used to pay hundreds of dollars for. It's like discovering that your regular old kitchen has been concealing a professional chef's laboratory behind a secret panel! +The first time someone showed me browser DevTools, I spent like three hours just clicking around and going "WAIT, IT CAN DO THAT TOO?!" You can literally edit any website in real-time, see exactly how fast everything loads, test how your site looks on different devices, and even debug JavaScript like a total pro. It's absolutely mind-blowing! -### Popular Command Line Options +**Here's why browsers are your secret weapon:** -Command line options vary depending on the operating system. +When you create a website or web application, you need to see how it looks and behaves in the real world. Browsers not only display your work but also provide detailed feedback about performance, accessibility, and potential issues. -*💻 = preinstalled on the operating system.* +#### Browser Developer Tools (DevTools) -#### Windows +Modern browsers include comprehensive development suites: -- [Powershell](https://docs.microsoft.com/powershell/scripting/overview?view=powershell-7/?WT.mc_id=academic-77807-sagibbon) 💻 -- [Command Line](https://docs.microsoft.com/windows-server/administration/windows-commands/windows-commands/?WT.mc_id=academic-77807-sagibbon) (also known as CMD) 💻 -- [Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon) -- [mintty](https://mintty.github.io/) - -#### MacOS +| Tool Category | What It Does | Example Use Case | +|---------------|--------------|------------------| +| **Element Inspector** | View and edit HTML/CSS in real-time | Adjust styling to see immediate results | +| **Console** | View error messages and test JavaScript | Debug problems and experiment with code | +| **Network Monitor** | Track how resources load | Optimize performance and loading times | +| **Accessibility Checker** | Test for inclusive design | Ensure your site works for all users | +| **Device Simulator** | Preview on different screen sizes | Test responsive design without multiple devices | + +#### Recommended Browsers for Development + +- **[Chrome](https://developers.google.com/web/tools/chrome-devtools/)** - Industry-standard DevTools with extensive documentation +- **[Firefox](https://developer.mozilla.org/docs/Tools)** - Excellent CSS Grid and accessibility tools +- **[Edge](https://docs.microsoft.com/microsoft-edge/devtools-guide-chromium/?WT.mc_id=academic-77807-sagibbon)** - Built on Chromium with Microsoft's developer resources + +> ⚠️ **Important Testing Tip**: Always test your websites in multiple browsers! What works perfectly in Chrome might look different in Safari or Firefox. Professional developers test across all major browsers to ensure consistent user experiences. + + +### Command Line Tools: Your Gateway to Developer Superpowers + +Alright, let's have a completely honest moment here about the command line, because I want you to hear this from someone who truly gets it. When I first saw it – just this scary black screen with blinking text – I literally thought, "Nope, absolutely not! This looks like something from a 1980s hacker movie, and I am definitely not smart enough for this!" 😅 + +But here's what I wish someone had told me back then, and what I'm telling you right now: the command line isn't scary – it's actually like having a direct conversation with your computer. Think of it like the difference between ordering food through a fancy app with pictures and menus (which is nice and easy) versus walking into your favorite local restaurant where the chef knows exactly what you like and can whip up something perfect just by you saying "surprise me with something amazing." + +The command line is where developers go to feel like absolute wizards. You type a few seemingly magical words (okay, they're just commands, but they feel magical!), hit enter, and BOOM – you've created entire project structures, installed powerful tools from around the world, or deployed your app to the internet for millions of people to see. Once you get your first taste of that power, it's honestly pretty addictive! + +**Why the command line will become your favorite tool:** + +While graphical interfaces are great for many tasks, the command line excels at automation, precision, and speed. Many development tools work primarily through command line interfaces, and learning to use them efficiently can dramatically improve your productivity. + +```bash +# Step 1: Create and navigate to project directory +mkdir my-awesome-website +cd my-awesome-website +``` + +**Here's what this code does:** +- **Create** a new directory called "my-awesome-website" for your project +- **Navigate** into the newly created directory to begin working + +```bash +# Step 2: Initialize project with package.json +npm init -y + +# Install modern development tools +npm install --save-dev vite prettier eslint +npm install --save-dev @eslint/js +``` + +**Step by step, here's what's happening:** +- **Initialize** a new Node.js project with default settings using `npm init -y` +- **Install** Vite as a modern build tool for fast development and production builds +- **Add** Prettier for automatic code formatting and ESLint for code quality checks +- **Use** the `--save-dev` flag to mark these as development-only dependencies + +```bash +# Step 3: Create project structure and files +mkdir src assets +echo 'My Site

Hello World

' > index.html + +# Start development server +npx vite +``` + +**In the above, we've:** +- **Organized** our project by creating separate folders for source code and assets +- **Generated** a basic HTML file with proper document structure +- **Started** the Vite development server for live reloading and hot module replacement + +#### Essential Command Line Tools for Web Development -- [Terminal](https://support.apple.com/guide/terminal/open-or-quit-terminal-apd5265185d-f365-44cb-8b09-71a064a42125/mac) 💻 -- [iTerm](https://iterm2.com/) -- [Powershell](https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-macos?view=powershell-7/?WT.mc_id=academic-77807-sagibbon) +| Tool | Purpose | Why You Need It | +|------|---------|-----------------| +| **[Git](https://git-scm.com/)** | Version control | Track changes, collaborate with others, backup your work | +| **[Node.js & npm](https://nodejs.org/)** | JavaScript runtime & package management | Run JavaScript outside browsers, install modern development tools | +| **[Vite](https://vitejs.dev/)** | Build tool & dev server | Lightning-fast development with hot module replacement | +| **[ESLint](https://eslint.org/)** | Code quality | Automatically find and fix problems in your JavaScript | +| **[Prettier](https://prettier.io/)** | Code formatting | Keep your code consistently formatted and readable | -#### Linux +#### Platform-Specific Options -- [Bash](https://www.gnu.org/software/bash/manual/html_node/index.html) 💻 -- [KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html) -- [Powershell](https://docs.microsoft.com/powershell/scripting/install/installing-powershell-core-on-linux?view=powershell-7/?WT.mc_id=academic-77807-sagibbon) +**Windows:** +- **[Windows Terminal](https://docs.microsoft.com/windows/terminal/?WT.mc_id=academic-77807-sagibbon)** - Modern, feature-rich terminal +- **[PowerShell](https://docs.microsoft.com/powershell/?WT.mc_id=academic-77807-sagibbon)** 💻 - Powerful scripting environment +- **[Command Prompt](https://docs.microsoft.com/windows-server/administration/windows-commands/?WT.mc_id=academic-77807-sagibbon)** 💻 - Traditional Windows command line -#### Popular Command Line Tools +**macOS:** +- **[Terminal](https://support.apple.com/guide/terminal/)** 💻 - Built-in terminal application +- **[iTerm2](https://iterm2.com/)** - Enhanced terminal with advanced features -- [Git](https://git-scm.com/) (💻 on most operating systems) -- [NPM](https://www.npmjs.com/) -- [Yarn](https://classic.yarnpkg.com/en/docs/cli/) +**Linux:** +- **[Bash](https://www.gnu.org/software/bash/)** 💻 - Standard Linux shell +- **[KDE Konsole](https://docs.kde.org/trunk5/en/konsole/konsole/index.html)** - Advanced terminal emulator -### Documentation +> 💻 = Pre-installed on the operating system -When developers want to learn something new, they often turn to documentation for guidance. Documentation helps developers understand how to use tools and languages effectively and provides deeper insights into their functionality. +> 🎯 **Learning Path**: Start with basic commands like `cd` (change directory), `ls` or `dir` (list files), and `mkdir` (create folder). Practice with modern workflow commands like `npm install`, `git status`, and `code .` (opens current directory in VS Code). As you become more comfortable, you'll naturally pick up more advanced commands and automation techniques. -#### Popular Documentation on Web Development -- [Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web), from Mozilla, the publishers of the [Firefox](https://www.mozilla.org/firefox/) browser -- [Frontend Masters](https://frontendmasters.com/learn/) -- [Web.dev](https://web.dev), from Google, publishers of [Chrome](https://www.google.com/chrome/) -- [Microsoft's own developer docs](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers), for [Microsoft Edge](https://www.microsoft.com/edge) -- [W3 Schools](https://www.w3schools.com/where_to_start.asp) +### Documentation: Your Always-Available Learning Mentor -✅ Research task: Now that you understand the basics of a web developer's environment, compare it with a web designer's environment. +Okay, let me share a little secret that's going to make you feel so much better about being a beginner: even the most experienced developers spend a huge chunk of their time reading documentation. And that's not because they don't know what they're doing – it's actually a sign of wisdom! + +Think of documentation as having access to the world's most patient, knowledgeable teachers who are available 24/7. Stuck on a problem at 2 AM? Documentation is there with a warm virtual hug and exactly the answer you need. Want to learn about some cool new feature that everyone's talking about? Documentation has your back with step-by-step examples. Trying to understand why something works the way it does? You guessed it – documentation is ready to explain it in a way that finally makes it click! + +Here's something that completely changed my perspective: the web development world moves incredibly fast, and nobody (I mean absolutely nobody!) keeps everything memorized. I've watched senior developers with 15+ years of experience look up basic syntax, and you know what? That's not embarrassing – that's smart! It's not about having a perfect memory; it's about knowing where to find reliable answers quickly and understanding how to apply them. + +**Here's where the real magic happens:** + +Professional developers spend a significant portion of their time reading documentation – not because they don't know what they're doing, but because the web development landscape evolves so rapidly that staying current requires continuous learning. Great documentation helps you understand not just *how* to use something, but *why* and *when* to use it. + +#### Essential Documentation Resources + +**[Mozilla Developer Network (MDN)](https://developer.mozilla.org/docs/Web)** +- The gold standard for web technology documentation +- Comprehensive guides for HTML, CSS, and JavaScript +- Includes browser compatibility information +- Features practical examples and interactive demos + +**[Web.dev](https://web.dev)** (by Google) +- Modern web development best practices +- Performance optimization guides +- Accessibility and inclusive design principles +- Case studies from real-world projects + +**[Microsoft Developer Documentation](https://docs.microsoft.com/microsoft-edge/#microsoft-edge-for-developers)** +- Edge browser development resources +- Progressive Web App guides +- Cross-platform development insights + +**[Frontend Masters Learning Paths](https://frontendmasters.com/learn/)** +- Structured learning curricula +- Video courses from industry experts +- Hands-on coding exercises + +> 📚 **Study Strategy**: Don't try to memorize documentation – instead, learn how to navigate it efficiently. Bookmark frequently-used references and practice using the search functions to find specific information quickly. + +### 🔧 **Tool Mastery Check: What Resonates With You?** + +**Take a moment to consider:** +- Which tool are you most excited to try first? (There's no wrong answer!) +- Does the command line still feel intimidating, or are you curious about it? +- Can you imagine using browser DevTools to peek behind the curtain of your favorite websites? + +```mermaid +pie title "Developer Time Spent With Tools" + "Code Editor" : 40 + "Browser Testing" : 25 + "Command Line" : 15 + "Reading Docs" : 15 + "Debugging" : 5 +``` +> **Fun insight**: Most developers spend about 40% of their time in their code editor, but notice how much time goes to testing, learning, and problem-solving. Programming isn't just about writing code – it's about crafting experiences! + +✅ **Food for thought**: Here's something interesting to ponder – how do you think the tools for building websites (development) might be different from tools for designing how they look (design)? It's like the difference between being an architect who designs a beautiful house and the contractor who actually builds it. Both are crucial, but they need different toolboxes! This kind of thinking will really help you see the bigger picture of how websites come to life. + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Explore the features of a modern code editor or IDE and demonstrate how it can improve your workflow as a web developer. + +**Prompt:** Choose a code editor or IDE (such as Visual Studio Code, WebStorm, or a cloud-based IDE). List three features or extensions that help you write, debug, or maintain code more efficiently. For each, provide a brief explanation of how it benefits your workflow. --- ## 🚀 Challenge -Compare some programming languages. What are some unique characteristics of JavaScript vs. Java? How about COBOL vs. Go? +**Alright, detective, ready for your first case?** + +Now that you've got this awesome foundation, I've got an adventure that's going to help you see just how incredibly diverse and fascinating the programming world really is. And listen – this isn't about writing code yet, so no pressure there! Think of yourself as a programming language detective on your very first exciting case! -## Post-Lecture Quiz -[Post-lecture quiz](https://ff-quizzes.netlify.app/web/) +**Your mission, should you choose to accept it:** +1. **Become a language explorer**: Pick three programming languages from completely different universes – maybe one that builds websites, one that creates mobile apps, and one that crunches data for scientists. Find examples of the same simple task written in each language. I promise you're going to be absolutely amazed at how different they can look while doing the exact same thing! + +2. **Uncover their origin stories**: What makes each language special? Here's a cool fact – every single programming language was created because someone thought, "You know what? There's got to be a better way to solve this specific problem." Can you figure out what those problems were? Some of these stories are genuinely fascinating! + +3. **Meet the communities**: Check out how welcoming and passionate each language's community is. Some have millions of developers sharing knowledge and helping each other, others are smaller but incredibly tight-knit and supportive. You're going to love seeing the different personalities these communities have! + +4. **Follow your gut feeling**: Which language feels most approachable to you right now? Don't stress about making the "perfect" choice – just listen to your instincts! There's honestly no wrong answer here, and you can always explore others later. + +**Bonus detective work**: See if you can discover what major websites or apps are built with each language. I guarantee you'll be shocked to learn what powers Instagram, Netflix, or that mobile game you can't stop playing! + +> 💡 **Remember**: You're not trying to become an expert in any of these languages today. You're just getting to know the neighborhood before you decide where you want to set up shop. Take your time, have fun with it, and let your curiosity guide you! + +## Let's Celebrate What You've Discovered! + +Holy moly, you've absorbed so much incredible information today! I'm genuinely excited to see how much of this amazing journey has stuck with you. And remember – this isn't a test where you need to get everything perfect. This is more like a celebration of all the cool stuff you've learned about this fascinating world you're about to dive into! + +[Take the post-lesson quiz](https://ff-quizzes.netlify.app/web/) ## Review & Self Study -Explore the different programming languages available. Try writing a line of code in one language, then rewrite it in two others. What did you learn? +**Take your time to explore and have fun with it!** +You've covered a lot of ground today, and that's something to be proud of! Now comes the fun part – exploring the topics that sparked your curiosity. Remember, this isn't homework – it's an adventure! + +**Dive deeper into what excites you:** + +**Get hands-on with programming languages:** +- Visit the official websites of 2-3 languages that caught your attention. Each one has its own personality and story! +- Try some online coding playgrounds like [CodePen](https://codepen.io/), [JSFiddle](https://jsfiddle.net/), or [Replit](https://replit.com/). Don't be afraid to experiment – you can't break anything! +- Read about how your favorite language came to be. Seriously, some of these origin stories are fascinating and will help you understand why languages work the way they do. + +**Get comfortable with your new tools:** +- Download Visual Studio Code if you haven't already – it's free and you're going to love it! +- Spend a few minutes browsing the Extensions marketplace. It's like an app store for your code editor! +- Open up your browser's Developer Tools and just click around. Don't worry about understanding everything – just get familiar with what's there. + +**Join the community:** +- Follow some developer communities on [Dev.to](https://dev.to/), [Stack Overflow](https://stackoverflow.com/), or [GitHub](https://github.com/). The programming community is incredibly welcoming to newcomers! +- Watch some beginner-friendly coding videos on YouTube. There are so many great creators out there who remember what it's like to be starting out. +- Consider joining local meetups or online communities. Trust me, developers love helping newcomers! + +> 🎯 **Listen, here's what I want you to remember**: You're not expected to become a coding wizard overnight! Right now, you're just getting to know this amazing new world you're about to be part of. Take your time, enjoy the journey, and remember – every single developer you admire was once sitting exactly where you are right now, feeling excited and maybe a little overwhelmed. That's totally normal, and it means you're doing it right! + + ## Assignment [Reading the Docs](assignment.md) -> Note: When selecting tools for your assignment, do not choose editors, browsers, or command line tools already listed above. +> 💡 **A little nudge for your assignment**: I'd absolutely love to see you explore some tools we haven't covered yet! Skip the editors, browsers, and command line tools we've already talked about – there's this whole incredible universe of amazing development tools out there just waiting to be discovered. Look for ones that are actively maintained and have vibrant, helpful communities (these tend to have the best tutorials and the most supportive people when you inevitably get stuck and need a friendly hand). + +--- + +## 🚀 Your Programming Journey Timeline + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Bookmark 2-3 programming language websites that caught your attention +- [ ] Download Visual Studio Code if you haven't already +- [ ] Open your browser's DevTools (F12) and click around any website +- [ ] Join one programming community (Dev.to, Reddit r/webdev, or Stack Overflow) + +### ⏰ **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and reflect on your answers +- [ ] Set up VS Code with the GitHub Copilot extension +- [ ] Try a "Hello World" example in 2 different programming languages online +- [ ] Watch a "Day in the Life of a Developer" video on YouTube +- [ ] Start your programming language detective work (from the challenge) + +### 📅 **Your Week-Long Adventure** +- [ ] Complete the assignment and explore 3 new development tools +- [ ] Follow 5 developers or programming accounts on social media +- [ ] Try building something tiny in CodePen or Replit (even just "Hello, [Your Name]!") +- [ ] Read one developer blog post about someone's coding journey +- [ ] Join a virtual meetup or watch a programming talk +- [ ] Start learning your chosen language with online tutorials + +### 🗓️ **Your Month-Long Transformation** +- [ ] Build your first small project (even a simple webpage counts!) +- [ ] Contribute to an open-source project (start with documentation fixes) +- [ ] Mentor someone who's just starting their programming journey +- [ ] Create your developer portfolio website +- [ ] Connect with local developer communities or study groups +- [ ] Start planning your next learning milestone + +### 🎯 **Final Reflection Check-in** + +**Before you move on, take a moment to celebrate:** +- What's one thing about programming that excited you today? +- Which tool or concept do you want to explore first? +- How do you feel about starting this programming journey? +- What's one question you'd like to ask a developer right now? + +```mermaid +journey + title Your Confidence Building Journey + section Today + Curious: 3: You + Overwhelmed: 4: You + Excited: 5: You + section This Week + Exploring: 4: You + Learning: 5: You + Connecting: 4: You + section Next Month + Building: 5: You + Confident: 5: You + Helping Others: 5: You +``` +> 🌟 **Remember**: Every expert was once a beginner. Every senior developer once felt exactly like you do right now – excited, maybe a little overwhelmed, and definitely curious about what's possible. You're in amazing company, and this journey is going to be incredible. Welcome to the wonderful world of programming! 🎉 --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/assignment.md b/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/assignment.md index 09e6e1cf8..49f2f309a 100644 --- a/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/assignment.md +++ b/translations/en/1-getting-started-lessons/1-intro-to-programming-languages/assignment.md @@ -1,31 +1,69 @@ - +# Assignment: Exploring Modern Web Development Tools + ## Instructions -There are many tools that a web developer may need that are listed on the [MDN documentation for client-side tooling](https://developer.mozilla.org/docs/Learn/Tools_and_testing/Understanding_client-side_tools/Overview). Select **three tools** that are **not covered in this lesson** (excluding [list specific tools or refer to lesson content]), explain **why** a web developer would use each tool, and find a tool that fits each category. For each, share a link to its official documentation (not the example used on MDN). +The web development ecosystem includes hundreds of specialized tools that help developers build, test, and maintain applications efficiently. Your task is to research and understand tools that complement the ones covered in this lesson. + +**Your Mission:** Select **three tools** that are **not covered in this lesson** (avoid choosing code editors, browsers, or command line tools already listed). Focus on tools that solve specific problems in modern web development workflows. + +**For each tool, provide:** + +1. **Tool name and category** (e.g., "Figma - Design Tool" or "Jest - Testing Framework") +2. **Purpose and benefits** - Explain in 2-3 sentences why a web developer would use this tool and what problems it solves +3. **Official documentation link** - Provide a link to the tool's official documentation or website (not just tutorial sites) +4. **Real-world context** - Mention one way this tool fits into a professional development workflow + +## Suggested Tool Categories + +Consider exploring tools from these categories: + +| Category | Examples | What They Do | +|----------|----------|--------------| +| **Build Tools** | Vite, Webpack, Parcel, esbuild | Bundle and optimize code for production with fast development servers | +| **Testing Frameworks** | Vitest, Jest, Cypress, Playwright | Ensure code works correctly and catch bugs before deployment | +| **Design Tools** | Figma, Adobe XD, Penpot | Create mockups, prototypes, and design systems collaboratively | +| **Deployment Platforms** | Netlify, Vercel, Cloudflare Pages | Host and distribute websites with automatic CI/CD | +| **Version Control** | GitHub, GitLab, Bitbucket | Manage code changes, collaboration, and project workflows | +| **CSS Frameworks** | Tailwind CSS, Bootstrap, Bulma | Accelerate styling with pre-built component libraries | +| **Package Managers** | npm, pnpm, Yarn | Install and manage code libraries and dependencies | +| **Accessibility Tools** | axe-core, Lighthouse, Pa11y | Test for inclusive design and WCAG compliance | +| **API Development** | Postman, Insomnia, Thunder Client | Test and document APIs during development | -**Format:** -- Tool name -- Why a web developer would use it (2-3 sentences) -- Link to documentation +## Format Requirements -**Length:** -- Each explanation should be 2-3 sentences. +**For each tool:** +``` +### [Tool Name] - [Category] + +**Purpose:** [2-3 sentences explaining why developers use this tool] + +**Documentation:** [Official website/documentation link] + +**Workflow Integration:** [1 sentence about how it fits into development process] +``` + +## Quality Guidelines + +- **Choose current tools**: Select tools that are actively maintained and widely used in 2025 +- **Focus on value**: Explain the specific benefits, not just what the tool does +- **Professional context**: Consider tools used by development teams, not just individual hobbyists +- **Diverse selection**: Pick tools from different categories to show breadth of the ecosystem +- **Modern relevance**: Prioritize tools that align with current web development trends and best practices ## Rubric -Exemplary | Adequate | Needs Improvement ---- | --- | -- | -Explained why web developer would use tool | Explained how, but not why developer would use tool | Did not mention how or why a developer would use tool | +| Excellent | Good | Needs Improvement | +|-----------|------|-------------------| +| **Clearly explained why developers use each tool and what problems it solves** | **Explained what the tool does but missed some context about its value** | **Listed tools but didn't explain their purpose or benefits** | +| **Provided official documentation links for all tools** | **Provided mostly official links with 1-2 tutorial sites** | **Relied mainly on tutorial sites rather than official documentation** | +| **Selected current, professionally-used tools from diverse categories** | **Selected good tools but limited variety in categories** | **Selected outdated tools or only from one category** | +| **Demonstrated understanding of how tools fit into development workflows** | **Showed some understanding of professional context** | **Focused only on tool features without workflow context** | + +> 💡 **Research Tip**: Look for tools mentioned in job postings for web developers, check popular developer surveys, or explore the dependencies used by successful open-source projects on GitHub! --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/1-getting-started-lessons/2-github-basics/README.md b/translations/en/1-getting-started-lessons/2-github-basics/README.md index ab0c7ec08..dd96267ba 100644 --- a/translations/en/1-getting-started-lessons/2-github-basics/README.md +++ b/translations/en/1-getting-started-lessons/2-github-basics/README.md @@ -1,344 +1,769 @@ - # Introduction to GitHub -This lesson introduces the basics of GitHub, a platform for hosting and managing changes to your code. +Hey there, future developer! 👋 Ready to join millions of coders around the world? I'm genuinely excited to introduce you to GitHub – think of it as the social media platform for programmers, except instead of sharing photos of your lunch, we're sharing code and building incredible things together! -![Intro to GitHub](../../../../translated_images/en/webdev101-github.8846d7971abef6f947909b4f9d343e2a23778aa716ca6b9d71df7174ee5009ac.png) +Here's what absolutely blows my mind: every app on your phone, every website you visit, and most of the tools you'll learn to use were built by teams of developers collaborating on platforms just like GitHub. That music app you love? Someone like you contributed to it. That game you can't put down? Yep, probably built with GitHub collaboration. And now YOU'RE going to learn how to be part of that amazing community! + +I know this might feel like a lot at first – heck, I remember staring at my first GitHub page thinking "What on earth does any of this mean?" But here's the thing: every single developer started exactly where you are right now. By the end of this lesson, you'll have your very own GitHub repository (think of it as your personal project showcase in the cloud), and you'll know how to save your work, share it with others, and even contribute to projects that millions of people use. + +We're going to take this journey together, one step at a time. No rushing, no pressure – just you, me, and some really cool tools that are about to become your new best friends! + +![Intro to GitHub](../../../../translated_images/en/webdev101-github.8846d7971abef6f9.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +```mermaid +journey + title Your GitHub Adventure Today + section Setup + Install Git: 4: You + Create Account: 5: You + First Repository: 5: You + section Master Git + Local Changes: 4: You + Commits & Pushes: 5: You + Branching: 4: You + section Collaborate + Fork Projects: 4: You + Pull Requests: 5: You + Open Source: 5: You +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app) ## Introduction -In this lesson, we'll explore: +Before we dive into the really exciting stuff, let's get your computer ready for some GitHub magic! Think of this like organizing your art supplies before creating a masterpiece – having the right tools ready makes everything so much smoother and way more fun. -- Tracking your work on your computer -- Collaborating on projects with others -- Contributing to open-source software +I'm going to walk you through each setup step personally, and I promise it's not nearly as intimidating as it might look at first glance. If something doesn't click right away, that's completely normal! I remember setting up my first development environment and feeling like I was trying to read ancient hieroglyphics. Every single developer has been exactly where you are right now, wondering if they're doing it right. Spoiler alert: if you're here learning, you're already doing it right! 🌟 + +In this lesson, we'll cover: + +- tracking the work you do on your machine +- working on projects with others +- how to contribute to open source software ### Prerequisites -Before starting, check if Git is installed. In the terminal, type: +Let's get your computer ready for some GitHub magic! Don't worry – this setup is something you only need to do once, and then you'll be all set for your entire coding journey. + +Alright, let's start with the foundation! First, we need to check if Git is already hanging out on your computer. Git is basically like having a super-smart assistant that remembers every single change you make to your code – way better than frantically hitting Ctrl+S every two seconds (we've all been there!). + +Let's see if Git is already installed by typing this magic command in your terminal: `git --version` -If Git isn't installed, [download Git](https://git-scm.com/downloads). Then, set up your local Git profile in the terminal: -* `git config --global user.name "your-name"` -* `git config --global user.email "your-email"` +If Git isn't there yet, no worries! Just head over to [download Git](https://git-scm.com/downloads) and grab it. Once you've got it installed, we need to introduce Git to you properly: + +> 💡 **First Time Setup**: These commands tell Git who you are. This information will be attached to every commit you make, so choose a name and email you're comfortable sharing publicly. + +```bash +git config --global user.name "your-name" +git config --global user.email "your-email" +``` -To verify if Git is already configured, type: -`git config --list` +To check if Git is already configured you can type: +```bash +git config --list +``` -You'll also need a GitHub account, a code editor (like Visual Studio Code), and access to your terminal (or command prompt). +You'll also need a GitHub account, a code editor (like Visual Studio Code), and you'll need to open your terminal (or: command prompt). -Visit [github.com](https://github.com/) to create an account if you don't have one, or log in and complete your profile. +Navigate to [github.com](https://github.com/) and create an account if you haven't already, or log in and fill out your profile. -✅ GitHub isn't the only code repository platform out there, but it's the most widely known. +💡 **Modern tip**: Consider setting up [SSH keys](https://docs.github.com/en/authentication/connecting-to-github-with-ssh) or using [GitHub CLI](https://cli.github.com/) for easier authentication without passwords. + +✅ GitHub isn't the only code repository in the world; there are others, but GitHub is the best known ### Preparation -You'll need a folder containing a code project on your local machine (laptop or PC) and a public repository on GitHub to practice contributing to others' projects. +You'll need both a folder with a code project on your local machine (laptop or PC), and a public repository on GitHub, which will serve as an example for how to contribute to the projects of others. ---- +### Keeping Your Code Safe -## Code Management +Let's talk about security for a moment – but don't worry, we're not going to overwhelm you with scary stuff! Think of these security practices like locking your car or your house. They're simple habits that become second nature and keep your hard work protected. -Imagine you have a folder on your computer with a code project, and you want to start tracking your progress using Git, a version control system. Some people liken using Git to writing a love letter to your future self. By reading your commit messages days, weeks, or months later, you'll recall why you made certain decisions or "roll back" changes—provided you write good commit messages. +We'll show you the modern, secure ways to work with GitHub right from the start. This way, you'll develop good habits that will serve you well throughout your coding career. + +When working with GitHub, it's important to follow security best practices: + +| Security Area | Best Practice | Why It Matters | +|---------------|---------------|----------------| +| **Authentication** | Use SSH keys or Personal Access Tokens | Passwords are less secure and being phased out | +| **Two-Factor Authentication** | Enable 2FA on your GitHub account | Adds an extra layer of account protection | +| **Repository Security** | Never commit sensitive information | API keys and passwords should never be in public repos | +| **Dependency Management** | Enable Dependabot for updates | Keeps your dependencies secure and up-to-date | + +> ⚠️ **Critical Security Reminder**: Never commit API keys, passwords, or other sensitive information to any repository. Use environment variables and `.gitignore` files to protect sensitive data. + +**Modern Authentication Setup:** + +```bash +# Generate SSH key (modern ed25519 algorithm) +ssh-keygen -t ed25519 -C "your_email@example.com" + +# Set up Git to use SSH +git remote set-url origin git@github.com:username/repository.git +``` + +> 💡 **Pro Tip**: SSH keys eliminate the need to enter passwords repeatedly and are more secure than traditional authentication methods. + +--- + +## Managing Your Code Like a Pro + +Okay, THIS is where things get really exciting! 🎉 We're about to learn how to track and manage your code like the pros do, and honestly, this is one of my favorite things to teach because it's such a game-changer. + +Picture this: you're writing an amazing story, and you want to keep track of every draft, every brilliant edit, and every "wait, that's genius!" moment along the way. That's exactly what Git does for your code! It's like having the most incredible time-traveling notebook that remembers EVERYTHING – every keystroke, every change, every "oops, that broke everything" moment that you can instantly undo. + +I'll be honest – this might feel overwhelming at first. When I started, I thought "Why can't I just save my files like normal?" But trust me on this: once Git clicks for you (and it will!), you'll have one of those lightbulb moments where you think "How did I EVER code without this?" It's like discovering you can fly when you've been walking everywhere your whole life! + +Let's say you have a folder locally with some code project and you want to start tracking your progress using git - the version control system. Some people compare using git to writing a love letter to your future self. Reading your commit messages days or weeks or months later you'll be able to recall why you made a decision, or "rollback" a change - that is, when you write good "commit messages". + +```mermaid +flowchart TD + A[📁 Your Project Files] --> B{Is it a Git Repository?} + B -->|No| C[git init] + B -->|Yes| D[Make Changes] + C --> D + D --> E[git add .] + E --> F["git commit -m 'message'"] + F --> G[git push] + G --> H[🌟 Code on GitHub!] + + H --> I{Want to collaborate?} + I -->|Yes| J[Fork & Clone] + I -->|No| D + J --> K[Create Branch] + K --> L[Make Changes] + L --> M[Pull Request] + M --> N[🎉 Contributing!] + + style A fill:#fff59d + style H fill:#c8e6c9 + style N fill:#ff4081,color:#fff +``` +### Task: Create Your First Repository! + +> 🎯 **Your Mission (and I'm so excited for you!)**: We're going to create your very first GitHub repository together! By the time we're done here, you'll have your own little corner of the internet where your code lives, and you'll have made your first "commit" (that's developer speak for saving your work in a really smart way). +> +> This is honestly such a special moment – you're about to officially join the global community of developers! I still remember the thrill of creating my first repo and thinking "Wow, I'm really doing this!" -### Task: Create a Repository and Commit Code +Let's walk through this adventure together, step by step. Take your time with each part – there's no prize for rushing, and I promise every single step will make sense. Remember, every coding superstar you admire was once sitting exactly where you are, about to create their first repository. How cool is that? -> Watch the video +> Check out video > > [![Git and GitHub basics video](https://img.youtube.com/vi/9R31OUPpxU4/0.jpg)](https://www.youtube.com/watch?v=9R31OUPpxU4) -1. **Create a repository on GitHub**. On GitHub.com, go to the repositories tab or use the navigation bar in the top-right corner to find the **new repo** button. +**Let's Do This Together:** - 1. Name your repository (folder). - 1. Click **create repository**. +1. **Create your repository on GitHub**. Head over to GitHub.com and look for that bright green **New** button (or the **+** sign in the top right corner). Click it and select **New repository**. -1. **Navigate to your working folder**. In your terminal, switch to the folder (directory) you want to start tracking. Type: + Here's what to do: + 1. Give your repository a name – make it something meaningful to you! + 1. Add a description if you want (this helps others understand what your project is about) + 1. Decide if you want it public (everyone can see it) or private (just for you) + 1. I recommend checking the box to add a README file – it's like the front page of your project + 1. Click **Create repository** and celebrate – you just created your first repo! 🎉 + +2. **Navigate to your project folder**. Now let's open up your terminal (don't worry, it's not as scary as it looks!). We need to tell your computer where your project files are. Type this command: ```bash cd [name of your folder] ``` -1. **Initialize a Git repository**. In your project folder, type: + **What we're doing here:** + - We're basically saying "Hey computer, take me to my project folder" + - This is like opening a specific folder on your desktop, but we're doing it with text commands + - Replace `[name of your folder]` with the actual name of your project folder + +3. **Turn your folder into a Git repository**. This is where the magic happens! Type: ```bash git init ``` -1. **Check the status**. To check the status of your repository, type: + **Here's what just happened (pretty cool stuff!):** + - Git just created a hidden `.git` folder in your project – you won't see it, but it's there! + - Your regular folder is now a "repository" that can track every change you make + - Think of it like giving your folder superpowers to remember everything + +4. **Check what's happening**. Let's see what Git thinks about your project right now: ```bash git status ``` - The output might look like this: + **Understanding what Git is telling you:** + + You might see something that looks like this: ```output Changes not staged for commit: (use "git add ..." to update what will be committed) - (use "git checkout -- ..." to discard changes in working directory) + (use "git restore ..." to discard changes in working directory) modified: file.txt modified: file2.txt ``` - The `git status` command typically shows information like which files are ready to be saved to the repository or have changes you might want to preserve. + **Don't panic! Here's what this means:** + - Files in **red** are files that have changes but aren't ready to be saved yet + - Files in **green** (when you see them) are ready to be saved + - Git is being helpful by telling you exactly what you can do next -1. **Add all files for tracking** - This is also known as staging files or adding files to the staging area. + > 💡 **Pro tip**: The `git status` command is your best friend! Use it anytime you're confused about what's going on. It's like asking Git "Hey, what's the situation right now?" + +5. **Get your files ready to save** (this is called "staging"): ```bash git add . ``` - The `git add` command with the `.` argument stages all your files and changes for tracking. + **What we just did:** + - We told Git "Hey, I want to include ALL my files in the next save" + - The `.` is like saying "everything in this folder" + - Now your files are "staged" and ready for the next step -1. **Add selected files for tracking** + **Want to be more selective?** You can add just specific files: ```bash git add [file or folder name] ``` - This allows you to stage only specific files when you don't want to commit everything at once. + **Why might you want to do this?** + - Sometimes you want to save related changes together + - It helps you organize your work into logical chunks + - Makes it easier to understand what changed and when -1. **Unstage all files** + **Changed your mind?** No worries! You can unstage files like this: ```bash + # Unstage everything git reset + + # Unstage just one file + git reset [file name] ``` - This command unstages all files at once. + Don't worry – this doesn't delete your work, it just takes files out of the "ready to save" pile. -1. **Unstage a specific file** - - ```bash - git reset [file or folder name] - ``` - - This command unstages only a particular file that you don't want to include in the next commit. - -1. **Save your work**. At this point, you've added files to the staging area, where Git tracks your files. To make the changes permanent, you need to commit the files. A commit represents a save point in your repository's history. Type the following to create a commit: +6. **Save your work permanently** (making your first commit!): ```bash git commit -m "first commit" ``` - This commits all your files with the message "first commit." For future commit messages, aim to be more descriptive to convey the type of change you've made. + **🎉 Congratulations! You just made your first commit!** + + **Here's what just happened:** + - Git took a "snapshot" of all your staged files at this exact moment + - Your commit message "first commit" explains what this save point is about + - Git gave this snapshot a unique ID so you can always find it later + - You've officially started tracking your project's history! -1. **Connect your local Git repository to GitHub**. While a Git repository is useful on your computer, you'll eventually want to back up your files and collaborate with others. GitHub is a great platform for this. Since we've already created a repository on GitHub, we just need to connect it to our local Git repository. Use the `git remote add` command. Type: + > 💡 **Future commit messages**: For your next commits, be more descriptive! Instead of "updated stuff", try "Add contact form to homepage" or "Fix navigation menu bug". Your future self will thank you! - > Before typing the command, go to your GitHub repository page to find the repository URL. Replace ```https://github.com/username/repository_name.git``` with your GitHub URL. +7. **Connect your local project to GitHub**. Right now, your project exists only on your computer. Let's connect it to your GitHub repository so you can share it with the world! + + First, go to your GitHub repository page and copy the URL. Then come back here and type: ```bash git remote add origin https://github.com/username/repository_name.git ``` + + (Replace that URL with your actual repository URL!) - This creates a remote connection named "origin" pointing to the GitHub repository you created earlier. + **What we just did:** + - We created a connection between your local project and your GitHub repository + - "Origin" is just a nickname for your GitHub repository – it's like adding a contact to your phone + - Now your local Git knows where to send your code when you're ready to share it -1. **Push local files to GitHub**. Now that you've established a connection between your local repository and the GitHub repository, send your files to GitHub using the `git push` command: + 💡 **Easier way**: If you have GitHub CLI installed, you can do this in one command: + ```bash + gh repo create my-repo --public --push --source=. + ``` - > Note: Your branch name might differ from ```main```. +8. **Send your code to GitHub** (the big moment!): ```bash git push -u origin main ``` - This pushes your commits from the "main" branch to GitHub. Including `-u` in the command sets the upstream branch, allowing you to use `git push` or `git pull` without specifying the branch name in future commands. + **🚀 This is it! You're uploading your code to GitHub!** + + **What's happening:** + - Your commits are traveling from your computer to GitHub + - The `-u` flag sets up a permanent connection so future pushes are easier + - "main" is the name of your primary branch (like the main folder) + - After this, you can just type `git push` for future uploads! + + 💡 **Quick note**: If your branch is called something else (like "master"), use that name instead. You can check with `git branch --show-current`. + +9. **Your new daily coding rhythm** (this is where it gets addictive!): -2. **Add more changes**. To continue making changes and pushing them to GitHub, use the following three commands: + From now on, whenever you make changes to your project, you've got this simple three-step dance: ```bash git add . - git commit -m "type your commit message here" + git commit -m "describe what you changed" git push ``` - > Tip: Consider adopting a `.gitignore` file to exclude files you don't want to track, such as personal notes stored in the same folder. You can find templates for `.gitignore` files at [.gitignore templates](https://github.com/github/gitignore). + **This becomes your coding heartbeat:** + - Make some awesome changes to your code ✨ + - Stage them with `git add` ("Hey Git, pay attention to these changes!") + - Save them with `git commit` and a descriptive message (future you will thank you!) + - Share them with the world using `git push` 🚀 + - Rinse and repeat – seriously, this becomes as natural as breathing! + + I love this workflow because it's like having multiple save points in a video game. Made a change you love? Commit it! Want to try something risky? No problem – you can always go back to your last commit if things go sideways! + + > 💡 **Tip**: You might also want to adopt a `.gitignore` file to prevent files you don't want to track from showing up on GitHub - like that notes file you store in the same folder but has no place on a public repository. You can find templates for `.gitignore` files at [.gitignore templates](https://github.com/github/gitignore) or create one using [gitignore.io](https://www.toptal.com/developers/gitignore). + +### 🧠 **First Repository Check-in: How Did That Feel?** + +**Take a moment to celebrate and reflect:** +- How did it feel to see your code appear on GitHub for the first time? +- Which step felt the most confusing, and which felt surprisingly easy? +- Can you explain the difference between `git add`, `git commit`, and `git push` in your own words? + +```mermaid +stateDiagram-v2 + [*] --> LocalFiles: Create project + LocalFiles --> Staged: git add . + Staged --> Committed: git commit + Committed --> GitHub: git push + GitHub --> [*]: Success! 🎉 + + note right of Staged + Files ready to save + end note + + note right of Committed + Snapshot created + end note +``` +> **Remember**: Even experienced developers sometimes forget the exact commands. Having this workflow become muscle memory takes practice - you're doing great! + +#### Modern Git workflows + +Consider adopting these modern practices: + +- **Conventional Commits**: Use a standardized commit message format like `feat:`, `fix:`, `docs:`, etc. Learn more at [conventionalcommits.org](https://www.conventionalcommits.org/) +- **Atomic commits**: Make each commit represent a single logical change +- **Frequent commits**: Commit often with descriptive messages rather than large, infrequent commits -#### Commit Messages +#### Commit messages -A great Git commit subject line completes the sentence: -"If applied, this commit will ." +A great Git commit subject line completes the following sentence: +If applied, this commit will -For the subject, use the imperative, present tense: "change" instead of "changed" or "changes." -Similarly, in the optional body, use the imperative, present tense. The body should explain the motivation for the change and contrast it with previous behavior. Focus on the `why`, not the `how`. +For the subject use the imperative, present tense: "change" not "changed" nor "changes". +As in the subject, in the body (optional) also use the imperative, present tense. The body should include the motivation for the change and contrast this with previous behavior. You're explaining the `why`, not the `how`. -✅ Spend a few minutes exploring GitHub. Can you find an excellent commit message? How about a very minimal one? What information do you think is most important to include in a commit message? +✅ Take a few minutes to surf around GitHub. Can you find a really great commit message? Can you find a really minimal one? What information do you think is the most important and useful to convey in a commit message? -### Task: Collaborate +## Working with Others (The Fun Part!) -The primary reason for uploading projects to GitHub is to enable collaboration with other developers. +Hold onto your hat because THIS is where GitHub becomes absolutely magical! 🪄 You've mastered managing your own code, but now we're diving into my absolute favorite part – collaborating with amazing people from all over the world. -## Working on Projects with Others +Picture this: you wake up tomorrow and see that someone in Tokyo improved your code while you were sleeping. Then someone in Berlin fixes a bug you've been stuck on. By afternoon, a developer in São Paulo has added a feature you never even thought of. That's not science fiction – that's just Tuesday in the GitHub universe! -> Watch the video +What gets me really excited is that the collaboration skills you're about to learn? These are the EXACT same workflows that teams at Google, Microsoft, and your favorite startups use every single day. You're not just learning a cool tool – you're learning the secret language that makes the entire software world work together. + +Seriously, once you experience the rush of having someone merge your first pull request, you'll understand why developers get so passionate about open source. It's like being part of the world's biggest, most creative team project! + +> Check out video > > [![Git and GitHub basics video](https://img.youtube.com/vi/bFCM-PC3cu8/0.jpg)](https://www.youtube.com/watch?v=bFCM-PC3cu8) -In your repository, navigate to `Insights > Community` to see how your project aligns with recommended community standards. +The main reason for putting things on GitHub was to make it possible to collaborate with other developers. + +```mermaid +flowchart LR + A[🔍 Find Project] --> B[🍴 Fork Repository] + B --> C[📥 Clone to Local] + C --> D[🌿 Create Branch] + D --> E[✏️ Make Changes] + E --> F[💾 Commit Changes] + F --> G[📤 Push Branch] + G --> H[🔄 Create Pull Request] + H --> I{Maintainer Review} + I -->|✅ Approved| J[🎉 Merge!] + I -->|❓ Changes Requested| K[📝 Make Updates] + K --> F + J --> L[🧹 Clean Up Branches] + + style A fill:#e3f2fd + style J fill:#e8f5e8 + style L fill:#fff3e0 +``` +In your repository, navigate to `Insights > Community` to see how your project compares to recommended community standards. + +Want to make your repository look professional and welcoming? Head over to your repository and click on `Insights > Community`. This cool feature shows you how your project compares to what the GitHub community considers "good repository practices." + +> 🎯 **Making Your Project Shine**: A well-organized repository with good documentation is like having a clean, welcoming storefront. It tells people you care about your work and makes others want to contribute! + +**Here's what makes a repository awesome:** + +| What to Add | Why It's Important | What It Does for You | +|-------------|-------------------|---------------------| +| **Description** | First impression matters! | People know instantly what your project does | +| **README** | Your project's front page | Like a friendly tour guide for new visitors | +| **Contributing Guidelines** | Shows you welcome help | People know exactly how they can help you | +| **Code of Conduct** | Creates a friendly space | Everyone feels welcome to participate | +| **License** | Legal clarity | Others know how they can use your code | +| **Security Policy** | Shows you're responsible | Demonstrates professional practices | + +> 💡 **Pro Tip**: GitHub provides templates for all of these files. When creating a new repository, check the boxes to automatically generate these files. + +**Modern GitHub Features to Explore:** + +🤖 **Automation & CI/CD:** +- **GitHub Actions** for automated testing and deployment +- **Dependabot** for automatic dependency updates + +💬 **Community & Project Management:** +- **GitHub Discussions** for community conversations beyond issues +- **GitHub Projects** for kanban-style project management +- **Branch protection rules** to enforce code quality standards -Here are some ways to improve your GitHub repository: -- **Description**: Have you added a description for your project? -- **README**: Have you included a README? GitHub offers guidance for writing a [README](https://docs.github.com/articles/about-readmes/?WT.mc_id=academic-77807-sagibbon). -- **Contributing Guidelines**: Does your project have [contributing guidelines](https://docs.github.com/articles/setting-guidelines-for-repository-contributors/?WT.mc_id=academic-77807-sagibbon)? -- **Code of Conduct**: Have you added a [Code of Conduct](https://docs.github.com/articles/adding-a-code-of-conduct-to-your-project/)? -- **License**: Perhaps most importantly, have you added a [license](https://docs.github.com/articles/adding-a-license-to-a-repository/)? -These resources help onboard new team members. They're often the first things new contributors review before even looking at your code to determine if your project is worth their time. +All these resources will benefit onboarding new team members. And those are typically the kind of things new contributors look at before even looking at your code, to find out if your project is the right place for them to be spending their time. -✅ README files, while time-consuming to prepare, are often overlooked by busy maintainers. Can you find an example of a particularly detailed README? Note: There are [tools to help create good READMEs](https://www.makeareadme.com/) that you might want to try. +✅ README files, although they take time to prepare, are often neglected by busy maintainers. Can you find an example of a particularly descriptive one? Note: there are some [tools to help create good READMEs](https://www.makeareadme.com/) that you might like to try. -### Task: Merge Code +### Task: Merge some code -Contributing documentation helps people contribute to your project. It explains the types of contributions you're looking for and outlines the process. Contributors will need to follow several steps to contribute to your GitHub repository: +Contributing docs help people contribute to the project. It explains what types of contributions you're looking for and how the process works. Contributors will need to go through a series of steps to be able to contribute to your repo on GitHub: -1. **Fork your repository**: Contributors will likely need to _fork_ your project, creating a copy of your repository on their GitHub profile. -1. **Clone**: From there, they will clone the project to their local machine. -1. **Create a branch**: Ask contributors to create a _branch_ for their work. -1. **Focus on one area**: Encourage contributors to focus their changes on one specific area at a time. This increases the likelihood of successfully merging their work. For example, if they fix a bug, add a new feature, and update tests, you might only want to implement 1 or 2 of those changes. -✅ Think of situations where branches are particularly important for writing and shipping good code. What use cases come to mind? +1. **Forking your repo** You will probably want people to _fork_ your project. Forking means creating a replica of your repository on their GitHub profile. +1. **Clone**. From there they will clone the project to their local machine. +1. **Create a branch**. You will want to ask them to create a _branch_ for their work. +1. **Focus their change on one area**. Ask contributors to concentrate their contributions on one thing at a time - that way the chances that you can _merge_ in their work is higher. Imagine they write a bug fix, add a new feature, and update several tests - what if you want to, or can only implement 2 out of 3, or 1 out of 3 changes? -> Note: Be the change you want to see in the world—create branches for your own work too. Any commits you make will apply to the branch you're currently "checked out" to. Use `git status` to see which branch you're on. +✅ Imagine a situation where branches are particularly critical to writing and shipping good code. What use cases can you think of? -Let's walk through a contributor workflow. Assume the contributor has already _forked_ and _cloned_ the repository, so they have a Git repository ready to work on locally: +> Note, be the change you want to see in the world, and create branches for your own work as well. Any commits you make will be made on the branch you’re currently “checked out” to. Use `git status` to see which branch that is. -1. **Create a branch**: Use the `git branch` command to create a branch for the changes they plan to contribute: +Let's go through a contributor workflow. Assume the contributor has already _forked_ and _cloned_ the repo so they have a Git repo ready to be worked on, on their local machine: + +1. **Create a branch**. Use the command `git branch` to create a branch that will contain the changes they mean to contribute: ```bash git branch [branch-name] ``` -1. **Switch to the working branch**: Switch to the specified branch and update the working directory using `git switch`: + > 💡 **Modern Approach**: You can also create and switch to the new branch in one command: + ```bash + git switch -c [branch-name] + ``` + +1. **Switch to working branch**. Switch to the specified branch and update the working directory with `git switch`: ```bash git switch [branch-name] ``` -1. **Make changes**: Add your changes and inform Git using the following commands: + > 💡 **Modern Note**: `git switch` is the modern replacement for `git checkout` when changing branches. It's clearer and safer for beginners. + +1. **Do work**. At this point you want to add your changes. Don't forget to tell Git about it with the following commands: ```bash git add . git commit -m "my changes" ``` - Ensure your commit message is clear and descriptive for both yourself and the repository maintainer. + > ⚠️ **Commit Message Quality**: Ensure you give your commit a good name, both for your sake and the maintainer of the repo you are helping on. Be specific about what you changed! -1. **Merge your work with the `main` branch**: Once you're done working, you'll want to merge your changes with the `main` branch. Since the `main` branch might have changed in the meantime, update it first using the following commands: +1. **Combine your work with the `main` branch**. At some point you are done working and you want to combine your work with that of the `main` branch. The `main` branch might have changed meanwhile so make sure you first update it to the latest with the following commands: ```bash git switch main git pull ``` - To ensure any conflicts (situations where Git can't automatically merge changes) occur in your working branch, run the following commands: + At this point you want to make sure that any _conflicts_, situations where Git can't easily _combine_ the changes happens in your working branch. Therefore run the following commands: ```bash git switch [branch_name] git merge main ``` - The `git merge main` command incorporates all changes from `main` into your branch. Ideally, you can proceed without issues. If conflicts arise, VS Code will highlight where Git is "confused," allowing you to resolve the affected files. + The `git merge main` command will bring in all changes from `main` into your branch. Hopefully you can just continue. If not, VS Code will tell you where Git is _confused_ and you just alter the affected files to say which content is the most accurate. - To switch to a different branch, use the modern `git switch` command: + 💡 **Modern alternative**: Consider using `git rebase` for a cleaner history: ```bash - git switch [branch_name] - + git rebase main + ``` + This replays your commits on top of the latest main branch, creating a linear history. -1. **Push your work to GitHub**: Sending your work to GitHub involves two steps: pushing your branch to your repository and opening a Pull Request (PR). +1. **Send your work to GitHub**. Sending your work to GitHub means two things. Pushing your branch to your repo and then open up a PR, Pull Request. ```bash git push --set-upstream origin [branch-name] ``` - The above command creates the branch on your forked repository. -1. **Open a PR**. Next, you’ll want to open a PR. To do this, navigate to the forked repository on GitHub. GitHub will show an option asking if you want to create a new PR. Click on it, and you’ll be taken to an interface where you can edit the commit message title and provide a more suitable description. Now, the maintainer of the repository you forked will see this PR and, _fingers crossed_, they’ll appreciate it and _merge_ your PR. Congratulations, you’re now a contributor, yay! :) + The above command creates the branch on your forked repo. + +### 🤝 **Collaboration Skills Check: Ready to Work with Others?** + +**Let's see how you're feeling about collaboration:** +- Does the idea of forking and pull requests make sense to you now? +- What's one thing about working with branches that you want to practice more? +- How comfortable do you feel about contributing to someone else's project? + +```mermaid +mindmap + root((Git Collaboration)) + Branching + Feature branches + Bug fix branches + Experimental work + Pull Requests + Code review + Discussion + Testing + Best Practices + Clear commit messages + Small focused changes + Good documentation +``` +> **Confidence booster**: Every single developer you admire was once nervous about their first pull request. The GitHub community is incredibly welcoming to newcomers! + +1. **Open a PR**. Next, you want to open up a PR. You do that by navigating to the forked repo on GitHub. You will see an indication on GitHub where it asks whether you want to create a new PR, you click that and you are taken to an interface where you can change commit message title, give it a more suitable description. Now the maintainer of the repo you forked will see this PR and _fingers crossed_ they will appreciate and _merge_ your PR. You are now a contributor, yay :) + + 💡 **Modern tip**: You can also create PRs using GitHub CLI: + ```bash + gh pr create --title "Your PR title" --body "Description of changes" + ``` + + 🔧 **Best practices for PRs**: + - Link to related issues using keywords like "Fixes #123" + - Add screenshots for UI changes + - Request specific reviewers + - Use draft PRs for work-in-progress + - Ensure all CI checks pass before requesting review -1. **Clean up**. It’s considered good practice to _clean up_ after successfully merging a PR. You should clean up both your local branch and the branch you pushed to GitHub. First, delete it locally using the following command: +1. **Clean up**. It's considered good practice to _clean up_ after you successfully merge a PR. You want to clean up both your local branch and the branch you pushed to GitHub. First let's delete it locally with the following command: ```bash git branch -d [branch-name] ``` - Next, go to the GitHub page for the forked repository and remove the remote branch you just pushed. + Ensure you go the GitHub page for the forked repo next and remove the remote branch you just pushed to it. -The term `Pull request` might sound a bit odd because you’re essentially pushing your changes to the project. However, the maintainer (project owner) or core team needs to review your changes before merging them into the project’s "main" branch. So, in reality, you’re requesting a decision from the maintainer to accept your changes. +`Pull request` seems like a silly term because really you want to push your changes to the project. But the maintainer (project owner) or core team needs to consider your changes before merging it with the project's "main" branch, so you're really requesting a change decision from a maintainer. -A pull request is a space where you can compare and discuss the differences introduced in a branch, with reviews, comments, integrated tests, and more. A good pull request follows similar rules to a commit message. You can also reference an issue in the issue tracker, especially if your work fixes a specific issue. To do this, use a `#` followed by the issue number, for example, `#97`. +A pull request is the place to compare and discuss the differences introduced on a branch with reviews, comments, integrated tests, and more. A good pull request follows roughly the same rules as a commit message. You can add a reference to an issue in the issue tracker, when your work for instance fixes an issue. This is done using a `#` followed by the number of your issue. For example `#97`. -🤞Fingers crossed that all checks pass and the project owner(s) merge your changes into the project 🤞 +🤞Fingers crossed that all checks pass and the project owner(s) merge your changes into the project🤞 Update your current local working branch with all new commits from the corresponding remote branch on GitHub: `git pull` -## How to contribute to open source +## Contributing to Open Source (Your Chance to Make an Impact!) -First, find a repository (or **repo**) on GitHub that interests you and to which you’d like to contribute. You’ll need to copy its contents to your machine. +Are you ready for something that's going to absolutely blow your mind? 🤯 Let's talk about contributing to open source projects – and I'm getting goosebumps just thinking about sharing this with you! -✅ A great way to find 'beginner-friendly' repositories is to [search by the tag 'good-first-issue'](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/). +This is your chance to become part of something truly extraordinary. Imagine improving the tools that millions of developers use every day, or fixing a bug in an app that your friends love. That's not just a dream – that's what open source contribution is all about! -![Copy a repo locally](../../../../translated_images/en/clone_repo.5085c48d666ead57664f050d806e325d7f883be6838c821e08bc823ab7c66665.png) +Here's what gives me chills every time I think about it: every single tool you've been learning with – your code editor, the frameworks we'll explore, even the browser you're reading this in – started with someone exactly like you making their very first contribution. That brilliant developer who built your favorite VS Code extension? They were once a beginner clicking "create pull request" with shaky hands, just like you're about to do. -There are several ways to copy code. One way is to "clone" the repository’s contents using HTTPS, SSH, or the GitHub CLI (Command Line Interface). +And here's the most beautiful part: the open source community is like the internet's biggest group hug. Most projects actively look for newcomers and have issues tagged "good first issue" specifically for people like you! Maintainers genuinely get excited when they see new contributors because they remember their own first steps. -Open your terminal and clone the repository like this: -`git clone https://github.com/ProjectURL` +```mermaid +flowchart TD + A[🔍 Explore GitHub] --> B[🏷️ Find "good first issue"] + B --> C[📖 Read Contributing Guidelines] + C --> D[🍴 Fork Repository] + D --> E[💻 Set Up Local Environment] + E --> F[🌿 Create Feature Branch] + F --> G[✨ Make Your Contribution] + G --> H[🧪 Test Your Changes] + H --> I[📝 Write Clear Commit] + I --> J[📤 Push & Create PR] + J --> K[💬 Engage with Feedback] + K --> L[🎉 Merged! You're a Contributor!] + L --> M[🌟 Find Next Issue] + + style A fill:#e1f5fe + style L fill:#c8e6c9 + style M fill:#fff59d +``` +You're not just learning to code here – you're preparing to join a global family of builders who wake up every day thinking "How can we make the digital world a little bit better?" Welcome to the club! 🌟 -To start working on the project, navigate to the correct folder: +First, let's find a repository (or **repo**) on GitHub of interest to you and to which you'd like to contribute a change. You will want to copy its contents to your machine. + +✅ A good way to find 'beginner-friendly' repos is to [search by the tag 'good-first-issue'](https://github.blog/2020-01-22-browse-good-first-issues-to-start-contributing-to-open-source/). + +![Copy a repo locally](../../../../translated_images/en/clone_repo.5085c48d666ead57.webp) + +There are several ways of copying code. One way is to "clone" the contents of the repository, using HTTPS, SSH, or using the GitHub CLI (Command Line Interface). + +Open your terminal and clone the repository like so: +```bash +# Using HTTPS +git clone https://github.com/ProjectURL + +# Using SSH (requires SSH key setup) +git clone git@github.com:username/repository.git + +# Using GitHub CLI +gh repo clone username/repository +``` + +To work on the project, switch to the right folder: `cd ProjectURL` -You can also open the entire project using [Codespaces](https://github.com/features/codespaces), GitHub’s built-in code editor/cloud development environment, or [GitHub Desktop](https://desktop.github.com/). +You can also open the entire project using: +- **[GitHub Codespaces](https://github.com/features/codespaces)** - GitHub's cloud development environment with VS Code in the browser +- **[GitHub Desktop](https://desktop.github.com/)** - A GUI application for Git operations +- **[GitHub.dev](https://github.dev)** - Press the `.` key on any GitHub repo to open VS Code in the browser +- **VS Code** with the GitHub Pull Requests extension -Alternatively, you can download the code as a zipped folder. +Lastly, you can download the code in a zipped folder. ### A few more interesting things about GitHub -You can star, watch, and/or "fork" any public repository on GitHub. Your starred repositories can be found in the drop-down menu at the top-right corner. It’s like bookmarking, but for code. +You can star, watch and/or "fork" any public repository on GitHub. You can find your starred repositories in the top-right drop-down menu. It's like bookmarking, but for code. + +Projects have an issue tracker, mostly on GitHub in the "Issues" tab unless indicated otherwise, where people discuss issues related to the project. And the Pull Requests tab is where people discuss and review changes that are in progress. -Projects typically have an issue tracker, usually found in the "Issues" tab on GitHub unless stated otherwise. This is where people discuss project-related issues. The Pull Requests tab is where people discuss and review ongoing changes. +Projects might also have discussion in forums, mailing lists, or chat channels like Slack, Discord or IRC. -Projects may also have discussions in forums, mailing lists, or chat channels like Slack, Discord, or IRC. +🔧 **Modern GitHub features**: +- **GitHub Discussions** - Built-in forum for community conversations +- **GitHub Sponsors** - Support maintainers financially +- **Security tab** - Vulnerability reports and security advisories +- **Actions tab** - See automated workflows and CI/CD pipelines +- **Insights tab** - Analytics about contributors, commits, and project health +- **Projects tab** - GitHub's built-in project management tools -✅ Explore your new GitHub repository and try out a few features, like editing settings, adding information to your repo, and creating a project (like a Kanban board). There’s a lot to discover! +✅ Take a look around your new GitHub repo and try a few things, like editing settings, adding information to your repo, creating a project (like a Kanban board), and setting up GitHub Actions for automation. There's a lot you can do! --- ## 🚀 Challenge -Pair up with a friend to work on each other’s code. Collaboratively create a project, fork code, create branches, and merge changes. +Alright, it's time to put your shiny new GitHub superpowers to the test! 🚀 Here's a challenge that's going to make everything click in the most satisfying way: + +Grab a friend (or that family member who's always asking what you're up to with all this "computer stuff") and embark on a collaborative coding adventure together! This is where the real magic happens – create a project, let them fork it, make some branches, and merge changes like the pros you're becoming. + +I'm not gonna lie – you'll probably laugh at some point (especially when you both try to change the same line), maybe scratch your heads in confusion, but you'll definitely have those amazing "aha!" moments that make all the learning worth it. Plus, there's something special about sharing that first successful merge with someone else – it's like a tiny celebration of how far you've come! + +Don't have a coding buddy yet? No worries at all! The GitHub community is packed with incredibly welcoming people who remember what it was like to be new. Look for repositories with "good first issue" labels – they're basically saying "Hey beginners, come learn with us!" How awesome is that? ## Post-Lecture Quiz [Post-lecture quiz](https://ff-quizzes.netlify.app/web/en/) -## Review & Self Study +## Review & Keep Learning -Read more about [contributing to open source software](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution). +Whew! 🎉 Look at you – you've just conquered GitHub basics like an absolute champion! If your brain feels a little full right now, that's completely normal and honestly a good sign. You've just learned tools that took me weeks to feel comfortable with when I started. -[Git cheatsheet](https://training.github.com/downloads/github-git-cheat-sheet/). +Git and GitHub are incredibly powerful (like, seriously powerful), and every developer I know – including the ones who seem like wizards now – had to practice and stumble around a bit before it all clicked. The fact that you've made it through this lesson means you're already on your way to mastering some of the most important tools in a developer's toolkit. -Practice, practice, practice. GitHub offers excellent learning paths via [skills.github.com](https://skills.github.com): +Here are some absolutely fantastic resources to help you practice and become even more awesome: -- [First Week on GitHub](https://skills.github.com/#first-week-on-github) +- [Contributing to open source software guide](https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution) – Your roadmap to making a difference +- [Git cheatsheet](https://training.github.com/downloads/github-git-cheat-sheet/) – Keep this handy for quick reference! -You’ll also find more advanced courses. +And remember: practice makes progress, not perfection! The more you use Git and GitHub, the more natural it becomes. GitHub has created some amazing interactive courses that let you practice in a safe environment: + +- [Introduction to GitHub](https://github.com/skills/introduction-to-github) +- [Communicate using Markdown](https://github.com/skills/communicate-using-markdown) +- [GitHub Pages](https://github.com/skills/github-pages) +- [Managing merge conflicts](https://github.com/skills/resolve-merge-conflicts) + +**Feeling adventurous? Check out these modern tools:** +- [GitHub CLI documentation](https://cli.github.com/manual/) – For when you want to feel like a command-line wizard +- [GitHub Codespaces documentation](https://docs.github.com/en/codespaces) – Code in the cloud! +- [GitHub Actions documentation](https://docs.github.com/en/actions) – Automate all the things +- [Git best practices](https://www.atlassian.com/git/tutorials/comparing-workflows) – Level up your workflow game + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Create a collaborative web development project that demonstrates the complete GitHub workflow you've learned in this lesson. This challenge will help you practice repository creation, collaboration features, and modern Git workflows in a real-world scenario. + +**Prompt:** Create a new public GitHub repository for a simple "Web Development Resources" project. The repository should include a well-structured README.md file listing useful web development tools and resources, organized by categories (HTML, CSS, JavaScript, etc.). Set up the repository with proper community standards including a license, contributing guidelines, and a code of conduct. Create at least two feature branches: one for adding CSS resources and another for JavaScript resources. Make commits to each branch with descriptive commit messages, then create pull requests to merge the changes back to main. Enable GitHub features like Issues, Discussions, and set up a basic GitHub Actions workflow for automated checks. ## Assignment -Complete [the First Week on GitHub course](https://skills.github.com/#first-week-on-github) +Your mission, should you choose to accept it: Complete the [Introduction to GitHub](https://github.com/skills/introduction-to-github) course on GitHub Skills. This interactive course will let you practice everything you've learned in a safe, guided environment. Plus, you'll get a cool badge when you finish! 🏅 + +**Feeling ready for more challenges?** +- Set up SSH authentication for your GitHub account (no more passwords!) +- Try using GitHub CLI for your daily Git operations +- Create a repository with a GitHub Actions workflow +- Explore GitHub Codespaces by opening this very repository in a cloud-based editor + +--- + +## 🚀 Your GitHub Mastery Timeline + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Star this repository and 3 other projects that interest you +- [ ] Set up two-factor authentication on your GitHub account +- [ ] Create a simple README for your first repository +- [ ] Follow 5 developers whose work inspires you + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and reflect on your GitHub journey +- [ ] Set up SSH keys for password-free GitHub authentication +- [ ] Create your first meaningful commit with a great commit message +- [ ] Explore GitHub's "Explore" tab to discover trending projects +- [ ] Practice forking a repository and making a small change + +### 📅 **Your Week-Long GitHub Adventure** +- [ ] Complete the GitHub Skills courses (Introduction to GitHub, Markdown) +- [ ] Make your first pull request to an open source project +- [ ] Set up a GitHub Pages site to showcase your work +- [ ] Join GitHub Discussions on projects you're interested in +- [ ] Create a repository with proper community standards (README, License, etc.) +- [ ] Try GitHub Codespaces for cloud-based development + +### 🌟 **Your Month-Long Transformation** +- [ ] Contribute to 3 different open source projects +- [ ] Mentor someone new to GitHub (pay it forward!) +- [ ] Set up automated workflows with GitHub Actions +- [ ] Build a portfolio showcasing your GitHub contributions +- [ ] Participate in Hacktoberfest or similar community events +- [ ] Become a maintainer of your own project that others contribute to + +### 🎓 **Final GitHub Mastery Check-in** + +**Celebrate how far you've come:** +- What's your favorite thing about using GitHub? +- Which collaboration feature excites you most? +- How confident do you feel about contributing to open source now? +- What's the first project you want to contribute to? + +```mermaid +journey + title Your GitHub Confidence Journey + section Today + Nervous: 3: You + Curious: 4: You + Excited: 5: You + section This Week + Practicing: 4: You + Contributing: 5: You + Connecting: 5: You + section Next Month + Collaborating: 5: You + Leading: 5: You + Inspiring Others: 5: You +``` +> 🌍 **Welcome to the global developer community!** You now have the tools to collaborate with millions of developers worldwide. Your first contribution might seem small, but remember - every major open source project started with someone making their very first commit. The question isn't if you'll make an impact, but what amazing project will benefit from your unique perspective first! 🚀 + +Remember: every expert was once a beginner. You've got this! 💪 --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/1-getting-started-lessons/3-accessibility/README.md b/translations/en/1-getting-started-lessons/3-accessibility/README.md index bcbb26336..47cea7dae 100644 --- a/translations/en/1-getting-started-lessons/3-accessibility/README.md +++ b/translations/en/1-getting-started-lessons/3-accessibility/README.md @@ -1,17 +1,24 @@ - # Creating Accessible Webpages -![All About Accessibility](../../../../translated_images/en/webdev101-a11y.8ef3025c858d897a403a1a42c0897c76e11b724d9a8a0c0578dd4316f7507622.png) +![All About Accessibility](../../../../translated_images/en/webdev101-a11y.8ef3025c858d897a.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +```mermaid +journey + title Your Accessibility Learning Adventure + section Foundation + Understanding Users: 5: You + Testing Tools: 4: You + POUR Principles: 5: You + section Build Skills + Semantic HTML: 4: You + Visual Design: 5: You + ARIA Techniques: 4: You + section Master Practice + Keyboard Navigation: 5: You + Form Accessibility: 4: You + Real-world Testing: 5: You +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/) @@ -19,225 +26,1466 @@ CO_OP_TRANSLATOR_METADATA: > > \- Sir Timothy Berners-Lee, W3C Director and inventor of the World Wide Web -This quote perfectly captures the importance of building accessible websites. An application that excludes certain users is inherently discriminatory. As web developers, we should always prioritize accessibility. By focusing on it from the start, you'll be well on your way to ensuring that everyone can access the pages you create. In this lesson, you'll learn about tools that can help you ensure your web assets are accessible and how to design with accessibility in mind. - +Here's something that might surprise you: when you build accessible websites, you're not just helping people with disabilities—you're actually making the web better for everyone! + +Ever notice those curb cuts at street corners? They were originally designed for wheelchairs, but now they help people with strollers, delivery workers with dollies, travelers with rolling luggage, and cyclists too. That's exactly how accessible web design works—solutions that help one group often end up benefiting everyone. Pretty cool, right? + +In this lesson, we're going to explore how to create websites that truly work for everyone, no matter how they browse the web. You'll discover practical techniques that are already built into web standards, get hands-on with testing tools, and see how accessibility makes your sites more usable for all users. + +By the end of this lesson, you'll have the confidence to make accessibility a natural part of your development workflow. Ready to explore how thoughtful design choices can open up the web to billions of users? Let's dive in! + +```mermaid +mindmap + root((Web Accessibility)) + Users + Screen readers + Keyboard navigation + Voice control + Magnification + Technologies + HTML semantics + ARIA attributes + CSS focus indicators + Keyboard events + Benefits + Wider audience + Better SEO + Legal compliance + Universal design + Testing + Automated tools + Manual testing + User feedback + Real assistive tech +``` > You can take this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101/accessibility/?WT.mc_id=academic-77807-sagibbon)! -## Tools to use +## Understanding Assistive Technologies + +Before we jump into coding, let's take a moment to understand how people with different abilities actually experience the web. This isn't just theory—understanding these real-world navigation patterns will make you a much better developer! + +Assistive technologies are pretty amazing tools that help people with disabilities interact with websites in ways that might surprise you. Once you get the hang of how these technologies work, creating accessible web experiences becomes way more intuitive. It's like learning to see your code through someone else's eyes. ### Screen readers -Screen readers are among the most well-known accessibility tools. +[Screen readers](https://en.wikipedia.org/wiki/Screen_reader) are pretty sophisticated pieces of technology that convert digital text into speech or braille output. While they're primarily used by people with visual impairments, they're also super helpful for users with learning disabilities like dyslexia. + +I like to think of a screen reader as having a really smart narrator reading a book to you. It reads content aloud in a logical order, announces interactive elements like "button" or "link," and provides keyboard shortcuts for jumping around a page. But here's the thing—screen readers can only work their magic if we build websites with proper structure and meaningful content. That's where you come in as a developer! + +**Popular screen readers across platforms:** +- **Windows**: [NVDA](https://www.nvaccess.org/about-nvda/) (free and most popular), [JAWS](https://webaim.org/articles/jaws/), [Narrator](https://support.microsoft.com/windows/complete-guide-to-narrator-e4397a0d-ef4f-b386-d8ae-c172f109bdb1/?WT.mc_id=academic-77807-sagibbon) (built-in) +- **macOS/iOS**: [VoiceOver](https://support.apple.com/guide/voiceover/welcome/10) (built-in and very capable) +- **Android**: [TalkBack](https://support.google.com/accessibility/android/answer/6283677) (built-in) +- **Linux**: [Orca](https://wiki.gnome.org/Projects/Orca) (free and open-source) + +**How screen readers navigate web content:** + +Screen readers provide multiple navigation methods that make browsing efficient for experienced users: +- **Sequential reading**: Reads content from top to bottom, like following a book +- **Landmark navigation**: Jump between page sections (header, nav, main, footer) +- **Heading navigation**: Skip between headings to understand page structure +- **Link lists**: Generate a list of all links for quick access +- **Form controls**: Navigate directly between input fields and buttons + +> 💡 **Here's something that blew my mind**: 68% of screen reader users navigate primarily by headings ([WebAIM Survey](https://webaim.org/projects/screenreadersurvey9/#finding)). This means your heading structure is like a roadmap for users—when you get it right, you're literally helping people find their way around your content faster! + +### Building your testing workflow + +Here's some good news—effective accessibility testing doesn't have to be overwhelming! You'll want to combine automated tools (they're fantastic at catching obvious issues) with some hands-on testing. Here's a systematic approach that I've found catches the most issues without eating up your entire day: + +**Essential manual testing workflow:** + +```mermaid +flowchart TD + A[🚀 Start Testing] --> B{⌨️ Keyboard Navigation} + B --> C[Tab through all interactive elements] + C --> D{🎧 Screen Reader Testing} + D --> E[Test with NVDA/VoiceOver] + E --> F{🔍 Zoom Testing} + F --> G[Zoom to 200% and test functionality] + G --> H{🎨 Color/Contrast Check} + H --> I[Verify all text meets contrast ratios] + I --> J{👁️ Focus Management} + J --> K[Ensure focus indicators are visible] + K --> L[✅ Testing Complete] + + style A fill:#e3f2fd + style L fill:#e8f5e8 + style B fill:#fff3e0 + style D fill:#f3e5f5 + style F fill:#e0f2f1 + style H fill:#fce4ec + style J fill:#e8eaf6 +``` +**Step-by-step testing checklist:** +1. **Keyboard navigation**: Use only Tab, Shift+Tab, Enter, Space, and Arrow keys +2. **Screen reader testing**: Enable NVDA, VoiceOver, or Narrator and navigate with eyes closed +3. **Zoom testing**: Test at 200% and 400% zoom levels +4. **Color contrast verification**: Check all text and UI components +5. **Focus indicator testing**: Ensure all interactive elements have visible focus states -[Screen readers](https://en.wikipedia.org/wiki/Screen_reader) are commonly used by individuals with vision impairments. Just as we ensure browsers display information correctly, we must also ensure screen readers convey the same information accurately. +✅ **Start with Lighthouse**: Open your browser's DevTools, run a Lighthouse accessibility audit, then use the results to guide your manual testing focus areas. -At their core, screen readers audibly read a page from top to bottom. If your page is entirely text, the reader will present the information similarly to a browser. However, web pages often include links, images, colors, and other visual elements. Care must be taken to ensure this information is conveyed correctly by a screen reader. +### Zoom and magnification tools -Every web developer should become familiar with screen readers. Just as you understand how browsers work, you should also learn how screen readers operate. Fortunately, most operating systems come with built-in screen readers. +You know how you sometimes pinch to zoom on your phone when text is too small, or squint at your laptop screen in bright sunlight? Many users rely on magnification tools to make content readable every single day. This includes people with low vision, older adults, and anyone who's ever tried to read a website outdoors. -Some browsers also include tools and extensions that can read text aloud or provide basic navigation features, such as [these accessibility-focused Edge browser tools](https://support.microsoft.com/help/4000734/microsoft-edge-accessibility-features). While useful, these tools function differently from screen readers and should not be used as substitutes for screen reader testing. +Modern zoom technologies have evolved beyond just making things bigger. Understanding how these tools work will help you create responsive designs that remain functional and attractive at any magnification level. -✅ Try a screen reader and browser text reader. On Windows, [Narrator](https://support.microsoft.com/windows/complete-guide-to-narrator-e4397a0d-ef4f-b386-d8ae-c172f109bdb1/?WT.mc_id=academic-77807-sagibbon) is included by default, and [JAWS](https://webaim.org/articles/jaws/) and [NVDA](https://www.nvaccess.org/about-nvda/) can also be installed. On macOS and iOS, [VoiceOver](https://support.apple.com/guide/voiceover/welcome/10) is pre-installed. +**Modern browser zoom capabilities:** +- **Page zoom**: Scales all content proportionally (text, images, layout) - this is the preferred method +- **Text-only zoom**: Increases font size while maintaining original layout +- **Pinch-to-zoom**: Mobile gesture support for temporary magnification +- **Browser support**: All modern browsers support zoom up to 500% without breaking functionality -### Zoom +**Specialized magnification software:** +- **Windows**: [Magnifier](https://support.microsoft.com/windows/use-magnifier-to-make-things-on-the-screen-easier-to-see-414948ba-8b1c-d3bd-8615-0e5e32204198) (built-in), [ZoomText](https://www.freedomscientific.com/training/zoomtext/getting-started/) +- **macOS/iOS**: [Zoom](https://www.apple.com/accessibility/mac/vision/) (built-in with advanced features) -Zooming is another tool frequently used by individuals with vision impairments. +> ⚠️ **Design Consideration**: WCAG requires that content remain functional when zoomed to 200%. At this level, horizontal scrolling should be minimal, and all interactive elements should remain accessible. -The simplest form of zooming is static zoom, which can be controlled using `Control + plus sign (+)` or by lowering the screen resolution. This type of zoom enlarges the entire page, so using [responsive design](https://developer.mozilla.org/docs/Learn/CSS/CSS_layout/Responsive_Design) is essential to ensure a good user experience at higher zoom levels. +✅ **Test your responsive design**: Zoom your browser to 200% and 400%. Does your layout adapt gracefully? Can you still access all functionality without excessive scrolling? -Another type of zoom involves specialized software that magnifies specific areas of the screen and allows panning, similar to using a magnifying glass. On Windows, [Magnifier](https://support.microsoft.com/windows/use-magnifier-to-make-things-on-the-screen-easier-to-see-414948ba-8b1c-d3bd-8615-0e5e32204198) is built in, while [ZoomText](https://www.freedomscientific.com/training/zoomtext/getting-started/) is a third-party magnification tool with additional features and a larger user base. Both macOS and iOS include a built-in magnification tool called [Zoom](https://www.apple.com/accessibility/mac/vision/). +## Modern Accessibility Testing Tools -### Contrast checkers +Now that you understand how people navigate the web with assistive technologies, let's explore the tools that help you build and test accessible websites. -Colors on websites must be chosen carefully to accommodate users who are color-blind or have difficulty perceiving low-contrast colors. +Think of it like this: automated tools are great at catching obvious issues (like missing alt text), while hands-on testing helps you ensure your site feels good to use in the real world. Together, they give you confidence that your sites work for everyone. -✅ Test a website you enjoy using for its color choices with a browser extension like [WCAG's color checker](https://microsoftedge.microsoft.com/addons/detail/wcag-color-contrast-check/idahaggnlnekelhgplklhfpchbfdmkjp?hl=en-US&WT.mc_id=academic-77807-sagibbon). What do you learn? +### Color contrast testing -### Lighthouse +Here's some good news: color contrast is one of the most common accessibility issues, but it's also one of the easiest to fix. Good contrast benefits everyone—from users with visual impairments to people trying to read their phones at the beach. -Your browser's developer tools include the Lighthouse tool, which provides an initial analysis of a website's accessibility (along with other metrics). While you shouldn't rely solely on Lighthouse, achieving a 100% score is a helpful starting point. +**WCAG contrast requirements:** -✅ Open Lighthouse in your browser's developer tools and analyze any website. What do you discover? +| Text Type | WCAG AA (Minimum) | WCAG AAA (Enhanced) | +|-----------|-------------------|---------------------| +| **Normal text** (under 18pt) | 4.5:1 contrast ratio | 7:1 contrast ratio | +| **Large text** (18pt+ or 14pt+ bold) | 3:1 contrast ratio | 4.5:1 contrast ratio | +| **UI components** (buttons, form borders) | 3:1 contrast ratio | 3:1 contrast ratio | -## Designing for accessibility +**Essential testing tools:** +- [Colour Contrast Analyser](https://www.tpgi.com/color-contrast-checker/) - Desktop app with color picker +- [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) - Web-based with instant feedback +- [Stark](https://www.getstark.co/) - Design tool plugin for Figma, Sketch, Adobe XD +- [Accessible Colors](https://accessible-colors.com/) - Find accessible color palettes -Accessibility is a broad topic, but there are many resources available to help you. +✅ **Build better color palettes**: Start with your brand colors and use contrast checkers to create accessible variations. Document these as your design system's accessible color tokens. -- [Accessible U - University of Minnesota](https://accessibility.umn.edu/your-role/web-developers) +### Comprehensive accessibility auditing -While we can't cover every aspect of creating accessible websites, the following are some core principles to implement. Designing an accessible page from the beginning is **always** easier than retrofitting an existing page. +The most effective accessibility testing combines multiple approaches. No single tool catches everything, so building a testing routine with various methods ensures thorough coverage. -## Good display principles +**Browser-based testing (built into DevTools):** +- **Chrome/Edge**: Lighthouse accessibility audit + Accessibility panel +- **Firefox**: Accessibility Inspector with detailed tree view +- **Safari**: Audit tab in Web Inspector with VoiceOver simulation -### Color-safe palettes +**Professional testing extensions:** +- [axe DevTools](https://www.deque.com/axe/devtools/) - Industry-standard automated testing +- [WAVE](https://wave.webaim.org/extension/) - Visual feedback with error highlighting +- [Accessibility Insights](https://accessibilityinsights.io/) - Microsoft's comprehensive testing suite -People perceive colors differently. When choosing a color scheme for your site, ensure it's accessible to everyone. A great [tool for generating color palettes is Color Safe](http://colorsafe.co/). +**Command-line and CI/CD integration:** +- [axe-core](https://github.com/dequelabs/axe-core) - JavaScript library for automated testing +- [Pa11y](https://pa11y.org/) - Command-line accessibility testing tool +- [Lighthouse CI](https://github.com/GoogleChrome/lighthouse-ci) - Automated accessibility scoring -✅ Identify a website with problematic color usage. Why is it an issue? +> 🎯 **Testing Goal**: Aim for a Lighthouse accessibility score of 95+ as your baseline. Remember, automated tools only catch about 30-40% of accessibility issues—manual testing is still essential! -### Use the correct HTML +### 🧠 **Testing Skills Check: Ready to Find Issues?** -With CSS and JavaScript, you can make any element look like any type of control. For example, a `` could be styled to look like a ` + + +
+

Latest News

+ +
+ + + +
+ Password must contain at least 8 characters, including uppercase, lowercase, and numbers. +
+
+ +
+``` + +**Live regions for dynamic content:** + +```html + +
+ +
+ + +
+ +
+ + + +
+ +
+``` + +**Interactive widget example (accordion):** + +```html +
+

+ +

+ +
+``` + +```javascript +// JavaScript to manage accordion state +function toggleAccordion(trigger) { + const panel = document.getElementById(trigger.getAttribute('aria-controls')); + const isExpanded = trigger.getAttribute('aria-expanded') === 'true'; + + // Toggle states + trigger.setAttribute('aria-expanded', !isExpanded); + panel.hidden = isExpanded; + + // Announce change to screen readers + const status = document.getElementById('status-updates'); + status.textContent = isExpanded ? 'Section collapsed' : 'Section expanded'; +} +``` + +### ARIA implementation best practices + +ARIA is powerful but requires careful implementation. Following these guidelines helps ensure your ARIA enhances rather than hinders accessibility: + +**🛡️ Core principles:** + +```mermaid +flowchart TD + A[🚀 Start with semantic HTML] --> B{Does HTML provide needed semantics?} + B -->|Yes| C[✅ Use HTML only] + B -->|No| D[Consider ARIA enhancement] + D --> E{Can you achieve it with simpler means?} + E -->|Yes| F[🔄 Simplify approach] + E -->|No| G[📝 Implement ARIA carefully] + G --> H[🧪 Test with real AT] + H --> I{Works as expected?} + I -->|No| J[🔧 Debug and fix] + I -->|Yes| K[✅ Success!] + J --> H + F --> C + + style A fill:#e3f2fd + style C fill:#e8f5e8 + style K fill:#e8f5e8 + style G fill:#fff3e0 + style H fill:#f3e5f5 +``` +1. **Semantic HTML first**: Always prefer ` +``` + +**Complex images** - charts, diagrams, infographics: +```html +Quarterly sales data +
+

Detailed description: Sales data shows a steady increase across all quarters...

+
+``` + +### Video and audio accessibility + +**Video requirements:** +- **Captions**: Text version of spoken content and sound effects +- **Audio descriptions**: Narration of visual elements for blind users +- **Transcripts**: Full text version of all audio and visual content + +```html + +``` + +**Audio requirements:** +- **Transcripts**: Text version of all spoken content +- **Visual indicators**: For audio-only content, provide visual cues + +### Modern image techniques + +**Using CSS for decorative images:** +```css +.hero-section { + background-image: url('decorative-hero.jpg'); + /* Decorative images in CSS don't need alt text */ +} +``` + +**Responsive images with accessibility:** +```html + + + + Website traffic increased 40% after accessibility improvements + +``` + +✅ **Test image accessibility**: Use a screen reader to navigate a page with images. Are you getting enough information to understand the content? + +## Keyboard navigation and focus management + +Many users navigate the web entirely with their keyboards. This includes people with motor disabilities, power users who find keyboards faster than mice, and anyone whose mouse has stopped working. Making sure your site works well with keyboard input is essential and often makes your site more efficient for everyone. + +```mermaid +flowchart LR + A[⌨️ Keyboard Navigation] --> B[Tab Order] + A --> C[Focus Indicators] + A --> D[Skip Links] + A --> E[Keyboard Shortcuts] + + B --> B1[Logical sequence
All interactive elements
No tab traps] + C --> C1[Visible outlines
High contrast
Clear boundaries] + D --> D1[Skip to main
Skip to nav
Bypass repetitive] + E --> E1[Escape to close
Enter to activate
Arrows in groups] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 +``` +### Essential keyboard navigation patterns + +**Standard keyboard interactions:** +- **Tab**: Move focus forward through interactive elements +- **Shift + Tab**: Move focus backward +- **Enter**: Activate buttons and links +- **Space**: Activate buttons, check checkboxes +- **Arrow keys**: Navigate within component groups (radio buttons, menus) +- **Escape**: Close modals, dropdowns, or cancel operations + +### Focus management best practices + +**Visible focus indicators:** +```css +/* Ensure focus is always visible */ +button:focus-visible { + outline: 2px solid #4A90A4; + outline-offset: 2px; +} + +/* Custom focus styles for different components */ +.card:focus-within { + box-shadow: 0 0 0 3px rgba(74, 144, 164, 0.5); +} +``` + +**Skip links for efficient navigation:** +```html + + + + +
+ +
+``` + +**Proper tab order:** +```html + +
+ + + + + + + +
+``` + +### Focus trapping in modals + +When opening modal dialogs, focus should be trapped within the modal: + +```javascript +// Modern focus trap implementation +function trapFocus(element) { + const focusableElements = element.querySelectorAll( + 'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])' + ); + + const firstElement = focusableElements[0]; + const lastElement = focusableElements[focusableElements.length - 1]; + + element.addEventListener('keydown', (e) => { + if (e.key === 'Tab') { + if (e.shiftKey && document.activeElement === firstElement) { + e.preventDefault(); + lastElement.focus(); + } else if (!e.shiftKey && document.activeElement === lastElement) { + e.preventDefault(); + firstElement.focus(); + } + } + + if (e.key === 'Escape') { + closeModal(); + } + }); + + // Focus the first element when the modal opens + firstElement.focus(); +} +``` + +✅ **Test keyboard navigation**: Try navigating your website using only the Tab key. Can you reach all interactive elements? Is the focus order logical? Are focus indicators clearly visible? + +## Form accessibility + +Forms are critical for user interaction and require special attention to accessibility. + +### Label and form control association + +**Every form control needs a label:** +```html + + + + + + + + + +``` + +### Error handling and validation + +**Accessible error messages:** +```html + + + +``` + +**Form validation best practices:** +- Use `aria-invalid` to indicate invalid fields +- Provide clear, specific error messages +- Use `role="alert"` for important error announcements +- Show errors both immediately and on form submission + +### Fieldsets and grouping + +**Group related form controls:** +```html +
+ Shipping Address + + + + + +
+ +
+ Preferred Contact Method + + + + + +
+``` + +## Your Accessibility Journey: Key Takeaways + +Congratulations! You've just gained the foundational knowledge to create truly inclusive web experiences. This is pretty exciting stuff! Web accessibility isn't just about checking compliance boxes—it's about recognizing the diverse ways people interact with digital content and designing for that amazing complexity. + +You're now part of a growing community of developers who understand that great design works for everyone. Welcome to the club! + +**🎯 Your accessibility toolkit now includes:** + +| Core Principle | Implementation | Impact | +|----------------|----------------|---------| +| **Semantic HTML Foundation** | Use proper HTML elements for their intended purpose | Screen readers can navigate efficiently, keyboards work automatically | +| **Inclusive Visual Design** | Sufficient contrast, meaningful color use, visible focus indicators | Clear for everyone in any lighting condition | +| **Descriptive Content** | Meaningful link text, alt text, headings | Users understand content without visual context | +| **Keyboard Accessibility** | Tab order, keyboard shortcuts, focus management | Motor accessibility and power user efficiency | +| **ARIA Enhancement** | Strategic use to fill semantic gaps | Complex applications work with assistive technologies | +| **Comprehensive Testing** | Automated tools + manual verification + real user testing | Catch issues before they impact users | + +**🚀 Your next steps:** + +1. **Build accessibility into your workflow**: Make testing a natural part of your development process +2. **Learn from real users**: Seek out feedback from people who use assistive technologies +3. **Stay current**: Accessibility techniques evolve with new technologies and standards +4. **Advocate for inclusion**: Share your knowledge and make accessibility a team priority + +> 💡 **Remember**: Accessibility constraints often lead to innovative, elegant solutions that benefit everyone. Curb cuts, captions, and voice controls all started as accessibility features and became mainstream improvements. + +**The business case is crystal clear**: Accessible websites reach more users, rank better in search engines, have lower maintenance costs, and avoid legal risks. But honestly? The real reason to care about accessibility goes so much deeper. Accessible websites embody the best values of the web—openness, inclusivity, and the idea that everyone deserves equal access to information. + +You're now equipped to build the inclusive web of the future. Every accessible site you create makes the internet a more welcoming place for everyone. That's pretty amazing when you think about it! + +## Additional Resources + +Continue your accessibility learning journey with these essential resources: + +**📚 Official Standards and Guidelines:** +- [WCAG 2.1 Guidelines](https://www.w3.org/WAI/WCAG21/quickref/) - The official accessibility standard with quick reference +- [ARIA Authoring Practices Guide](https://w3c.github.io/aria-practices/) - Comprehensive patterns for interactive widgets +- [WebAIM Guidelines](https://webaim.org/) - Practical, beginner-friendly accessibility guidance + +**🛠️ Tools and Testing Resources:** +- [axe DevTools](https://www.deque.com/axe/devtools/) - Industry-standard accessibility testing +- [A11y Project Checklist](https://www.a11yproject.com/checklist/) - Step-by-step accessibility verification +- [Accessibility Insights](https://accessibilityinsights.io/) - Microsoft's comprehensive testing suite +- [Color Oracle](https://colororacle.org/) - Color blindness simulator for design testing + +**🎓 Learning and Community:** +- [WebAIM Screen Reader Survey](https://webaim.org/projects/screenreadersurvey9/) - Real user preferences and behaviors +- [Inclusive Components](https://inclusive-components.design/) - Modern accessible component patterns +- [A11y Coffee](https://a11y.coffee/) - Quick accessibility tips and insights +- [Web Accessibility Initiative (WAI)](https://www.w3.org/WAI/) - W3C's comprehensive accessibility resources + +**🎥 Hands-on Learning:** +- [Accessibility Developer Guide](https://www.accessibility-developer-guide.com/) - Practical implementation guidance +- [Deque University](https://dequeuniversity.com/) - Professional accessibility training courses + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Create an accessible modal dialog component that demonstrates proper focus management, ARIA attributes, and keyboard navigation patterns. + +**Prompt:** Build a complete modal dialog component with HTML, CSS, and JavaScript that includes: proper focus trapping, ESC key to close, click outside to close, ARIA attributes for screen readers, and visible focus indicators. The modal should contain a form with proper labels and error handling. Ensure the component meets WCAG 2.1 AA standards. ---- ## 🚀 Challenge -Take this HTML and rewrite it to be as accessible as possible, using the strategies you've learned. +Take this HTML and rewrite it to be as accessible as possible, given the strategies you learned. ```html - + - - Example - + + + Turtle Ipsum - The World's Premier Turtle Fan Club - - -
-
-

Welcome to Turtle Ipsum. - Click here to learn more. + + +

+ +
+
+

Welcome to Turtle Ipsum

+

+ Learn more about our turtle community and discover fascinating facts about these amazing creatures.

- Turtle ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum -

-
-
- + + + +
+ + + + + +
``` +**Key improvements made:** +- Added proper semantic HTML structure +- Fixed heading hierarchy (single h1, logical progression) +- Added meaningful link text instead of "click here" +- Included proper ARIA labels for navigation +- Added lang attribute and proper meta tags +- Used button element for interactive elements +- Structured footer content with proper landmarks + ## Post-Lecture Quiz [Post-lecture quiz](https://ff-quizzes.netlify.app/web/en/) ## Review & Self Study -Many governments have laws related to accessibility requirements. Research the accessibility laws in your country. What aspects are included, and what are not? An example is [this government website](https://accessibility.blog.gov.uk/). -## Assignment +Many governments have laws regarding accessibility requirements. Read up on your home country's accessibility laws. What is covered, and what isn't? An example is [this government web site](https://accessibility.blog.gov.uk/). -[Analyze a non-accessible website](assignment.md) +## Assignment + +[Analyze a non-accessible web site](assignment.md) Credits: [Turtle Ipsum](https://github.com/Instrument/semantic-html-sample) by Instrument --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +## 🚀 Your Accessibility Mastery Timeline + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Install axe DevTools extension in your browser +- [ ] Run a Lighthouse accessibility audit on your favorite website +- [ ] Try navigating any website using only the Tab key +- [ ] Test your browser's built-in screen reader (Narrator/VoiceOver) + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and reflect on accessibility insights +- [ ] Practice writing meaningful alt text for 10 different images +- [ ] Audit a website's heading structure using HeadingsMap extension +- [ ] Fix accessibility issues found in the challenge HTML +- [ ] Test color contrast on your current project with WebAIM's tool + +### 📅 **Your Week-Long Accessibility Journey** +- [ ] Complete the assignment analyzing a non-accessible website +- [ ] Set up your development environment with accessibility testing tools +- [ ] Practice keyboard navigation on 5 different complex websites +- [ ] Build a simple form with proper labels, error handling, and ARIA +- [ ] Join an accessibility community (A11y Slack, WebAIM forum) +- [ ] Watch real users with disabilities navigate websites (YouTube has great examples) + +### 🌟 **Your Month-Long Transformation** +- [ ] Integrate accessibility testing into your development workflow +- [ ] Contribute to an open source project by fixing accessibility issues +- [ ] Conduct usability testing with someone who uses assistive technology +- [ ] Build an accessible component library for your team +- [ ] Advocate for accessibility in your workplace or community +- [ ] Mentor someone new to accessibility concepts + +### 🏆 **Final Accessibility Champion Check-in** + +**Celebrate your accessibility journey:** +- What's the most surprising thing you learned about how people use the web? +- Which accessibility principle resonates most with your development style? +- How has learning about accessibility changed your perspective on design? +- What's the first accessibility improvement you want to make on a real project? + +```mermaid +journey + title Your Accessibility Confidence Evolution + section Today + Overwhelmed: 3: You + Curious: 4: You + Motivated: 5: You + section This Week + Practicing: 4: You + Testing: 5: You + Understanding: 5: You + section Next Month + Advocating: 5: You + Leading: 5: You + Inclusive by Default: 5: You +``` +> 🌍 **You're now an accessibility champion!** You understand that great web experiences work for everyone, regardless of how they access the web. Every accessible feature you build makes the internet more inclusive. The web needs developers like you who see accessibility not as a constraint, but as an opportunity to create better experiences for all users. Welcome to the movement! 🎉 + +--- + + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/1-getting-started-lessons/3-accessibility/assignment.md b/translations/en/1-getting-started-lessons/3-accessibility/assignment.md index 7287a3a2a..100014acb 100644 --- a/translations/en/1-getting-started-lessons/3-accessibility/assignment.md +++ b/translations/en/1-getting-started-lessons/3-accessibility/assignment.md @@ -1,29 +1,252 @@ - -# Analyze an inaccessible site +# Comprehensive Website Accessibility Audit ## Instructions -Identify a website that you believe is NOT accessible and create an action plan to enhance its accessibility. -Your first step is to identify this site, describe the ways in which you think it is inaccessible without using analytical tools, and then run a Lighthouse analysis on it. Save a PDF of the analysis results and create a detailed plan with at least ten points explaining how the site can be improved. +In this assignment, you'll conduct a professional-level accessibility audit of a real website, applying the principles and techniques you've learned. This hands-on experience will deepen your understanding of accessibility barriers and solutions. -## Table to test site accessibility +Choose a website that appears to have accessibility issues—this gives you more learning opportunities than analyzing an already-perfect site. Good candidates include older websites, complex web applications, or sites with rich multimedia content. -| Criteria | Exemplary | Adequate | Needs Improvement | -|----------|-----------|----------|-------------------| -| | missing <10% of what is required | missing 20% of what is required | missing 50% of what is required | +### Phase 1: Strategic manual evaluation ----- -Student Report: includes paragraphs describing how inaccessible the site is, the Lighthouse report saved as a PDF, a list of ten improvement points, and detailed explanations on how to implement them. +Before reaching for automated tools, perform a comprehensive manual assessment. This human-centered approach often reveals issues that tools miss and helps you understand the real user experience. + +**🔍 Essential evaluation criteria:** + +**Navigation and Structure:** +- Can you navigate the entire site using only keyboard (Tab, Shift+Tab, Enter, Space, Arrow keys)? +- Are focus indicators clearly visible on all interactive elements? +- Does the heading structure (H1-H6) create a logical content outline? +- Are there skip links to jump to main content? + +**Visual Accessibility:** +- Is there sufficient color contrast throughout the site (minimum 4.5:1 for normal text)? +- Does the site rely solely on color to convey important information? +- Do all images have appropriate alternative text? +- Does the layout remain functional when zoomed to 200%? + +**Content and Communication:** +- Are there any "click here" or ambiguous link texts? +- Can you understand the content and functionality without visual cues? +- Are form fields properly labeled and grouped? +- Are error messages clear and helpful? + +**Interactive Elements:** +- Do all buttons and form controls work with keyboard alone? +- Are dynamic content changes announced to screen readers? +- Do modal dialogs and complex widgets follow proper accessibility patterns? + +📝 **Document your findings** with specific examples, screenshots, and page URLs. Note both issues and things done well. + +### Phase 2: Comprehensive automated testing + +Now validate and expand your manual findings using industry-standard accessibility testing tools. Each tool has different strengths, so using multiple tools gives you complete coverage. + +**🛠️ Required testing tools:** + +1. **Lighthouse Accessibility Audit** (built into Chrome/Edge DevTools) + - Run audit on multiple pages + - Focus on specific metrics and recommendations + - Note your accessibility score and specific violations + +2. **axe DevTools** (browser extension - industry standard) + - More detailed issue detection than Lighthouse + - Provides specific code examples for fixes + - Tests against WCAG 2.1 criteria + +3. **WAVE Web Accessibility Evaluator** (browser extension) + - Visual representation of accessibility features + - Highlights both errors and positive features + - Great for understanding page structure + +4. **Color Contrast Analyzers** + - WebAIM Contrast Checker for specific color pairs + - Browser extensions for page-wide analysis + - Test against both WCAG AA and AAA standards + +**🎧 Real assistive technology testing:** +- **Screen reader testing**: Use NVDA (Windows), VoiceOver (Mac), or TalkBack (Android) +- **Keyboard-only navigation**: Unplug your mouse and navigate the entire site +- **Zoom testing**: Test functionality at 200% and 400% zoom levels +- **Voice control testing**: If available, try voice navigation tools + +**📊 Organize your results** by creating a master spreadsheet with: +- Issue description and location +- Severity level (Critical/High/Medium/Low) +- WCAG success criteria violated +- Tool that detected the issue +- Screenshots and evidence + +### Phase 3: Comprehensive findings documentation + +Create a professional accessibility audit report that demonstrates your understanding of both technical issues and their human impact. + +**📋 Required report sections:** + +1. **Executive Summary** (1 page) + - Website URL and brief description + - Overall accessibility maturity level + - Top 3 most critical issues + - Estimated impact on users with disabilities + +2. **Methodology** (½ page) + - Testing approach and tools used + - Pages evaluated and device/browser combinations + - Standards evaluated against (WCAG 2.1 AA) + +3. **Detailed Findings** (2-3 pages) + - Issues categorized by WCAG principle (Perceivable, Operable, Understandable, Robust) + - Include screenshots and specific examples + - Note positive accessibility features you found + - Cross-reference with automated tool results + +4. **User Impact Assessment** (1 page) + - How identified issues affect users with different disabilities + - Scenarios describing real user experiences + - Business impact (legal risk, SEO, user base expansion) + +**📸 Evidence collection:** +- Screenshots of accessibility violations +- Screen recordings of problematic user flows +- Tool reports (save as PDFs) +- Code examples showing issues + +### Phase 4: Professional remediation plan + +Develop a strategic, prioritized plan for fixing accessibility issues. This demonstrates your ability to think like a professional web developer addressing real business constraints. + +**🎯 Create detailed improvement recommendations (minimum 10 issues):** + +**For each identified issue, provide:** + +- **Issue Description**: Clear explanation of what's wrong and why it's problematic +- **WCAG Reference**: Specific success criteria violated (e.g., "2.4.4 Link Purpose (In Context) - Level A") +- **User Impact**: How this affects people with different disabilities +- **Solution**: Specific code changes, design modifications, or process improvements +- **Priority Level**: Critical (blocks basic usage) / High (significant barrier) / Medium (usability issue) / Low (enhancement) +- **Implementation Effort**: Time/complexity estimate (Quick win / Moderate effort / Major refactor) +- **Testing Verification**: How to verify the fix works + +**Example improvement entry:** + +``` +Issue: Generic "Read more" link text appears 8 times on homepage +WCAG Reference: 2.4.4 Link Purpose (In Context) - Level A +User Impact: Screen reader users cannot distinguish between links when viewed in link list +Solution: Replace with descriptive text like "Read more about sustainability initiatives" +Priority: High (major navigation barrier) +Effort: Low (30 minutes to update content) +Testing: Generate link list with screen reader - each link should be meaningful standalone +``` + +**📈 Strategic implementation phases:** + +- **Phase 1 (0-2 weeks)**: Critical issues that block basic functionality +- **Phase 2 (1-2 months)**: High-priority improvements for better user experience +- **Phase 3 (3-6 months)**: Medium-priority enhancements and process improvements +- **Phase 4 (Ongoing)**: Continuous monitoring and enhancement + +## Evaluation Rubric + +Your accessibility audit will be assessed on both technical accuracy and professional presentation: + +| Criteria | Excellent (90-100%) | Good (80-89%) | Satisfactory (70-79%) | Needs Improvement (<70%) | +|----------|-------------------|---------------|---------------------|------------------------| +| **Manual Testing Depth** | Comprehensive evaluation covering all POUR principles with detailed observations and user scenarios | Good coverage of most accessibility areas with clear findings and some user impact analysis | Basic evaluation covering key areas with adequate observations | Limited testing with superficial observations and minimal user impact consideration | +| **Tool Utilization & Analysis** | Uses all required tools effectively, cross-references findings, includes clear evidence, and analyzes tool limitations | Uses most tools with good documentation, some cross-referencing, and adequate evidence | Uses required tools with basic documentation and some evidence | Minimal tool usage, poor documentation, or missing evidence | +| **Issue Identification & Categorization** | Identifies 15+ specific issues across all WCAG principles, accurately categorizes by severity, demonstrates deep understanding | Identifies 10-14 issues across most WCAG principles, good categorization, shows solid understanding | Identifies 7-9 issues with adequate WCAG coverage and basic categorization | Identifies <7 issues with limited scope or poor categorization | +| **Solution Quality & Feasibility** | 10+ detailed, actionable solutions with accurate WCAG references, realistic implementation timelines, and verification methods | 8-9 well-developed solutions with mostly accurate references and good implementation details | 6-7 basic solutions with some detail and generally realistic approaches | <6 solutions or insufficient detail, unrealistic implementations | +| **Professional Communication** | Report is excellently organized, clearly written, includes executive summary, uses appropriate technical language, and follows business document standards | Well-organized with good writing quality, includes most required sections, appropriate tone | Adequately organized with acceptable writing, includes basic required sections | Poor organization, unclear writing, or missing key sections | +| **Real-World Application** | Demonstrates understanding of business impact, legal considerations, user diversity, and practical implementation challenges | Shows good understanding of practical applications with some business context | Basic understanding of real-world applications | Limited connection to practical applications | + +## Advanced Challenge Options + +**🚀 For students seeking additional challenge:** + +- **Comparative Analysis**: Audit 2-3 competing websites and compare their accessibility maturity +- **Mobile Accessibility Focus**: Deep dive into mobile-specific accessibility issues using Android TalkBack or iOS VoiceOver +- **International Perspective**: Research and apply accessibility standards from different countries (EN 301 549, Section 508, ADA) +- **Accessibility Statement Review**: Evaluate the website's existing accessibility statement (if any) against your findings + +## Deliverables + +Submit a comprehensive accessibility audit report that demonstrates professional-level analysis and practical implementation planning: + +**📄 Final Report Requirements:** + +1. **Executive Summary** (1 page) + - Website overview and accessibility maturity assessment + - Key findings summary with business impact + - Recommended priority actions + +2. **Methodology and Scope** (1 page) + - Testing approach, tools used, and evaluation criteria + - Pages/sections evaluated and any limitations + - Standards compliance framework (WCAG 2.1 AA) + +3. **Detailed Findings Report** (3-4 pages) + - Manual testing observations with user scenarios + - Automated tool results with cross-referencing + - Issues organized by WCAG principles with evidence + - Positive accessibility features identified + +4. **Strategic Remediation Plan** (3-4 pages) + - Prioritized improvement recommendations (minimum 10) + - Implementation timeline with effort estimates + - Success metrics and verification methods + - Long-term accessibility maintenance strategy + +5. **Supporting Evidence** (Appendices) + - Screenshots of accessibility violations and testing tools + - Code examples demonstrating issues and solutions + - Tool reports and audit summaries + - Screen reader testing notes or recordings + +**📊 Format Requirements:** +- **Document format**: PDF (professional presentation) +- **Word count**: 2,500-3,500 words (excluding appendices and screenshots) +- **Visual elements**: Include screenshots, diagrams, and examples throughout +- **Citations**: Reference WCAG guidelines and accessibility resources appropriately + +**💡 Pro Tips for Excellence:** +- Use professional report formatting with consistent headings and styling +- Include a table of contents for easy navigation +- Balance technical accuracy with clear, business-appropriate language +- Demonstrate understanding of both technical implementation and user impact + +## Learning Outcomes + +After completing this comprehensive accessibility audit, you will have developed essential professional skills: + +**🎯 Technical Competencies:** +- **Accessibility Testing Mastery**: Proficiency with industry-standard manual and automated testing methods +- **WCAG Application**: Practical experience applying Web Content Accessibility Guidelines to real-world scenarios +- **Assistive Technology Understanding**: Hands-on experience with screen readers and keyboard navigation +- **Problem-Solution Mapping**: Ability to identify accessibility barriers and develop specific, actionable remediation strategies + +**💼 Professional Skills:** +- **Technical Communication**: Experience writing professional accessibility reports for diverse stakeholders +- **Strategic Planning**: Ability to prioritize accessibility improvements based on user impact and implementation feasibility +- **Quality Assurance**: Understanding of accessibility testing as part of the development lifecycle +- **Risk Assessment**: Appreciation for legal, business, and ethical implications of accessibility compliance + +**🌍 Inclusive Design Mindset:** +- **User Empathy**: Deep understanding of diverse user needs and assistive technology interactions +- **Universal Design Principles**: Recognition that accessible design benefits all users, not just those with disabilities +- **Continuous Improvement**: Framework for ongoing accessibility assessment and enhancement +- **Advocacy Skills**: Confidence to promote accessibility best practices in future projects and teams + +**🚀 Career Preparation:** +This assignment mirrors real-world accessibility consulting projects, giving you portfolio-worthy experience that demonstrates: +- Systematic problem-solving approach +- Attention to both technical details and business impact +- Clear communication of complex technical concepts +- Understanding of legal and ethical responsibilities in web development + +Upon completion, you'll be prepared to contribute meaningfully to accessibility initiatives in any web development role and advocate for inclusive design practices throughout your career. --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/1-getting-started-lessons/README.md b/translations/en/1-getting-started-lessons/README.md index bfbac11b1..e3651e012 100644 --- a/translations/en/1-getting-started-lessons/README.md +++ b/translations/en/1-getting-started-lessons/README.md @@ -1,12 +1,3 @@ - # Getting Started with Web Development In this section of the curriculum, you will learn about non-project-based concepts that are essential for becoming a professional developer. diff --git a/translations/en/10-ai-framework-project/README.md b/translations/en/10-ai-framework-project/README.md index 076a6c498..69c4a53fd 100644 --- a/translations/en/10-ai-framework-project/README.md +++ b/translations/en/10-ai-framework-project/README.md @@ -1,41 +1,178 @@ - # AI Framework -There are many AI frameworks available that can significantly speed up the process of building a project. In this project, we will focus on understanding the problems these frameworks address and create such a project ourselves. +Ever felt overwhelmed trying to build AI applications from scratch? You're not alone! AI frameworks are like having a Swiss Army knife for AI development - they're powerful tools that can save you time and headaches when building intelligent applications. Think of an AI framework as a well-organized library: it provides pre-built components, standardized APIs, and smart abstractions so you can focus on solving problems instead of wrestling with implementation details. + +In this lesson, we'll explore how frameworks like LangChain can turn what used to be complex AI integration tasks into clean, readable code. You'll discover how to tackle real-world challenges like keeping track of conversations, implementing tool calling, and juggling different AI models through one unified interface. + +By the time we're done, you'll know when to reach for frameworks instead of raw API calls, how to use their abstractions effectively, and how to build AI applications that are ready for real-world use. Let's explore what AI frameworks can do for your projects. + +## ⚡ What You Can Do in the Next 5 Minutes + +**Quick Start Pathway for Busy Developers** -## Why use a framework +```mermaid +flowchart LR + A[⚡ 5 minutes] --> B[Install LangChain] + B --> C[Create ChatOpenAI client] + C --> D[Send first prompt] + D --> E[See framework power] +``` +- **Minute 1**: Install LangChain: `pip install langchain langchain-openai` +- **Minute 2**: Set up your GitHub token and import the ChatOpenAI client +- **Minute 3**: Create a simple conversation with system and human messages +- **Minute 4**: Add a basic tool (like an add function) and see AI tool calling +- **Minute 5**: Experience the difference between raw API calls and framework abstraction + +**Quick Test Code**: +```python +from langchain_openai import ChatOpenAI +from langchain_core.messages import SystemMessage, HumanMessage + +llm = ChatOpenAI( + api_key=os.environ["GITHUB_TOKEN"], + base_url="https://models.github.ai/inference", + model="openai/gpt-4o-mini" +) + +response = llm.invoke([ + SystemMessage(content="You are a helpful coding assistant"), + HumanMessage(content="Explain Python functions briefly") +]) +print(response.content) +``` -When working with AI, there are different approaches and reasons for choosing them. Here are some: +**Why This Matters**: In 5 minutes, you'll experience how AI frameworks transform complex AI integration into simple method calls. This is the foundation that powers production AI applications. -- **No SDK**: Most AI models allow you to interact directly with the model, for example, via HTTP requests. This approach works and may sometimes be your only option if an SDK is unavailable. -- **SDK**: Using an SDK is usually the recommended approach as it requires less code to interact with your model. However, it is often limited to a specific model, and if you use different models, you might need to write new code to support those additional models. -- **A framework**: A framework typically takes things to the next level by providing a unified API for interacting with different models, with differences usually limited to the initial setup. Frameworks also offer useful abstractions, such as tools, memory, workflows, agents, and more, while requiring less code. Because frameworks are often opinionated, they can be very helpful if you align with their approach, but they may fall short if you need to implement something custom that the framework isn't designed for. Additionally, frameworks can sometimes oversimplify things, which might prevent you from learning important concepts that could later impact performance. +## Why choose a framework? -In general, use the right tool for the job. +So you're ready to build an AI app - awesome! But here's the thing: you've got several different paths you can take, and each one has its own pros and cons. It's kind of like choosing between walking, biking, or driving to get somewhere - they'll all get you there, but the experience (and effort) will be totally different. + +Let's break down the three main ways you can integrate AI into your projects: + +| Approach | Advantages | Best For | Considerations | +|----------|------------|----------|--------------| +| **Direct HTTP Requests** | Full control, no dependencies | Simple queries, learning fundamentals | More verbose code, manual error handling | +| **SDK Integration** | Less boilerplate, model-specific optimization | Single-model applications | Limited to specific providers | +| **AI Frameworks** | Unified API, built-in abstractions | Multi-model apps, complex workflows | Learning curve, potential over-abstraction | + +### Framework Benefits in Practice + +```mermaid +graph TD + A[Your Application] --> B[AI Framework] + B --> C[OpenAI GPT] + B --> D[Anthropic Claude] + B --> E[GitHub Models] + B --> F[Local Models] + + B --> G[Built-in Tools] + G --> H[Memory Management] + G --> I[Conversation History] + G --> J[Function Calling] + G --> K[Error Handling] +``` +**Why frameworks matter:** +- **Unifies** multiple AI providers under one interface +- **Handles** conversation memory automatically +- **Provides** ready-made tools for common tasks like embeddings and function calling +- **Manages** error handling and retry logic +- **Turns** complex workflows into readable method calls + +> 💡 **Pro Tip**: Use frameworks when switching between different AI models or building complex features like agents, memory, or tool calling. Stick with direct APIs when learning the basics or building simple, focused applications. + +**Bottom line**: Like choosing between a craftsman's specialized tools and a complete workshop, it's about matching the tool to the task. Frameworks excel for complex, feature-rich applications, while direct APIs work well for straightforward use cases. + +## 🗺️ Your Learning Journey Through AI Framework Mastery + +```mermaid +journey + title From Raw APIs to Production AI Applications + section Framework Foundations + Understand abstraction benefits: 4: You + Master LangChain basics: 6: You + Compare approaches: 7: You + section Conversation Systems + Build chat interfaces: 5: You + Implement memory patterns: 7: You + Handle streaming responses: 8: You + section Advanced Features + Create custom tools: 6: You + Master structured output: 8: You + Build document systems: 8: You + section Production Applications + Combine all features: 7: You + Handle error scenarios: 8: You + Deploy complete systems: 9: You +``` +**Your Journey Destination**: By the end of this lesson, you'll have mastered AI framework development and be able to build sophisticated, production-ready AI applications that rival commercial AI assistants. ## Introduction In this lesson, we'll learn to: - Use a common AI framework. -- Address common challenges like chat conversations, tool usage, memory, and context. -- Leverage these capabilities to build AI applications. +- Address common problems like chat conversations, tool usage, memory and context. +- Leverage this to build AI apps. + +## 🧠 AI Framework Development Ecosystem + +```mermaid +mindmap + root((AI Frameworks)) + Abstraction Benefits + Code Simplification + Unified APIs + Built-in Error Handling + Consistent Patterns + Reduced Boilerplate + Multi-Model Support + Provider Agnostic + Easy Switching + Fallback Options + Cost Optimization + Core Components + Conversation Management + Message Types + Memory Systems + Context Tracking + History Persistence + Tool Integration + Function Calling + API Connections + Custom Tools + Workflow Automation + Advanced Features + Structured Output + Pydantic Models + JSON Schemas + Type Safety + Validation Rules + Document Processing + Embeddings + Vector Stores + Similarity Search + RAG Systems + Production Patterns + Application Architecture + Modular Design + Error Boundaries + Async Operations + State Management + Deployment Strategies + Scalability + Monitoring + Performance + Security +``` +**Core Principle**: AI frameworks abstract complexity while providing powerful abstractions for conversation management, tool integration, and document processing, enabling developers to build sophisticated AI applications with clean, maintainable code. -## First prompt +## Your first AI prompt -In our first app example, we'll learn how to connect to an AI model and query it using a prompt. +Let's start with the fundamentals by creating your first AI application that sends a question and gets an answer back. Like Archimedes discovering the principle of displacement in his bath, sometimes the simplest observations lead to the most powerful insights - and frameworks make these insights accessible. -### Using Python +### Setting up LangChain with GitHub Models -For this example, we'll use Langchain to connect to GitHub Models. We can use a class called `ChatOpenAI` and provide it with the fields `api_key`, `base_url`, and `model`. The token is automatically populated within GitHub Codespaces, but if you're running the app locally, you'll need to set up a personal access token for this to work. +We're going to use LangChain to connect to GitHub Models, which is pretty sweet because it gives you free access to various AI models. The best part? You only need a few simple configuration parameters to get started: ```python from langchain_openai import ChatOpenAI @@ -47,32 +184,58 @@ llm = ChatOpenAI( model="openai/gpt-4o-mini", ) -# works -response = llm.invoke("What's the capital of France?") +# Send a simple prompt +response = llm.invoke("What's the capital of France?") print(response.content) ``` -In this code, we: - -- Call `ChatOpenAI` to create a client. -- Use `llm.invoke` with a prompt to generate a response. -- Print the response using `print(response.content)`. +**Let's break down what's happening here:** +- **Creates** a LangChain client using the `ChatOpenAI` class - this is your gateway to AI! +- **Configures** the connection to GitHub Models with your authentication token +- **Specifies** which AI model to use (`gpt-4o-mini`) - think of this as choosing your AI assistant +- **Sends** your question using the `invoke()` method - this is where the magic happens +- **Extracts** and displays the response - and voilà, you're chatting with AI! -You should see a response similar to: +> 🔧 **Setup Note**: If you're using GitHub Codespaces, you're in luck - the `GITHUB_TOKEN` is already set up for you! Working locally? No worries, you'll just need to create a personal access token with the right permissions. +**Expected output:** ```text The capital of France is Paris. ``` -## Chat conversation +```mermaid +sequenceDiagram + participant App as Your Python App + participant LC as LangChain + participant GM as GitHub Models + participant AI as GPT-4o-mini + + App->>LC: llm.invoke("What's the capital of France?") + LC->>GM: HTTP request with prompt + GM->>AI: Process prompt + AI->>GM: Generated response + GM->>LC: Return response + LC->>App: response.content +``` +## Building conversational AI -In the previous section, we used what's commonly known as zero-shot prompting—a single prompt followed by a response. +That first example demonstrates the basics, but it's just a single exchange - you ask a question, get an answer, and that's it. In real applications, you want your AI to remember what you've been discussing, like how Watson and Holmes built their investigative conversations over time. -However, you may often find yourself in situations where you need to maintain a conversation involving multiple exchanges between you and the AI assistant. +This is where LangChain becomes particularly useful. It provides different message types that help structure conversations and let you give your AI a personality. You'll be building chat experiences that maintain context and character. -### Using Python +### Understanding message types -In Langchain, we can store the conversation in a list. The `HumanMessage` represents a message from the user, and `SystemMessage` is a message meant to set the "personality" of the AI. In the example below, we instruct the AI to take on the personality of Captain Picard, and the user asks, "Tell me about you" as the prompt. +Think of these message types as different "hats" that participants wear in a conversation. LangChain uses different message classes to keep track of who's saying what: + +| Message Type | Purpose | Example Use Case | +|--------------|---------|------------------| +| `SystemMessage` | Defines AI personality and behavior | "You are a helpful coding assistant" | +| `HumanMessage` | Represents user input | "Explain how functions work" | +| `AIMessage` | Stores AI responses | Previous AI responses in conversation | + +### Creating your first conversation + +Let's create a conversation where our AI assumes a specific role. We'll have it embody Captain Picard - a character known for his diplomatic wisdom and leadership: ```python messages = [ @@ -81,7 +244,12 @@ messages = [ ] ``` -The full code for this example looks like this: +**Breaking down this conversation setup:** +- **Establishes** the AI's role and personality through `SystemMessage` +- **Provides** the initial user query via `HumanMessage` +- **Creates** a foundation for multi-turn conversation + +The full code for this example looks like so: ```python from langchain_core.messages import HumanMessage, SystemMessage @@ -105,7 +273,7 @@ response = llm.invoke(messages) print(response.content) ``` -You should see an output similar to: +You should see an outcome similar to: ```text I am Captain Jean-Luc Picard, the commanding officer of the USS Enterprise (NCC-1701-D), a starship in the United Federation of Planets. My primary mission is to explore new worlds, seek out new life and new civilizations, and boldly go where no one has gone before. @@ -115,7 +283,7 @@ I believe in the importance of diplomacy, reason, and the pursuit of knowledge. I hold the ideals of the Federation close to my heart, believing in the importance of cooperation, understanding, and respect for all sentient beings. My experiences have shaped my leadership style, and I strive to be a thoughtful and just captain. How may I assist you further? ``` -To maintain the state of the conversation, you can add the response from the chat so the conversation is remembered. Here's how to do that: +To maintain conversation continuity (instead of resetting context each time), you need to keep adding responses to your message list. Like the oral traditions that preserved stories across generations, this approach builds lasting memory: ```python from langchain_core.messages import HumanMessage, SystemMessage @@ -150,9 +318,9 @@ print(response.content) ``` -From the above conversation, we can see how the LLM is invoked twice—first with a conversation consisting of just two messages, and then a second time with additional messages added to the conversation. +Pretty neat, right? What's happening here is that we're calling the LLM twice - first with just our initial two messages, but then again with the full conversation history. It's like the AI is actually following along with our chat! -If you run this, you'll see the second response being something like: +When you run this code, you'll get a second response that sounds something like: ```text Welcome aboard, Chris! It's always a pleasure to meet those who share a passion for exploration and discovery. While I cannot formally offer you a position on the Enterprise right now, I encourage you to pursue your aspirations. We are always in need of talented individuals with diverse skills and backgrounds. @@ -160,27 +328,165 @@ Welcome aboard, Chris! It's always a pleasure to meet those who share a passion If you are interested in space exploration, consider education and training in the sciences, engineering, or diplomacy. The values of curiosity, resilience, and teamwork are crucial in Starfleet. Should you ever find yourself on a starship, remember to uphold the principles of the Federation: peace, understanding, and respect for all beings. Your journey can lead you to remarkable adventures, whether in the stars or on the ground. Engage! ``` +```mermaid +sequenceDiagram + participant User + participant App + participant LangChain + participant AI + + User->>App: "Tell me about you" + App->>LangChain: [SystemMessage, HumanMessage] + LangChain->>AI: Formatted conversation + AI->>LangChain: Captain Picard response + LangChain->>App: AIMessage object + App->>User: Display response + + Note over App: Add AIMessage to conversation + + User->>App: "Can I join your crew?" + App->>LangChain: [SystemMessage, HumanMessage, AIMessage, HumanMessage] + LangChain->>AI: Full conversation context + AI->>LangChain: Contextual response + LangChain->>App: New AIMessage + App->>User: Display contextual response +``` I'll take that as a maybe ;) ## Streaming responses -TODO +Ever notice how ChatGPT seems to "type" its responses in real-time? That's streaming in action. Like watching a skilled calligrapher work - seeing the characters appear stroke by stroke rather than materializing instantly - streaming makes the interaction feel more natural and provides immediate feedback. + +### Implementing streaming with LangChain + +```python +from langchain_openai import ChatOpenAI +import os + +llm = ChatOpenAI( + api_key=os.environ["GITHUB_TOKEN"], + base_url="https://models.github.ai/inference", + model="openai/gpt-4o-mini", + streaming=True +) + +# Stream the response +for chunk in llm.stream("Write a short story about a robot learning to code"): + print(chunk.content, end="", flush=True) +``` + +**Why streaming is awesome:** +- **Shows** content as it's being created - no more awkward waiting! +- **Makes** users feel like something's actually happening +- **Feels** faster, even when it technically isn't +- **Lets** users start reading while the AI is still "thinking" + +> 💡 **User Experience Tip**: Streaming really shines when you're dealing with longer responses like code explanations, creative writing, or detailed tutorials. Your users will love seeing progress instead of staring at a blank screen! + +### 🎯 Pedagogical Check-in: Framework Abstraction Benefits + +**Pause and Reflect**: You've just experienced the power of AI framework abstractions. Compare what you've learned to raw API calls from previous lessons. + +**Quick Self-Assessment**: +- Can you explain how LangChain simplifies conversation management compared to manual message tracking? +- What's the difference between `invoke()` and `stream()` methods, and when would you use each? +- How does the framework's message type system improve code organization? + +**Real-World Connection**: The abstraction patterns you've learned (message types, streaming interfaces, conversation memory) are used in every major AI application - from ChatGPT's interface to GitHub Copilot's code assistance. You're mastering the same architectural patterns used by professional AI development teams. + +**Challenge Question**: How would you design a framework abstraction for handling different AI model providers (OpenAI, Anthropic, Google) with a single interface? Consider the benefits and trade-offs. ## Prompt templates -TODO +Prompt templates work like the rhetorical structures used in classical oratory - think of how Cicero would adapt his speech patterns for different audiences while maintaining the same persuasive framework. They let you create reusable prompts where you can swap out different pieces of information without rewriting everything from scratch. Once you set up the template, you just fill in the variables with whatever values you need. + +### Creating reusable prompts + +```python +from langchain_core.prompts import ChatPromptTemplate + +# Define a template for code explanations +template = ChatPromptTemplate.from_messages([ + ("system", "You are an expert programming instructor. Explain concepts clearly with examples."), + ("human", "Explain {concept} in {language} with a practical example for {skill_level} developers") +]) + +# Use the template with different values +questions = [ + {"concept": "functions", "language": "JavaScript", "skill_level": "beginner"}, + {"concept": "classes", "language": "Python", "skill_level": "intermediate"}, + {"concept": "async/await", "language": "JavaScript", "skill_level": "advanced"} +] + +for question in questions: + prompt = template.format_messages(**question) + response = llm.invoke(prompt) + print(f"Topic: {question['concept']}\n{response.content}\n---\n") +``` + +**Why you'll love using templates:** +- **Keeps** your prompts consistent across your entire app +- **No more** messy string concatenation - just clean, simple variables +- **Your AI** behaves predictably because the structure stays the same +- **Updates** are a breeze - change the template once, and it's fixed everywhere ## Structured output -TODO +Ever get frustrated trying to parse AI responses that come back as unstructured text? Structured output is like teaching your AI to follow the systematic approach that Linnaeus used for biological classification - organized, predictable, and easy to work with. You can request JSON, specific data structures, or any format you need. + +### Defining output schemas + +```python +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.output_parsers import JsonOutputParser +from pydantic import BaseModel, Field + +class CodeReview(BaseModel): + score: int = Field(description="Code quality score from 1-10") + strengths: list[str] = Field(description="List of code strengths") + improvements: list[str] = Field(description="List of suggested improvements") + overall_feedback: str = Field(description="Summary feedback") + +# Set up the parser +parser = JsonOutputParser(pydantic_object=CodeReview) + +# Create prompt with format instructions +prompt = ChatPromptTemplate.from_messages([ + ("system", "You are a code reviewer. {format_instructions}"), + ("human", "Review this code: {code}") +]) + +# Format the prompt with instructions +chain = prompt | llm | parser + +# Get structured response +code_sample = """ +def calculate_average(numbers): + return sum(numbers) / len(numbers) +""" + +result = chain.invoke({ + "code": code_sample, + "format_instructions": parser.get_format_instructions() +}) + +print(f"Score: {result['score']}") +print(f"Strengths: {', '.join(result['strengths'])}") +``` + +**Why structured output is a game-changer:** +- **No more** guessing what format you'll get back - it's consistent every time +- **Plugs** directly into your databases and APIs without extra work +- **Catches** weird AI responses before they break your app +- **Makes** your code cleaner because you know exactly what you're working with ## Tool calling -Tools allow us to give the LLM additional capabilities. The idea is to inform the LLM about available functions, and if a prompt matches the description of one of these tools, the tool is invoked. +Now we reach one of the most powerful features: tools. This is how you give your AI practical capabilities beyond conversation. Like how medieval guilds developed specialized tools for specific crafts, you can equip your AI with focused instruments. You describe what tools are available, and when someone requests something that matches, your AI can take action. ### Using Python -Let's add some tools like this: +Let's add some tools like so: ```python from typing_extensions import Annotated, TypedDict @@ -199,9 +505,9 @@ functions = { } ``` -Here, we create a description of a tool called `add`. By inheriting from `TypedDict` and adding members like `a` and `b` of type `Annotated`, this can be converted into a schema that the LLM can understand. The creation of functions is managed through a dictionary that ensures we know what to do if a specific tool is identified. +So what's happening here? We're creating a blueprint for a tool called `add`. By inheriting from `TypedDict` and using those fancy `Annotated` types for `a` and `b`, we're giving the LLM a clear picture of what this tool does and what it needs. The `functions` dictionary is like our toolbox - it tells our code exactly what to do when the AI decides to use a specific tool. -Next, let's see how we call the LLM with this tool: +Let's see how we call the LLM with this tool next: ```python llm = ChatOpenAI( @@ -213,9 +519,9 @@ llm = ChatOpenAI( llm_with_tools = llm.bind_tools(tools) ``` -Here, we use `bind_tools` with our `tools` array, enabling the LLM `llm_with_tools` to recognize this tool. +Here we call `bind_tools` with our `tools` array and thereby the LLM `llm_with_tools` now has knowledge of this tool. -To use this new LLM, we can write the following code: +To use this new LLM, we can type the following code: ```python query = "What is 3 + 12?" @@ -227,7 +533,7 @@ if(res.tool_calls): print("CONTENT: ",res.content) ``` -When we call `invoke` on this new LLM that has tools, the property `tool_calls` may be populated. If so, any identified tools will have a `name` and `args` property that specifies which tool should be called and with what arguments. The full code looks like this: +Now that we call `invoke` on this new llm, that has tools, we maybe the the property `tool_calls` populated. If so, any identified tools has a `name` and `args` property that identifies what tool should be called and with arguments. The full code looks like so: ```python from langchain_core.messages import HumanMessage, SystemMessage @@ -272,15 +578,14 @@ TOOL CALL: 15 CONTENT: ``` -This output indicates that the LLM interpreted the prompt "What is 3 + 12" as requiring the `add` tool, based on its name, description, and member field descriptions. The answer, 15, is derived from our code using the dictionary `functions` to invoke it: +The AI examined "What is 3 + 12" and recognized this as a task for the `add` tool. Like how a skilled librarian knows which reference to consult based on the type of question asked, it made this determination from the tool's name, description, and field specifications. The result of 15 comes from our `functions` dictionary executing the tool: ```python print("TOOL CALL: ", functions[tool["name"]](../../../10-ai-framework-project/**tool["args"])) ``` ### A more interesting tool that calls a web API - -While tools that add two numbers are useful for illustrating how tool calling works, tools often perform more complex tasks, such as calling a web API. Let's implement that with this code: +Adding numbers demonstrates the concept, but real tools typically perform more complex operations, like calling web APIs. Let's expand our example to have the AI fetch content from the internet - similar to how telegraph operators once connected distant locations: ```python class joke(TypedDict): @@ -305,14 +610,40 @@ query = "Tell me a joke about animals" # the rest of the code is the same ``` -Running this code will produce a response similar to: +Now if you run this code you will get a response saying something like: ```text TOOL CALL: Chuck Norris once rode a nine foot grizzly bear through an automatic car wash, instead of taking a shower. CONTENT: ``` -Here's the complete code: +```mermaid +flowchart TD + A[User Query: "Tell me a joke about animals"] --> B[LangChain Analysis] + B --> C{Tool Available?} + C -->|Yes| D[Select joke tool] + C -->|No| E[Generate direct response] + + D --> F[Extract Parameters] + F --> G[Call joke(category="animals")] + G --> H[API Request to chucknorris.io] + H --> I[Return joke content] + I --> J[Display to user] + + E --> K[AI-generated response] + K --> J + + subgraph "Tool Definition Layer" + L[TypedDict Schema] + M[Function Implementation] + N[Parameter Validation] + end + + D --> L + F --> N + G --> M +``` +Here's the code in its entirety: ```python from langchain_openai import ChatOpenAI @@ -364,25 +695,443 @@ if(res.tool_calls): print("CONTENT: ",res.content) ``` -## Embedding +## Embeddings and document processing -Vectorize content and compare using cosine similarity. +Embeddings represent one of the most elegant solutions in modern AI. Imagine if you could take any piece of text and convert it into numerical coordinates that capture its meaning. That's exactly what embeddings do - they transform text into points in multi-dimensional space where similar concepts cluster together. It's like having a coordinate system for ideas, reminiscent of how Mendeleev organized the periodic table by atomic properties. -https://python.langchain.com/docs/how_to/embed_text/ +### Creating and using embeddings + +```python +from langchain_openai import OpenAIEmbeddings +from langchain_community.vectorstores import FAISS +from langchain_community.document_loaders import TextLoader +from langchain.text_splitter import CharacterTextSplitter + +# Initialize embeddings +embeddings = OpenAIEmbeddings( + api_key=os.environ["GITHUB_TOKEN"], + base_url="https://models.github.ai/inference", + model="text-embedding-3-small" +) -### Document loaders +# Load and split documents +loader = TextLoader("documentation.txt") +documents = loader.load() + +text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0) +texts = text_splitter.split_documents(documents) + +# Create vector store +vectorstore = FAISS.from_documents(texts, embeddings) + +# Perform similarity search +query = "How do I handle user authentication?" +similar_docs = vectorstore.similarity_search(query, k=3) + +for doc in similar_docs: + print(f"Relevant content: {doc.page_content[:200]}...") +``` + +### Document loaders for various formats + +```python +from langchain_community.document_loaders import ( + PyPDFLoader, + CSVLoader, + JSONLoader, + WebBaseLoader +) + +# Load different document types +pdf_loader = PyPDFLoader("manual.pdf") +csv_loader = CSVLoader("data.csv") +json_loader = JSONLoader("config.json") +web_loader = WebBaseLoader("https://example.com/docs") + +# Process all documents +all_documents = [] +for loader in [pdf_loader, csv_loader, json_loader, web_loader]: + docs = loader.load() + all_documents.extend(docs) +``` + +**What you can do with embeddings:** +- **Build** search that actually understands what you mean, not just keyword matching +- **Create** AI that can answer questions about your documents +- **Make** recommendation systems that suggest truly relevant content +- **Automatically** organize and categorize your content + +```mermaid +flowchart LR + A[Documents] --> B[Text Splitter] + B --> C[Create Embeddings] + C --> D[Vector Store] + + E[User Query] --> F[Query Embedding] + F --> G[Similarity Search] + G --> D + D --> H[Relevant Documents] + H --> I[AI Response] + + subgraph "Vector Space" + J[Document A: [0.1, 0.8, 0.3...]] + K[Document B: [0.2, 0.7, 0.4...]] + L[Query: [0.15, 0.75, 0.35...]] + end + + C --> J + C --> K + F --> L + G --> J + G --> K +``` +## Building a complete AI application + +Now we'll integrate everything you've learned into a comprehensive application - a coding assistant that can answer questions, use tools, and maintain conversation memory. Like how the printing press combined existing technologies (movable type, ink, paper, and pressure) into something transformative, we'll combine our AI components into something practical and useful. + +### Complete application example + +```python +from langchain_openai import ChatOpenAI, OpenAIEmbeddings +from langchain_core.prompts import ChatPromptTemplate +from langchain_core.messages import HumanMessage, SystemMessage, AIMessage +from langchain_community.vectorstores import FAISS +from typing_extensions import Annotated, TypedDict +import os +import requests + +class CodingAssistant: + def __init__(self): + self.llm = ChatOpenAI( + api_key=os.environ["GITHUB_TOKEN"], + base_url="https://models.github.ai/inference", + model="openai/gpt-4o-mini" + ) + + self.conversation_history = [ + SystemMessage(content="""You are an expert coding assistant. + Help users learn programming concepts, debug code, and write better software. + Use tools when needed and maintain a helpful, encouraging tone.""") + ] + + # Define tools + self.setup_tools() + + def setup_tools(self): + class web_search(TypedDict): + """Search for programming documentation or examples.""" + query: Annotated[str, "Search query for programming help"] + + class code_formatter(TypedDict): + """Format and validate code snippets.""" + code: Annotated[str, "Code to format"] + language: Annotated[str, "Programming language"] + + self.tools = [web_search, code_formatter] + self.llm_with_tools = self.llm.bind_tools(self.tools) + + def chat(self, user_input: str): + # Add user message to conversation + self.conversation_history.append(HumanMessage(content=user_input)) + + # Get AI response + response = self.llm_with_tools.invoke(self.conversation_history) + + # Handle tool calls if any + if response.tool_calls: + for tool_call in response.tool_calls: + tool_result = self.execute_tool(tool_call) + print(f"🔧 Tool used: {tool_call['name']}") + print(f"📊 Result: {tool_result}") + + # Add AI response to conversation + self.conversation_history.append(response) + + return response.content + + def execute_tool(self, tool_call): + tool_name = tool_call['name'] + args = tool_call['args'] + + if tool_name == 'web_search': + return f"Found documentation for: {args['query']}" + elif tool_name == 'code_formatter': + return f"Formatted {args['language']} code: {args['code'][:50]}..." + + return "Tool execution completed" + +# Usage example +assistant = CodingAssistant() + +print("🤖 Coding Assistant Ready! Type 'quit' to exit.\n") + +while True: + user_input = input("You: ") + if user_input.lower() == 'quit': + break + + response = assistant.chat(user_input) + print(f"🤖 Assistant: {response}\n") +``` + +**Application architecture:** + +```mermaid +graph TD + A[User Input] --> B[Coding Assistant] + B --> C[Conversation Memory] + B --> D[Tool Detection] + B --> E[LLM Processing] + + D --> F[Web Search Tool] + D --> G[Code Formatter Tool] + + E --> H[Response Generation] + F --> H + G --> H + + H --> I[User Interface] + H --> C +``` +**Key features we've implemented:** +- **Remembers** your entire conversation for context continuity +- **Performs actions** through tool calling, not just conversation +- **Follows** predictable interaction patterns +- **Manages** error handling and complex workflows automatically -PDF and CSV +### 🎯 Pedagogical Check-in: Production AI Architecture -## Building an app +**Architecture Understanding**: You've built a complete AI application that combines conversation management, tool calling, and structured workflows. This represents production-level AI application development. -TODO +**Key Concepts Mastered**: +- **Class-Based Architecture**: Organized, maintainable AI application structure +- **Tool Integration**: Custom functionality beyond conversation +- **Memory Management**: Persistent conversation context +- **Error Handling**: Robust application behavior -## Assignment +**Industry Connection**: The architecture patterns you've implemented (conversation classes, tool systems, memory management) are the same patterns used in enterprise AI applications like Slack's AI assistant, GitHub Copilot, and Microsoft Copilot. You're building with professional-grade architectural thinking. + +**Reflection Question**: How would you extend this application to handle multiple users, persistent storage, or integration with external databases? Consider scalability and state management challenges. + +## Assignment: Build your own AI-powered study assistant + +**Objective**: Create an AI application that helps students learn programming concepts by providing explanations, code examples, and interactive quizzes. + +### Requirements + +**Core Features (Required):** +1. **Conversational Interface**: Implement a chat system that maintains context across multiple questions +2. **Educational Tools**: Create at least two tools that help with learning: + - Code explanation tool + - Concept quiz generator +3. **Personalized Learning**: Use system messages to adapt responses to different skill levels +4. **Response Formatting**: Implement structured output for quiz questions + +### Implementation Steps + +**Step 1: Setup your environment** +```bash +pip install langchain langchain-openai +``` + +**Step 2: Basic chat functionality** +- Create a `StudyAssistant` class +- Implement conversation memory +- Add personality configuration for educational support + +**Step 3: Add educational tools** +- **Code Explainer**: Breaks down code into understandable parts +- **Quiz Generator**: Creates questions about programming concepts +- **Progress Tracker**: Keeps track of topics covered + +**Step 4: Enhanced features (Optional)** +- Implement streaming responses for better user experience +- Add document loading to incorporate course materials +- Create embeddings for similarity-based content retrieval + +### Evaluation Criteria + +| Feature | Excellent (4) | Good (3) | Satisfactory (2) | Needs Work (1) | +|---------|---------------|----------|------------------|----------------| +| **Conversation Flow** | Natural, context-aware responses | Good context retention | Basic conversation | No memory between exchanges | +| **Tool Integration** | Multiple useful tools working seamlessly | 2+ tools implemented correctly | 1-2 basic tools | Tools not functional | +| **Code Quality** | Clean, well-documented, error handling | Good structure, some documentation | Basic functionality works | Poor structure, no error handling | +| **Educational Value** | Truly helpful for learning, adaptive | Good learning support | Basic explanations | Limited educational benefit | + +### Sample code structure + +```python +class StudyAssistant: + def __init__(self, skill_level="beginner"): + # Initialize LLM, tools, and conversation memory + pass + + def explain_code(self, code, language): + # Tool: Explain how code works + pass + + def generate_quiz(self, topic, difficulty): + # Tool: Create practice questions + pass + + def chat(self, user_input): + # Main conversation interface + pass + +# Example usage +assistant = StudyAssistant(skill_level="intermediate") +response = assistant.chat("Explain how Python functions work") +``` + +**Bonus Challenges:** +- Add voice input/output capabilities +- Implement a web interface using Streamlit or Flask +- Create a knowledge base from course materials using embeddings +- Add progress tracking and personalized learning paths + +## 📈 Your AI Framework Development Mastery Timeline + +```mermaid +timeline + title Production AI Framework Development Journey + + section Framework Foundations + Understanding Abstractions + : Master framework vs API decisions + : Learn LangChain core concepts + : Implement message type systems + + Basic Integration + : Connect to AI providers + : Handle authentication + : Manage configuration + + section Conversation Systems + Memory Management + : Build conversation history + : Implement context tracking + : Handle session persistence + + Advanced Interactions + : Master streaming responses + : Create prompt templates + : Implement structured output + + section Tool Integration + Custom Tool Development + : Design tool schemas + : Implement function calling + : Handle external APIs + + Workflow Automation + : Chain multiple tools + : Create decision trees + : Build agent behaviors + + section Production Applications + Complete System Architecture + : Combine all framework features + : Implement error boundaries + : Create maintainable code + + Enterprise Readiness + : Handle scalability concerns + : Implement monitoring + : Build deployment strategies +``` +**🎓 Graduation Milestone**: You've successfully mastered AI framework development using the same tools and patterns that power modern AI applications. These skills represent the cutting edge of AI application development and prepare you for building enterprise-grade intelligent systems. + +**🔄 Next Level Capabilities**: +- Ready to explore advanced AI architectures (agents, multi-agent systems) +- Prepared to build RAG systems with vector databases +- Equipped to create multi-modal AI applications +- Foundation set for AI application scaling and optimization ## Summary +🎉 You've now mastered the fundamentals of AI framework development and learned how to build sophisticated AI applications using LangChain. Like completing a comprehensive apprenticeship, you've acquired a substantial toolkit of skills. Let's review what you've accomplished. + +### What you've learned + +**Core Framework Concepts:** +- **Framework Benefits**: Understanding when to choose frameworks over direct API calls +- **LangChain Basics**: Setting up and configuring AI model connections +- **Message Types**: Using `SystemMessage`, `HumanMessage`, and `AIMessage` for structured conversations + +**Advanced Features:** +- **Tool Calling**: Creating and integrating custom tools for enhanced AI capabilities +- **Conversation Memory**: Maintaining context across multiple conversation turns +- **Streaming Responses**: Implementing real-time response delivery +- **Prompt Templates**: Building reusable, dynamic prompts +- **Structured Output**: Ensuring consistent, parseable AI responses +- **Embeddings**: Creating semantic search and document processing capabilities + +**Practical Applications:** +- **Building Complete Apps**: Combining multiple features into production-ready applications +- **Error Handling**: Implementing robust error management and validation +- **Tool Integration**: Creating custom tools that extend AI capabilities + +### Key takeaways + +> 🎯 **Remember**: AI frameworks like LangChain are basically your complexity-hiding, feature-packed best friends. They're perfect when you need conversation memory, tool calling, or want to work with multiple AI models without losing your sanity. + +**Decision framework for AI integration:** + +```mermaid +flowchart TD + A[AI Integration Need] --> B{Simple single query?} + B -->|Yes| C[Direct API calls] + B -->|No| D{Need conversation memory?} + D -->|No| E[SDK Integration] + D -->|Yes| F{Need tools or complex features?} + F -->|No| G[Framework with basic setup] + F -->|Yes| H[Full framework implementation] + + C --> I[HTTP requests, minimal dependencies] + E --> J[Provider SDK, model-specific] + G --> K[LangChain basic chat] + H --> L[LangChain with tools, memory, agents] +``` +### Where do you go from here? + +**Start building right now:** +- Take these concepts and build something that excites YOU! +- Play around with different AI models through LangChain - it's like having a playground of AI models +- Create tools that solve actual problems you face in your work or projects + +**Ready for the next level?** +- **AI Agents**: Build AI systems that can actually plan and execute complex tasks on their own +- **RAG (Retrieval-Augmented Generation)**: Combine AI with your own knowledge bases for super-powered applications +- **Multi-Modal AI**: Work with text, images, and audio all together - the possibilities are endless! +- **Production Deployment**: Learn how to scale your AI apps and monitor them in the real world + +**Join the community:** +- The LangChain community is fantastic for staying up-to-date and learning best practices +- GitHub Models gives you access to cutting-edge AI capabilities - perfect for experimenting +- Keep practicing with different use cases - each project will teach you something new + +You now have the knowledge to build intelligent, conversational applications that can help people solve real problems. Like the Renaissance craftsmen who combined artistic vision with technical skill, you can now merge AI capabilities with practical application. The question is: what will you create? 🚀 + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Build an advanced AI-powered code review assistant that combines multiple LangChain features including tool calling, structured output, and conversation memory to provide comprehensive feedback on code submissions. + +**Prompt:** Create a CodeReviewAssistant class that implements: +1. A tool for analyzing code complexity and suggesting improvements +2. A tool for checking code against best practices +3. Structured output using Pydantic models for consistent review format +4. Conversation memory to track review sessions +5. A main chat interface that can handle code submissions and provide detailed, actionable feedback + +The assistant should be able to review code in multiple programming languages, maintain context across multiple code submissions in a session, and provide both summary scores and detailed improvement suggestions. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/1-data-types/README.md b/translations/en/2-js-basics/1-data-types/README.md index b7cbe2985..feeea7277 100644 --- a/translations/en/2-js-basics/1-data-types/README.md +++ b/translations/en/2-js-basics/1-data-types/README.md @@ -1,161 +1,361 @@ - # JavaScript Basics: Data Types -![JavaScript Basics - Data types](../../../../translated_images/en/webdev101-js-datatypes.4cc470179730702c756480d3ffa46507f746e5975ebf80f99fdaaf1cff09a7f4.png) +![JavaScript Basics - Data types](../../../../translated_images/en/webdev101-js-datatypes.4cc470179730702c.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +```mermaid +journey + title Your JavaScript Data Types Adventure + section Foundation + Variables & Constants: 5: You + Declaration Syntax: 4: You + Assignment Concepts: 5: You + section Core Types + Numbers & Math: 4: You + Strings & Text: 5: You + Booleans & Logic: 4: You + section Apply Knowledge + Type Conversion: 4: You + Real-world Examples: 5: You + Best Practices: 5: You +``` +Data types are one of the fundamental concepts in JavaScript that you'll encounter in every program you write. Think of data types like the filing system used by ancient librarians in Alexandria – they had specific places for scrolls containing poetry, mathematics, and historical records. JavaScript organizes information in a similar way with different categories for different kinds of data. + +In this lesson, we'll explore the core data types that make JavaScript work. You'll learn how to handle numbers, text, true/false values, and understand why choosing the correct type is essential for your programs. These concepts might seem abstract at first, but with practice, they'll become second nature. + +Understanding data types will make everything else in JavaScript much clearer. Just as architects need to understand different building materials before constructing a cathedral, these fundamentals will support everything you build going forward. + ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/) -This lesson introduces the basics of JavaScript, the language that makes websites interactive. +This lesson covers the basics of JavaScript, the language that provides interactivity on the web. -> You can follow this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-variables/?WT.mc_id=academic-77807-sagibbon)! +> You can take this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-variables/?WT.mc_id=academic-77807-sagibbon)! [![Variables](https://img.youtube.com/vi/JNIXfGiDWM8/0.jpg)](https://youtube.com/watch?v=JNIXfGiDWM8 "Variables in JavaScript") [![Data Types in JavaScript](https://img.youtube.com/vi/AWfA95eLdq8/0.jpg)](https://youtube.com/watch?v=AWfA95eLdq8 "Data Types in JavaScript") -> 🎥 Click the images above to watch videos about variables and data types. - -Let’s dive into variables and the data types they can hold! - +> 🎥 Click the images above for videos about variables and data types + +Let's start with variables and the data types that populate them! + +```mermaid +mindmap + root((JavaScript Data)) + Variables + let myVar + const PI = 3.14 + var oldStyle + Primitive Types + number + 42 + 3.14 + -5 + string + "Hello" + 'World' + `Template` + boolean + true + false + undefined + null + Operations + Arithmetic + + - * / % + String Methods + concatenation + template literals + Type Conversion + implicit + explicit +``` ## Variables -Variables are used to store values that can be accessed and modified throughout your code. +Variables are fundamental building blocks in programming. Like the labeled jars that medieval alchemists used to store different substances, variables let you store information and give it a descriptive name so you can reference it later. Need to remember someone's age? Store it in a variable called `age`. Want to track a user's name? Keep it in a variable called `userName`. + +We'll focus on the modern approach to creating variables in JavaScript. The techniques you'll learn here represent years of language evolution and best practices developed by the programming community. -To **declare** a variable, use the syntax **[keyword] [name]**. This consists of two parts: +Creating and **declaring** a variable has the following syntax **[keyword] [name]**. It's made up of the two parts: -- **Keyword**. The keywords `let` or `var` can be used. +- **Keyword**. Use `let` for variables that can change, or `const` for values that stay the same. +- **The variable name**, this is a descriptive name you choose yourself. -✅ The `let` keyword, introduced in ES6, provides _block scope_ for your variable. It’s recommended to use `let` instead of `var`. We’ll explore block scopes in more detail later. -- **Variable name**, which is a name you choose. +✅ The keyword `let` was introduced in ES6 and gives your variable a so called _block scope_. It's recommended that you use `let` or `const` instead of the older `var` keyword. We will cover block scopes more in depth in future parts. -### Task - Working with Variables +### Task - working with variables -1. **Declare a variable**. Use the `let` keyword to declare a variable: +1. **Declare a variable**. Let's start by creating our first variable: ```javascript let myVariable; ``` - Here, `myVariable` is declared using the `let` keyword but doesn’t yet have a value. + **What this accomplishes:** + - This tells JavaScript to create a storage location called `myVariable` + - JavaScript allocates space in memory for this variable + - The variable currently has no value (undefined) -1. **Assign a value**. Use the `=` operator to assign a value to the variable: +2. **Give it a value**. Now let's put something in our variable: ```javascript myVariable = 123; ``` - > Note: In this lesson, the `=` operator is used as an "assignment operator" to assign a value to a variable. It does not represent equality. + **How assignment works:** + - The `=` operator assigns the value 123 to our variable + - The variable now contains this value instead of being undefined + - You can reference this value throughout your code using `myVariable` - Now, `myVariable` is *initialized* with the value 123. + > Note: the use of `=` in this lesson means we make use of an "assignment operator", used to set a value to a variable. It doesn't denote equality. -1. **Refactor**. Replace your code with the following statement: +3. **Do it the smart way**. Actually, let's combine those two steps: ```javascript let myVariable = 123; ``` - This is called _explicit initialization_, where a variable is declared and assigned a value at the same time. + **This approach is more efficient:** + - You're declaring the variable and assigning a value in one statement + - This is the standard practice among developers + - It reduces code length while maintaining clarity -1. **Change the variable value**. Update the variable’s value like this: +4. **Change your mind**. What if we want to store a different number? ```javascript myVariable = 321; ``` - Once a variable is declared, you can change its value at any point in your code using the `=` operator and the new value. + **Understanding reassignment:** + - The variable now contains 321 instead of 123 + - The previous value is replaced – variables store only one value at a time + - This mutability is the key characteristic of variables declared with `let` + + ✅ Try it! You can write JavaScript right in your browser. Open a browser window and navigate to Developer Tools. In the console, you will find a prompt; type `let myVariable = 123`, press return, then type `myVariable`. What happens? Note, you'll learn more about these concepts in subsequent lessons. + +### 🧠 **Variables Mastery Check: Getting Comfortable** - ✅ Try it! You can write JavaScript directly in your browser. Open Developer Tools, go to the console, and type `let myVariable = 123`. Press Enter, then type `myVariable`. What happens? You’ll learn more about these concepts in upcoming lessons. +**Let's see how you're feeling about variables:** +- Can you explain the difference between declaring and assigning a variable? +- What happens if you try to use a variable before you declare it? +- When would you choose `let` over `const` for a variable? + +```mermaid +stateDiagram-v2 + [*] --> Declared: let myVar + Declared --> Assigned: myVar = 123 + Assigned --> Reassigned: myVar = 456 + Assigned --> [*]: Variable ready! + Reassigned --> [*]: Updated value + + note right of Declared + Variable exists but + has no value (undefined) + end note + + note right of Assigned + Variable contains + the value 123 + end note +``` +> **Quick tip**: Think of variables as labeled storage boxes. You create the box (`let`), put something in it (`=`), and can later replace the contents if needed! ## Constants -Declaring and initializing a constant is similar to a variable, but you use the `const` keyword. Constants are often written in uppercase letters. +Sometimes you need to store information that should never change during program execution. Think of constants like the mathematical principles that Euclid established in ancient Greece – once proven and documented, they remained fixed for all future reference. + +Constants work similarly to variables, but with an important restriction: once you assign their value, it cannot be changed. This immutability helps prevent accidental modifications to critical values in your program. + +Declaration and initialization of a constant follows the same concepts as a variable, with the exception of the `const` keyword. Constants are typically declared with all uppercase letters. ```javascript const MY_VARIABLE = 123; ``` -Constants are like variables, but with two key differences: +**Here's what this code does:** +- **Creates** a constant named `MY_VARIABLE` with the value 123 +- **Uses** uppercase naming convention for constants +- **Prevents** any future changes to this value + +Constants have two main rules: + +- **You must give them a value right away** – no empty constants allowed! +- **You can never change that value** – JavaScript will throw an error if you try. Let's see what I mean: -- **Must have a value**. A constant must be initialized, or an error will occur when the code runs. -- **Reference cannot be changed**. Once initialized, the reference of a constant cannot be changed, or an error will occur. Let’s look at some examples: - - **Simple value**. The following is NOT allowed: + **Simple value** - The following is NOT allowed: ```javascript const PI = 3; PI = 4; // not allowed ``` + + **What you need to remember:** + - **Attempts** to reassign a constant will cause an error + - **Protects** important values from accidental changes + - **Ensures** the value remains consistent throughout your program - - **Object reference is protected**. The following is NOT allowed: + **Object reference is protected** - The following is NOT allowed: ```javascript const obj = { a: 3 }; obj = { b: 5 } // not allowed ``` - - **Object value is not protected**. The following IS allowed: + **Understanding these concepts:** + - **Prevents** replacing the entire object with a new one + - **Protects** the reference to the original object + - **Maintains** the object's identity in memory + + **Object value is not protected** - The following IS allowed: ```javascript const obj = { a: 3 }; obj.a = 5; // allowed ``` - In this case, you’re changing the object’s value, not its reference, so it’s allowed. + **Breaking down what happens here:** + - **Modifies** the property value inside the object + - **Keeps** the same object reference + - **Demonstrates** that object contents can change while the reference stays constant - > Note: A `const` protects the reference from reassignment. However, the value itself is not _immutable_ and can change, especially for complex constructs like objects. + > Note, a `const` means the reference is protected from reassignment. The value is not _immutable_ though and can change, especially if it's a complex construct like an object. ## Data Types -Variables can hold different types of values, such as numbers or text. These types of values are called **data types**. Understanding data types is crucial in software development because it helps determine how code should be written and how the program should behave. Additionally, some data types have unique features that allow you to manipulate or extract information from a value. +JavaScript organizes information into different categories called data types. This concept mirrors how ancient scholars categorized knowledge – Aristotle distinguished between different types of reasoning, knowing that logical principles couldn't be applied uniformly to poetry, mathematics, and natural philosophy. -✅ Data types are also known as JavaScript data primitives, as they are the most basic data types provided by the language. There are 7 primitive data types: string, number, bigint, boolean, undefined, null, and symbol. Take a moment to think about what each of these represents. What is a `zebra`? How about `0`? `true`? +Data types matter because different operations work with different kinds of information. Just as you can't perform arithmetic on a person's name or alphabetize a mathematical equation, JavaScript requires the appropriate data type for each operation. Understanding this prevents errors and makes your code more reliable. + +Variables can store many different types of values, like numbers and text. These various types of values are known as the **data type**. Data types are an important part of software development because it helps developers make decisions on how the code should be written and how the software should run. Furthermore, some data types have unique features that help transform or extract additional information in a value. + +✅ Data Types are also referred to as JavaScript data primitives, as they are the lowest-level data types that are provided by the language. There are 7 primitive data types: string, number, bigint, boolean, undefined, null and symbol. Take a minute to visualize what each of these primitives might represent. What is a `zebra`? How about `0`? `true`? ### Numbers -In the earlier example, the value of `myVariable` was a number data type. +Numbers are the most straightforward data type in JavaScript. Whether you're working with whole numbers like 42, decimals like 3.14, or negative numbers like -5, JavaScript handles them uniformly. + +Remember our variable from earlier? That 123 we stored was actually a number data type: + +```javascript +let myVariable = 123; +``` -`let myVariable = 123;` +**Key characteristics:** +- JavaScript automatically recognizes numeric values +- You can perform mathematical operations with these variables +- No explicit type declaration is required -Variables can store all kinds of numbers, including decimals and negative numbers. Numbers can also be used with arithmetic operators, which we’ll cover in the [next section](../../../../2-js-basics/1-data-types). +Variables can store all types of numbers, including decimals or negative numbers. Numbers also can be used with arithmetic operators, covered in the [next section](../../../../2-js-basics/1-data-types). +```mermaid +flowchart LR + A["🔢 Numbers"] --> B["➕ Addition"] + A --> C["➖ Subtraction"] + A --> D["✖️ Multiplication"] + A --> E["➗ Division"] + A --> F["📊 Remainder %"] + + B --> B1["1 + 2 = 3"] + C --> C1["5 - 3 = 2"] + D --> D1["4 * 3 = 12"] + E --> E1["10 / 2 = 5"] + F --> F1["7 % 3 = 1"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec +``` ### Arithmetic Operators -JavaScript provides several operators for performing arithmetic operations. Here are some examples: +Arithmetic operators allow you to perform mathematical calculations in JavaScript. These operators follow the same principles mathematicians have used for centuries – the same symbols that appeared in the works of scholars like Al-Khwarizmi, who developed algebraic notation. + +The operators work as you would expect from traditional mathematics: plus for addition, minus for subtraction, and so forth. + +There are several types of operators to use when performing arithmetic functions, and some are listed here: | Symbol | Description | Example | | ------ | ------------------------------------------------------------------------ | -------------------------------- | -| `+` | **Addition**: Adds two numbers | `1 + 2 //expected answer is 3` | -| `-` | **Subtraction**: Subtracts one number from another | `1 - 2 //expected answer is -1` | -| `*` | **Multiplication**: Multiplies two numbers | `1 * 2 //expected answer is 2` | -| `/` | **Division**: Divides one number by another | `1 / 2 //expected answer is 0.5` | -| `%` | **Remainder**: Finds the remainder of a division | `1 % 2 //expected answer is 1` | - -✅ Try it! Test an arithmetic operation in your browser’s console. Were the results what you expected? +| `+` | **Addition**: Calculates the sum of two numbers | `1 + 2 //expected answer is 3` | +| `-` | **Subtraction**: Calculates the difference of two numbers | `1 - 2 //expected answer is -1` | +| `*` | **Multiplication**: Calculates the product of two numbers | `1 * 2 //expected answer is 2` | +| `/` | **Division**: Calculates the quotient of two numbers | `1 / 2 //expected answer is 0.5` | +| `%` | **Remainder**: Calculates the remainder from the division of two numbers | `1 % 2 //expected answer is 1` | + +✅ Try it! Try an arithmetic operation in your browser's console. Do the results surprise you? + +### 🧮 **Math Skills Check: Calculating with Confidence** + +**Test your arithmetic understanding:** +- What's the difference between `/` (division) and `%` (remainder)? +- Can you predict what `10 % 3` equals? (Hint: it's not 3.33...) +- Why might the remainder operator be useful in programming? + +```mermaid +pie title "JavaScript Number Operations Usage" + "Addition (+)" : 35 + "Subtraction (-)" : 20 + "Multiplication (*)" : 20 + "Division (/)" : 15 + "Remainder (%)" : 10 +``` +> **Real-world insight**: The remainder operator (%) is super useful for checking if numbers are even/odd, creating patterns, or cycling through arrays! ### Strings -Strings are sequences of characters enclosed in single or double quotes. +In JavaScript, textual data is represented as strings. The term "string" comes from the concept of characters strung together in sequence, much like the way scribes in medieval monasteries would connect letters to form words and sentences in their manuscripts. -- `'This is a string'` -- `"This is also a string"` -- `let myString = 'This is a string value stored in a variable';` +Strings are fundamental to web development. Every piece of text displayed on a website – usernames, button labels, error messages, content – is handled as string data. Understanding strings is essential for creating functional user interfaces. -Always use quotes when writing a string; otherwise, JavaScript will interpret it as a variable name. +Strings are sets of characters that reside between single or double quotes. +```javascript +'This is a string' +"This is also a string" +let myString = 'This is a string value stored in a variable'; +``` + +**Understanding these concepts:** +- **Uses** either single quotes `'` or double quotes `"` to define strings +- **Stores** text data that can include letters, numbers, and symbols +- **Assigns** string values to variables for later use +- **Requires** quotes to distinguish text from variable names + +Remember to use quotes when writing a string, or else JavaScript will assume it's a variable name. + +```mermaid +flowchart TD + A["📝 Strings"] --> B["Single Quotes"] + A --> C["Double Quotes"] + A --> D["Template Literals"] + + B --> B1["'Hello World'"] + C --> C1["\"Hello World\""] + D --> D1["`Hello \${name}`"] + + E["String Operations"] --> F["Concatenation"] + E --> G["Template Insertion"] + E --> H["Length & Methods"] + + F --> F1["'Hello' + ' ' + 'World'"] + G --> G1["`Hello \${firstName} \${lastName}`"] + H --> H1["myString.length"] + + style A fill:#e3f2fd + style E fill:#fff3e0 + style D fill:#e8f5e8 + style G fill:#e8f5e8 +``` ### Formatting Strings -Strings are textual and often need formatting. +String manipulation allows you to combine text elements, incorporate variables, and create dynamic content that responds to program state. This technique enables you to construct text programmatically. + +Often you need to join multiple strings together – this process is called concatenation. -To **concatenate** (join) two or more strings, use the `+` operator. +To **concatenate** two or more strings, or join them together, use the `+` operator. ```javascript let myString1 = "Hello"; @@ -164,12 +364,17 @@ let myString2 = "World"; myString1 + myString2 + "!"; //HelloWorld! myString1 + " " + myString2 + "!"; //Hello World! myString1 + ", " + myString2 + "!"; //Hello, World! - ``` -✅ Why does `1 + 1 = 2` in JavaScript, but `'1' + '1' = 11`? Think about it. What about `'1' + 1`? +**Step by step, here's what's happening:** +- **Combines** multiple strings using the `+` operator +- **Joins** strings directly together without spaces in the first example +- **Adds** space characters `" "` between strings for readability +- **Inserts** punctuation like commas to create proper formatting + +✅ Why does `1 + 1 = 2` in JavaScript, but `'1' + '1' = 11?` Think about it. What about `'1' + 1`? -**Template literals** offer another way to format strings. Instead of quotes, use backticks. Place anything that isn’t plain text inside `${ }`, including variables. +**Template literals** are another way to format strings, except instead of quotes, the backtick is used. Anything that is not plain text must be placed inside placeholders `${ }`. This includes any variables that may be strings. ```javascript let myString1 = "Hello"; @@ -179,37 +384,227 @@ let myString2 = "World"; `${myString1}, ${myString2}!` //Hello, World! ``` -Both methods work, but template literals preserve spaces and line breaks. - -✅ When would you use a template literal instead of a plain string? +**Let's understand each part:** +- **Uses** backticks `` ` `` instead of regular quotes to create template literals +- **Embeds** variables directly using `${}` placeholder syntax +- **Preserves** spaces and formatting exactly as written +- **Provides** a cleaner way to create complex strings with variables + +You can achieve your formatting goals with either method, but template literals will respect any spaces and line breaks. + +✅ When would you use a template literal vs. a plain string? + +### 🔤 **String Mastery Check: Text Manipulation Confidence** + +**Evaluate your string skills:** +- Can you explain why `'1' + '1'` equals `'11'` instead of `2`? +- Which string method do you find more readable: concatenation or template literals? +- What happens if you forget the quotes around a string? + +```mermaid +stateDiagram-v2 + [*] --> PlainText: "Hello" + [*] --> Variable: name = "Alice" + PlainText --> Concatenated: + " " + name + Variable --> Concatenated + PlainText --> Template: `Hello ${name}` + Variable --> Template + Concatenated --> Result: "Hello Alice" + Template --> Result + + note right of Concatenated + Traditional method + More verbose + end note + + note right of Template + Modern ES6 syntax + Cleaner & more readable + end note +``` +> **Pro tip**: Template literals are generally preferred for complex string building because they're more readable and handle multi-line strings beautifully! ### Booleans -Booleans have only two possible values: `true` or `false`. They are useful for making decisions about which parts of the code should execute under certain conditions. Often, [operators](../../../../2-js-basics/1-data-types) are used to set Boolean values, and you’ll frequently see variables being initialized or updated with an operator. +Booleans represent the simplest form of data: they can only hold one of two values – `true` or `false`. This binary logic system traces back to the work of George Boole, a 19th-century mathematician who developed Boolean algebra. + +Despite their simplicity, booleans are essential for program logic. They enable your code to make decisions based on conditions – whether a user is logged in, if a button was clicked, or if certain criteria are met. + +Booleans can be only two values: `true` or `false`. Booleans can help make decisions on which lines of code should run when certain conditions are met. In many cases, [operators](../../../../2-js-basics/1-data-types) assist with setting the value of a Boolean and you will often notice and write variables being initialized or their values being updated with an operator. -- `let myTrueBool = true` -- `let myFalseBool = false` +```javascript +let myTrueBool = true; +let myFalseBool = false; +``` -✅ A variable is considered 'truthy' if it evaluates to `true`. Interestingly, in JavaScript, [all values are truthy unless explicitly defined as falsy](https://developer.mozilla.org/docs/Glossary/Truthy). +**In the above, we've:** +- **Created** a variable that stores the Boolean value `true` +- **Demonstrated** how to store the Boolean value `false` +- **Used** the exact keywords `true` and `false` (no quotes needed) +- **Prepared** these variables for use in conditional statements + +✅ A variable can be considered 'truthy' if it evaluates to a boolean `true`. Interestingly, in JavaScript, [all values are truthy unless defined as falsy](https://developer.mozilla.org/docs/Glossary/Truthy). + +```mermaid +flowchart LR + A["🔘 Boolean Values"] --> B["true"] + A --> C["false"] + + D["Truthy Values"] --> D1["'hello'"] + D --> D2["42"] + D --> D3["[]"] + D --> D4["{}"] + + E["Falsy Values"] --> E1["false"] + E --> E2["0"] + E --> E3["''"] + E --> E4["null"] + E --> E5["undefined"] + E --> E6["NaN"] + + style B fill:#e8f5e8 + style C fill:#ffebee + style D fill:#e3f2fd + style E fill:#fff3e0 +``` +### 🎯 **Boolean Logic Check: Decision Making Skills** + +**Test your boolean understanding:** +- Why do you think JavaScript has "truthy" and "falsy" values beyond just `true` and `false`? +- Can you predict which of these is falsy: `0`, `"0"`, `[]`, `"false"`? +- How might booleans be useful in controlling program flow? + +```mermaid +pie title "Common Boolean Use Cases" + "Conditional Logic" : 40 + "User State" : 25 + "Feature Toggles" : 20 + "Validation" : 15 +``` +> **Remember**: In JavaScript, only 6 values are falsy: `false`, `0`, `""`, `null`, `undefined`, and `NaN`. Everything else is truthy! --- +## 📊 **Your Data Types Toolkit Summary** + +```mermaid +graph TD + A["🎯 JavaScript Data Types"] --> B["📦 Variables"] + A --> C["🔢 Numbers"] + A --> D["📝 Strings"] + A --> E["🔘 Booleans"] + + B --> B1["let mutable"] + B --> B2["const immutable"] + + C --> C1["42, 3.14, -5"] + C --> C2["+ - * / %"] + + D --> D1["'quotes' or \\\"quotes\\\""] + D --> D2["`template literals`"] + + E --> E1["true or false"] + E --> E2["truthy vs falsy"] + + F["⚡ Key Concepts"] --> F1["Type matters for operations"] + F --> F2["JavaScript is dynamically typed"] + F --> F3["Variables can change types"] + F --> F4["Naming is case-sensitive"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec +``` +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Create a personal information manager that demonstrates all the JavaScript data types you've learned in this lesson while handling real-world data scenarios. + +**Prompt:** Build a JavaScript program that creates a user profile object containing: a person's name (string), age (number), is a student status (boolean), favorite colors as an array, and an address object with street, city, and zip code properties. Include functions to display the profile information and update individual fields. Make sure to demonstrate string concatenation, template literals, arithmetic operations with the age, and boolean logic for the student status. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + ## 🚀 Challenge -JavaScript is known for its quirky behavior with data types. Research some of these 'gotchas'. For example: case sensitivity can be tricky! Try this in your console: `let age = 1; let Age = 2; age == Age` (it resolves to `false`—why?). What other surprises can you find? +JavaScript has some behaviors that can catch developers off guard. Here's a classic example to explore: try typing this in your browser console: `let age = 1; let Age = 2; age == Age` and observe the result. It returns `false` – can you determine why? + +This represents one of many JavaScript behaviors worth understanding. Familiarity with these quirks will help you write more reliable code and debug issues more effectively. ## Post-Lecture Quiz [Post-lecture quiz](https://ff-quizzes.netlify.app) ## Review & Self Study -Check out [this list of JavaScript exercises](https://css-tricks.com/snippets/javascript/) and try one. What did you learn? +Take a look at [this list of JavaScript exercises](https://css-tricks.com/snippets/javascript/) and try one. What did you learn? ## Assignment [Data Types Practice](assignment.md) +## 🚀 Your JavaScript Data Types Mastery Timeline + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open your browser console and create 3 variables with different data types +- [ ] Try the challenge: `let age = 1; let Age = 2; age == Age` and figure out why it's false +- [ ] Practice string concatenation with your name and favorite number +- [ ] Test what happens when you add a number to a string + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and review any confusing concepts +- [ ] Create a mini calculator that adds, subtracts, multiplies, and divides two numbers +- [ ] Build a simple name formatter using template literals +- [ ] Explore the differences between `==` and `===` comparison operators +- [ ] Practice converting between different data types + +### 📅 **Your Week-Long JavaScript Foundation** +- [ ] Complete the assignment with confidence and creativity +- [ ] Create a personal profile object using all data types learned +- [ ] Practice with [JavaScript exercises from CSS-Tricks](https://css-tricks.com/snippets/javascript/) +- [ ] Build a simple form validator using boolean logic +- [ ] Experiment with array and object data types (preview of coming lessons) +- [ ] Join a JavaScript community and ask questions about data types + +### 🌟 **Your Month-Long Transformation** +- [ ] Integrate data type knowledge into larger programming projects +- [ ] Understand when and why to use each data type in real applications +- [ ] Help other beginners understand JavaScript fundamentals +- [ ] Build a small application that manages different types of user data +- [ ] Explore advanced data type concepts like type coercion and strict equality +- [ ] Contribute to open source JavaScript projects with documentation improvements + +### 🧠 **Final Data Types Mastery Check-in** + +**Celebrate your JavaScript foundation:** +- Which data type surprised you the most in terms of its behavior? +- How comfortable do you feel explaining variables vs. constants to a friend? +- What's the most interesting thing you discovered about JavaScript's type system? +- Which real-world application can you imagine building with these fundamentals? + +```mermaid +journey + title Your JavaScript Confidence Journey + section Today + Confused: 3: You + Curious: 4: You + Excited: 5: You + section This Week + Practicing: 4: You + Understanding: 5: You + Building: 5: You + section Next Month + Problem Solving: 5: You + Teaching Others: 5: You + Real Projects: 5: You +``` +> 💡 **You've built the foundation!** Understanding data types is like learning the alphabet before writing stories. Every JavaScript program you'll ever write will use these fundamental concepts. You now have the building blocks to create interactive websites, dynamic applications, and solve real-world problems with code. Welcome to the wonderful world of JavaScript! 🎉 + --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/1-data-types/assignment.md b/translations/en/2-js-basics/1-data-types/assignment.md index 07ac644b7..436954cc6 100644 --- a/translations/en/2-js-basics/1-data-types/assignment.md +++ b/translations/en/2-js-basics/1-data-types/assignment.md @@ -1,25 +1,94 @@ - -# Data Types Practice +# Data Types Practice: E-commerce Shopping Cart ## Instructions -Imagine you are creating a shopping cart. Write documentation on the data types you would need to enhance the shopping experience. For each data type, explain its purpose and usage, and provide an example. The six JavaScript data types are: String, Number, Boolean, Null, Undefined, and Object. +Imagine you are building a modern e-commerce shopping cart system. This assignment will help you understand how different JavaScript data types work together to create real-world applications. + +### Your Task + +Create a comprehensive analysis of how you would use JavaScript data types in a shopping cart application. For each of the seven primitive data types and objects, you need to: + +1. **Identify** the data type and its purpose +2. **Explain** why this data type is the best choice for specific shopping cart features +3. **Provide** realistic code examples showing the data type in action +4. **Describe** how this data type interacts with other parts of the shopping cart + +### Required Data Types to Cover + +**Primitive Data Types:** +- **String**: Product names, descriptions, user information +- **Number**: Prices, quantities, tax calculations +- **Boolean**: Item availability, user preferences, cart status +- **Null**: Intentionally empty values (like missing discount codes) +- **Undefined**: Uninitialized values or missing data +- **Symbol**: Unique identifiers (advanced use) +- **BigInt**: Large financial calculations (advanced use) + +**Reference Types:** +- **Object**: Product details, user profiles, cart contents +- **Array**: List of products, order history, categories + +### Example Format for Each Data Type + +For each data type, structure your response like this: + +```markdown +## [Data Type Name] + +**Purpose in Shopping Cart:** [Explain what this data type does] + +**Why This Type:** [Explain why this is the best choice] + +**Code Example:** +```javascript +// Your realistic code example here +``` + +**Real-world Usage:** [Describe how this would work in practice] + +**Interactions:** [Explain how this data type works with others] +``` + +### Bonus Challenges + +1. **Type Coercion**: Show an example where JavaScript automatically converts between data types in your shopping cart (e.g., string "5" + number 10) + +2. **Data Validation**: Demonstrate how you would check if user input is the correct data type before processing + +3. **Performance Considerations**: Explain when you might choose one data type over another for performance reasons + +### Submission Guidelines + +- Create a markdown document with clear headings for each data type +- Include working JavaScript code examples +- Use realistic e-commerce scenarios in your examples +- Explain your reasoning clearly for beginners to understand +- Test your code examples to ensure they work correctly ## Rubric -Criteria | Exemplary | Adequate | Needs Improvement ---- | --- | --- | --- | -Data Types | All six data types are listed, thoroughly explained, and accompanied by examples | Four data types are explained with some detail | Two data types are briefly mentioned with minimal explanation | +| Criteria | Exemplary (90-100%) | Proficient (80-89%) | Developing (70-79%) | Needs Improvement (Below 70%) | +|----------|---------------------|---------------------|---------------------|------------------------------| +| **Data Type Coverage** | All 7 primitive types and objects/arrays covered with detailed explanations | 6-7 data types covered with good explanations | 4-5 data types covered with basic explanations | Fewer than 4 data types or minimal explanations | +| **Code Examples** | All examples are realistic, working, and well-commented | Most examples work and are relevant to e-commerce | Some examples work but may be generic | Code examples are incomplete or non-functional | +| **Real-world Application** | Clearly connects each data type to practical shopping cart features | Good connection to e-commerce scenarios | Some connection to shopping cart context | Limited real-world application demonstrated | +| **Technical Accuracy** | All technical information is correct and demonstrates deep understanding | Most technical information is accurate | Generally accurate with minor errors | Contains significant technical errors | +| **Communication** | Explanations are clear, beginner-friendly, and well-organized | Good explanations that are mostly clear | Explanations are understandable but may lack clarity | Explanations are unclear or poorly organized | +| **Bonus Elements** | Includes multiple bonus challenges with excellent execution | Includes one or more bonus challenges well done | Attempts bonus challenges with mixed success | No bonus challenges attempted | + +### Learning Objectives + +By completing this assignment, you will: +- ✅ **Understand** the seven JavaScript primitive data types and their uses +- ✅ **Apply** data types to real-world programming scenarios +- ✅ **Analyze** when to choose specific data types for different purposes +- ✅ **Create** working code examples that demonstrate data type usage +- ✅ **Explain** technical concepts in beginner-friendly language +- ✅ **Connect** fundamental programming concepts to practical applications --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/2-functions-methods/README.md b/translations/en/2-js-basics/2-functions-methods/README.md index 5018fdf2b..9ad50ba08 100644 --- a/translations/en/2-js-basics/2-functions-methods/README.md +++ b/translations/en/2-js-basics/2-functions-methods/README.md @@ -1,21 +1,32 @@ - # JavaScript Basics: Methods and Functions -![JavaScript Basics - Functions](../../../../translated_images/en/webdev101-js-functions.be049c4726e94f8b7605c36330ac42eeb5cd8ed02bcdd60fdac778174d6cb865.png) +![JavaScript Basics - Functions](../../../../translated_images/en/webdev101-js-functions.be049c4726e94f8b.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +```mermaid +journey + title Your JavaScript Functions Adventure + section Foundation + Function Syntax: 5: You + Calling Functions: 4: You + Parameters & Arguments: 5: You + section Advanced Concepts + Return Values: 4: You + Default Parameters: 5: You + Function Composition: 4: You + section Modern JavaScript + Arrow Functions: 5: You + Anonymous Functions: 4: You + Higher-Order Functions: 5: You +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app) -When writing code, we always want to ensure it’s easy to read. While it might seem counterintuitive, code is read far more often than it’s written. One essential tool in a developer’s toolbox for creating maintainable code is the **function**. +Writing the same code repeatedly is one of programming's most common frustrations. Functions solve this problem by letting you package code into reusable blocks. Think of functions like the standardized parts that made Henry Ford's assembly line revolutionary – once you create a reliable component, you can use it wherever needed without rebuilding from scratch. + +Functions allow you to bundle pieces of code so you can reuse them throughout your program. Instead of copying and pasting the same logic everywhere, you can create a function once and call it whenever needed. This approach keeps your code organized and makes updates much easier. + +In this lesson, you'll learn how to create your own functions, pass information to them, and get useful results back. You'll discover the difference between functions and methods, learn modern syntax approaches, and see how functions can work with other functions. We'll build these concepts step by step. [![Methods and Functions](https://img.youtube.com/vi/XgKsD6Zwvlc/0.jpg)](https://youtube.com/watch?v=XgKsD6Zwvlc "Methods and Functions") @@ -23,15 +34,49 @@ When writing code, we always want to ensure it’s easy to read. While it might > You can take this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-functions/?WT.mc_id=academic-77807-sagibbon)! +```mermaid +mindmap + root((JavaScript Functions)) + Basic Concepts + Declaration + Traditional syntax + Arrow function syntax + Calling + Using parentheses + Parentheses required + Parameters + Input Values + Multiple parameters + Default values + Arguments + Values passed in + Can be any type + Return Values + Output Data + return statement + Exit function + Use Results + Store in variables + Chain functions + Advanced Patterns + Higher-Order + Functions as parameters + Callbacks + Anonymous + No name needed + Inline definition +``` ## Functions -At its core, a function is a block of code that can be executed whenever needed. This is especially useful when we need to perform the same task multiple times. Instead of duplicating the logic in several places (which would make updates difficult later), we can centralize it in one location and call it whenever necessary. You can even call functions from within other functions! +A function is a self-contained block of code that performs a specific task. It encapsulates logic that you can execute whenever needed. + +Instead of writing the same code multiple times throughout your program, you can package it in a function and call that function whenever you need it. This approach keeps your code clean and makes updates much easier. Consider the maintenance challenge if you needed to change logic that was scattered across 20 different locations in your codebase. -Equally important is the ability to name a function. While this might seem trivial, the name acts as a quick way to document what the code does. Think of it like a label on a button. If I see a button labeled "Cancel timer," I immediately know it will stop the clock. +Naming your functions descriptively is essential. A well-named function communicates its purpose clearly – when you see `cancelTimer()`, you immediately understand what it does, just as a clearly labeled button tells you exactly what will happen when you click it. ## Creating and calling a function -The syntax for a function looks like this: +Let's examine how to create a function. The syntax follows a consistent pattern: ```javascript function nameOfFunction() { // function definition @@ -39,7 +84,13 @@ function nameOfFunction() { // function definition } ``` -If I wanted to create a function to display a greeting, it might look like this: +Let's break this down: +- The `function` keyword tells JavaScript "Hey, I'm creating a function!" +- `nameOfFunction` is where you give your function a descriptive name +- The parentheses `()` are where you can add parameters (we'll get to that soon) +- The curly braces `{}` contain the actual code that runs when you call the function + +Let's create a simple greeting function to see this in action: ```javascript function displayGreeting() { @@ -47,28 +98,57 @@ function displayGreeting() { } ``` -To call (or invoke) the function, we use its name followed by `()`. It’s worth noting that the function can be defined either before or after it’s called; the JavaScript compiler will locate it for you. +This function prints "Hello, world!" to the console. Once you've defined it, you can use it as many times as needed. + +To execute (or "call") your function, write its name followed by parentheses. JavaScript allows you to define your function before or after you call it – the JavaScript engine will handle the execution order. ```javascript // calling our function displayGreeting(); ``` -> **NOTE:** There’s a special type of function called a **method**, which you’ve already been using! For example, in the demo above, we used `console.log`. What makes a method different from a function is that a method is attached to an object (like `console` in this case), whereas a function is independent. Developers often use these terms interchangeably. +When you run this line, it executes all the code inside your `displayGreeting` function, displaying "Hello, world!" in your browser's console. You can call this function repeatedly. + +### 🧠 **Function Fundamentals Check: Building Your First Functions** + +**Let's see how you're feeling about basic functions:** +- Can you explain why we use curly braces `{}` in function definitions? +- What happens if you write `displayGreeting` without the parentheses? +- Why might you want to call the same function multiple times? + +```mermaid +flowchart TD + A["✏️ Define Function"] --> B["📦 Package Code"] + B --> C["🏷️ Give it a Name"] + C --> D["📞 Call When Needed"] + D --> E["🔄 Reuse Anywhere"] + + F["💡 Benefits"] --> F1["No code repetition"] + F --> F2["Easy to maintain"] + F --> F3["Clear organization"] + F --> F4["Easier testing"] + + style A fill:#e3f2fd + style E fill:#e8f5e8 + style F fill:#fff3e0 +``` +> **Note:** You've been using **methods** throughout these lessons. `console.log()` is a method – essentially a function that belongs to the `console` object. The key difference is that methods are attached to objects, while functions stand independently. Many developers use these terms interchangeably in casual conversation. ### Function best practices -Here are some best practices to keep in mind when creating functions: +Here are a few tips to help you write great functions: -- Always use descriptive names so it’s clear what the function does. -- Use **camelCasing** to combine words. -- Keep your functions focused on a specific task. +- Give your functions clear, descriptive names – your future self will thank you! +- Use **camelCasing** for multi-word names (like `calculateTotal` instead of `calculate_total`) +- Keep each function focused on doing one thing well ## Passing information to a function -To make a function more reusable, you’ll often want to pass information into it. For example, our `displayGreeting` function above only displays **Hello, world!**, which isn’t very flexible. If we want to allow someone to specify the name of the person being greeted, we can add a **parameter**. A parameter (sometimes called an **argument**) is additional information passed to a function. +Our `displayGreeting` function is limited – it can only display "Hello, world!" for everyone. Parameters allow us to make functions more flexible and useful. -Parameters are listed in the function definition within parentheses and are separated by commas, like this: +**Parameters** act like placeholders where you can insert different values each time you use the function. This way, the same function can work with different information on each call. + +You list parameters inside the parentheses when you define your function, separating multiple parameters with commas: ```javascript function name(param, param2, param3) { @@ -76,7 +156,9 @@ function name(param, param2, param3) { } ``` -We can update our `displayGreeting` function to accept a name and display it. +Each parameter acts like a placeholder – when someone calls your function, they'll provide actual values that get plugged into these spots. + +Let's update our greeting function to accept someone's name: ```javascript function displayGreeting(name) { @@ -85,16 +167,44 @@ function displayGreeting(name) { } ``` -When calling the function, we pass the parameter value inside the parentheses. +Notice how we're using backticks (`` ` ``) and `${}` to insert the name directly into our message – this is called a template literal, and it's a really handy way to build strings with variables mixed in. + +Now when we call our function, we can pass in any name: ```javascript displayGreeting('Christopher'); // displays "Hello, Christopher!" when run ``` +JavaScript takes the string `'Christopher'`, assigns it to the `name` parameter, and creates the personalized message "Hello, Christopher!" + +```mermaid +flowchart LR + A["🎯 Function Call"] --> B["📥 Parameters"] + B --> C["⚙️ Function Body"] + C --> D["📤 Result"] + + A1["displayGreeting('Alice')"] --> A + B1["name = 'Alice'"] --> B + C1["Template literal\n\`Hello, \${name}!\`"] --> C + D1["'Hello, Alice!'"] --> D + + E["🔄 Parameter Types"] --> E1["Strings"] + E --> E2["Numbers"] + E --> E3["Booleans"] + E --> E4["Objects"] + E --> E5["Functions"] + + style A fill:#e3f2fd + style C fill:#e8f5e8 + style D fill:#fff3e0 + style E fill:#f3e5f5 +``` ## Default values -We can make our function even more flexible by adding additional parameters. But what if we don’t want to require every parameter to be specified? For example, in our greeting function, we might want the name to be required (since we need to know who we’re greeting), but allow the greeting itself to be optional. If no custom greeting is provided, we can use a default value instead. To set a default value for a parameter, we assign it a value in the function definition, like this: `parameterName = 'defaultValue'`. Here’s a full example: +What if we want to make some parameters optional? That's where default values come in handy! + +Let's say we want people to be able to customize the greeting word, but if they don't specify one, we'll just use "Hello" as a fallback. You can set up default values by using the equals sign, just like setting a variable: ```javascript function displayGreeting(name, salutation='Hello') { @@ -102,7 +212,9 @@ function displayGreeting(name, salutation='Hello') { } ``` -When calling the function, we can decide whether or not to provide a value for `salutation`. +Here, `name` is still required, but `salutation` has a backup value of `'Hello'` if no one provides a different greeting. + +Now we can call this function in two different ways: ```javascript displayGreeting('Christopher'); @@ -112,19 +224,51 @@ displayGreeting('Christopher', 'Hi'); // displays "Hi, Christopher" ``` +In the first call, JavaScript uses the default "Hello" since we didn't specify a salutation. In the second call, it uses our custom "Hi" instead. This flexibility makes functions adaptable to different scenarios. + +### 🎛️ **Parameters Mastery Check: Making Functions Flexible** + +**Test your parameter understanding:** +- What's the difference between a parameter and an argument? +- Why are default values useful in real-world programming? +- Can you predict what happens if you pass more arguments than parameters? + +```mermaid +stateDiagram-v2 + [*] --> NoParams: function greet() {} + [*] --> WithParams: function greet(name) {} + [*] --> WithDefaults: function greet(name, greeting='Hi') {} + + NoParams --> Static: Same output always + WithParams --> Dynamic: Changes with input + WithDefaults --> Flexible: Optional customization + + Static --> [*] + Dynamic --> [*] + Flexible --> [*] + + note right of WithDefaults + Most flexible approach + Backwards compatible + end note +``` +> **Pro tip**: Default parameters make your functions more user-friendly. Users can get started quickly with sensible defaults, but still customize when needed! + ## Return values -So far, the functions we’ve created always output to the [console](https://developer.mozilla.org/docs/Web/API/console). This is fine for some cases, especially when creating functions that interact with other services. But what if we want a function to perform a calculation and return the result so we can use it elsewhere? +Our functions so far have just been printing messages to the console, but what if you want a function to calculate something and give you back the result? -This is where **return values** come in. A return value is sent back by the function and can be stored in a variable, just like a string or number. +That's where **return values** come in. Instead of just displaying something, a function can hand you back a value that you can store in a variable or use in other parts of your code. -If a function returns something, the `return` keyword is used. The `return` keyword expects a value or reference to be returned, like this: +To send a value back, you use the `return` keyword followed by whatever you want to return: ```javascript return myVariable; -``` +``` + +Here's something important: when a function hits a `return` statement, it immediately stops running and sends that value back to whoever called it. -We could create a function to generate a greeting message and return the result to the caller: +Let's modify our greeting function to return the message instead of printing it: ```javascript function createGreetingMessage(name) { @@ -133,19 +277,63 @@ function createGreetingMessage(name) { } ``` -When calling this function, we store the result in a variable, just as we would with a static value (e.g., `const name = 'Christopher'`). +Now instead of printing the greeting, this function creates the message and hands it back to us. + +To use the returned value, we can store it in a variable just like any other value: ```javascript const greetingMessage = createGreetingMessage('Christopher'); ``` +Now `greetingMessage` contains "Hello, Christopher" and we can use it anywhere in our code – to display it on a webpage, include it in an email, or pass it to another function. + +```mermaid +flowchart TD + A["🔧 Function Processing"] --> B{"return statement?"} + B -->|Yes| C["📤 Return Value"] + B -->|No| D["📭 Return undefined"] + + C --> E["💾 Store in Variable"] + C --> F["🔗 Use in Expression"] + C --> G["📞 Pass to Function"] + + D --> H["⚠️ Usually not useful"] + + I["📋 Return Value Uses"] --> I1["Calculate results"] + I --> I2["Validate input"] + I --> I3["Transform data"] + I --> I4["Create objects"] + + style C fill:#e8f5e8 + style D fill:#ffebee + style I fill:#e3f2fd +``` +### 🔄 **Return Values Check: Getting Results Back** + +**Evaluate your return value understanding:** +- What happens to code after a `return` statement in a function? +- Why is returning values often better than just printing to console? +- Can a function return different types of values (string, number, boolean)? + +```mermaid +pie title "Common Return Value Types" + "Strings" : 30 + "Numbers" : 25 + "Objects" : 20 + "Booleans" : 15 + "Arrays" : 10 +``` +> **Key insight**: Functions that return values are more versatile because the caller decides what to do with the result. This makes your code more modular and reusable! + ## Functions as parameters for functions -As you advance in programming, you’ll encounter functions that accept other functions as parameters. This is a handy technique, especially when we don’t know exactly when something will happen, but we know we need to perform an action in response. +Functions can be passed as parameters to other functions. While this concept may seem complex initially, it's a powerful feature that enables flexible programming patterns. + +This pattern is super common when you want to say "when something happens, do this other thing." For example, "when the timer finishes, run this code" or "when the user clicks the button, call this function." -For example, consider [setTimeout](https://developer.mozilla.org/docs/Web/API/WindowOrWorkerGlobalScope/setTimeout), which starts a timer and executes code when the timer ends. We need to specify what code to execute, which is a perfect job for a function! +Let's look at `setTimeout`, which is a built-in function that waits a certain amount of time and then runs some code. We need to tell it what code to run – perfect use case for passing a function! -If you run the code below, you’ll see the message **3 seconds has elapsed** after 3 seconds. +Try this code – after 3 seconds, you'll see a message: ```javascript function displayDone() { @@ -155,13 +343,15 @@ function displayDone() { setTimeout(displayDone, 3000); ``` +Notice how we pass `displayDone` (without parentheses) to `setTimeout`. We're not calling the function ourselves – we're handing it over to `setTimeout` and saying "call this in 3 seconds." + ### Anonymous functions -Let’s revisit the example above. We’re creating a function with a name that will only be used once. As our applications grow more complex, we might end up creating many single-use functions, which isn’t ideal. Fortunately, we don’t always need to give functions a name! +Sometimes you need a function for just one thing and don't want to give it a name. Think about it – if you're only using a function once, why clutter up your code with an extra name? -When passing a function as a parameter, we can skip creating it in advance and define it directly as part of the parameter. We use the `function` keyword, but we don’t assign a name. +JavaScript lets you create **anonymous functions** – functions without names that you can define right where you need them. -Here’s the rewritten code using an anonymous function: +Here's how we can rewrite our timer example using an anonymous function: ```javascript setTimeout(function() { @@ -169,13 +359,15 @@ setTimeout(function() { }, 3000); ``` -If you run this code, you’ll get the same result. We’ve created a function without giving it a name! +This achieves the same result, but the function is defined directly within the `setTimeout` call, eliminating the need for a separate function declaration. ### Fat arrow functions -Many programming languages, including JavaScript, offer a shortcut for defining functions called **arrow functions** or **fat arrow functions**. These use the `=>` symbol, which looks like an arrow—hence the name. By using `=>`, we can skip the `function` keyword. +Modern JavaScript has an even shorter way to write functions called **arrow functions**. They use `=>` (which looks like an arrow – get it?) and are super popular with developers. + +Arrow functions let you skip the `function` keyword and write more concise code. -Let’s rewrite the code one more time using a fat arrow function: +Here's our timer example using an arrow function: ```javascript setTimeout(() => { @@ -183,22 +375,94 @@ setTimeout(() => { }, 3000); ``` +The `()` is where parameters would go (empty in this case), then comes the arrow `=>`, and finally the function body in curly braces. This provides the same functionality with more concise syntax. + +```mermaid +flowchart LR + A["📝 Function Styles"] --> B["Traditional"] + A --> C["Arrow"] + A --> D["Anonymous"] + + B --> B1["function name() {}"] + B --> B2["Hoisted"] + B --> B3["Named"] + + C --> C1["const name = () => {}"] + C --> C2["Concise syntax"] + C --> C3["Modern style"] + + D --> D1["function() {}"] + D --> D2["No name"] + D --> D3["One-time use"] + + E["⏰ When to Use"] --> E1["Traditional: Reusable functions"] + E --> E2["Arrow: Short callbacks"] + E --> E3["Anonymous: Event handlers"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 +``` ### When to use each strategy -Now that you’ve seen three ways to pass a function as a parameter, you might wonder when to use each. If you know the function will be reused, define it as a regular function. If it’s only needed in one place, an anonymous function is usually the best choice. Whether you use a fat arrow function or the traditional `function` syntax is up to you, but most modern developers prefer `=>`. +When should you use each approach? A practical guideline: if you'll use the function multiple times, give it a name and define it separately. If it's for one specific use, consider an anonymous function. Both arrow functions and traditional syntax are valid choices, though arrow functions are prevalent in modern JavaScript codebases. + +### 🎨 **Function Styles Mastery Check: Choosing the Right Syntax** + +**Test your syntax understanding:** +- When might you prefer arrow functions over traditional function syntax? +- What's the main advantage of anonymous functions? +- Can you think of a situation where a named function is better than an anonymous one? + +```mermaid +quadrantChart + title Function Choice Decision Matrix + x-axis Simple --> Complex + y-axis One-time use --> Reusable + quadrant-1 Arrow Functions + quadrant-2 Named Functions + quadrant-3 Anonymous Functions + quadrant-4 Traditional Functions + + Event Handlers: [0.3, 0.2] + Utility Functions: [0.7, 0.8] + Callbacks: [0.2, 0.3] + Class Methods: [0.8, 0.7] + Mathematical Operations: [0.4, 0.6] +``` +> **Modern trend**: Arrow functions are becoming the default choice for many developers because of their concise syntax, but traditional functions still have their place! --- + + ## 🚀 Challenge -Can you explain the difference between functions and methods in one sentence? Give it a try! +Can you articulate in one sentence the difference between functions and methods? Give it a try! + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Create a utility library of mathematical functions that demonstrates different function concepts covered in this lesson, including parameters, default values, return values, and arrow functions. + +**Prompt:** Create a JavaScript file called `mathUtils.js` that contains the following functions: +1. A function `add` that takes two parameters and returns their sum +2. A function `multiply` with default parameter values (second parameter defaults to 1) +3. An arrow function `square` that takes a number and returns its square +4. A function `calculate` that accepts another function as a parameter and two numbers, then applies the function to those numbers +5. Demonstrate calling each function with appropriate test cases + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. ## Post-Lecture Quiz [Post-lecture quiz](https://ff-quizzes.netlify.app) ## Review & Self Study -It’s worth [reading more about arrow functions](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/Arrow_functions), as they are increasingly common in modern codebases. Practice writing a function and then rewriting it using this syntax. +It's worth [reading up a little more on arrow functions](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Functions/Arrow_functions), as they are increasingly used in code bases. Practice writing a function, and then rewriting it with this syntax. ## Assignment @@ -206,5 +470,105 @@ It’s worth [reading more about arrow functions](https://developer.mozilla.org/ --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +## 🧰 **Your JavaScript Functions Toolkit Summary** + +```mermaid +graph TD + A["🎯 JavaScript Functions"] --> B["📋 Function Declaration"] + A --> C["📥 Parameters"] + A --> D["📤 Return Values"] + A --> E["🎨 Modern Syntax"] + + B --> B1["function name() {}"] + B --> B2["Descriptive naming"] + B --> B3["Reusable code blocks"] + + C --> C1["Input data"] + C --> C2["Default values"] + C --> C3["Multiple parameters"] + + D --> D1["return statement"] + D --> D2["Exit function"] + D --> D3["Pass data back"] + + E --> E1["Arrow functions: () =>"] + E --> E2["Anonymous functions"] + E --> E3["Higher-order functions"] + + F["⚡ Key Benefits"] --> F1["Code reusability"] + F --> F2["Better organization"] + F --> F3["Easier testing"] + F --> F4["Modular design"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec +``` +--- + +## 🚀 Your JavaScript Functions Mastery Timeline + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Write a simple function that returns your favorite number +- [ ] Create a function with two parameters that adds them together +- [ ] Try converting a traditional function to arrow function syntax +- [ ] Practice the challenge: explain the difference between functions and methods + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and review any confusing concepts +- [ ] Build the math utilities library from the GitHub Copilot challenge +- [ ] Create a function that uses another function as a parameter +- [ ] Practice writing functions with default parameters +- [ ] Experiment with template literals in function return values + +### 📅 **Your Week-Long Function Mastery** +- [ ] Complete the "Fun with Functions" assignment with creativity +- [ ] Refactor some repetitive code you've written into reusable functions +- [ ] Build a small calculator using only functions (no global variables) +- [ ] Practice arrow functions with array methods like `map()` and `filter()` +- [ ] Create a collection of utility functions for common tasks +- [ ] Study higher-order functions and functional programming concepts + +### 🌟 **Your Month-Long Transformation** +- [ ] Master advanced function concepts like closures and scope +- [ ] Build a project that heavily uses function composition +- [ ] Contribute to open source by improving function documentation +- [ ] Teach someone else about functions and different syntax styles +- [ ] Explore functional programming paradigms in JavaScript +- [ ] Create a personal library of reusable functions for future projects + +### 🏆 **Final Functions Champion Check-in** + +**Celebrate your function mastery:** +- What's the most useful function you've created so far? +- How has learning about functions changed the way you think about code organization? +- Which function syntax do you prefer and why? +- What real-world problem would you solve by writing a function? + +```mermaid +journey + title Your Function Confidence Evolution + section Today + Confused by Syntax: 3: You + Understanding Basics: 4: You + Writing Simple Functions: 5: You + section This Week + Using Parameters: 4: You + Returning Values: 5: You + Modern Syntax: 5: You + section Next Month + Function Composition: 5: You + Advanced Patterns: 5: You + Teaching Others: 5: You +``` +> 🎉 **You've mastered one of programming's most powerful concepts!** Functions are the building blocks of larger programs. Every application you'll ever build will use functions to organize, reuse, and structure code. You now understand how to package logic into reusable components, making you a more efficient and effective programmer. Welcome to the world of modular programming! 🚀 + +--- + + +**Disclaimer**: +This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/2-functions-methods/assignment.md b/translations/en/2-js-basics/2-functions-methods/assignment.md index e80b69a16..30e6ae7de 100644 --- a/translations/en/2-js-basics/2-functions-methods/assignment.md +++ b/translations/en/2-js-basics/2-functions-methods/assignment.md @@ -1,27 +1,73 @@ - # Fun with Functions ## Instructions -Create various functions, including ones that return a value and ones that don't. +In this assignment, you'll practice creating different types of functions to reinforce the concepts you've learned about JavaScript functions, parameters, default values, and return statements. -Try to create a function that combines regular parameters with parameters that have default values. +Create a JavaScript file called `functions-practice.js` and implement the following functions: + +### Part 1: Basic Functions +1. **Create a function called `sayHello`** that doesn't take any parameters and simply logs "Hello!" to the console. + +2. **Create a function called `introduceYourself`** that takes a `name` parameter and logs a message like "Hi, my name is [name]" to the console. + +### Part 2: Functions with Default Parameters +3. **Create a function called `greetPerson`** that takes two parameters: `name` (required) and `greeting` (optional, defaults to "Hello"). The function should log a message like "[greeting], [name]!" to the console. + +### Part 3: Functions that Return Values +4. **Create a function called `addNumbers`** that takes two parameters (`num1` and `num2`) and returns their sum. + +5. **Create a function called `createFullName`** that takes `firstName` and `lastName` parameters and returns the full name as a single string. + +### Part 4: Mix It All Together +6. **Create a function called `calculateTip`** that takes two parameters: `billAmount` (required) and `tipPercentage` (optional, defaults to 15). The function should calculate and return the tip amount. + +### Part 5: Test Your Functions +Add function calls to test each of your functions and display the results using `console.log()`. + +**Example test calls:** +```javascript +// Test your functions here +sayHello(); +introduceYourself("Sarah"); +greetPerson("Alex"); +greetPerson("Maria", "Hi"); + +const sum = addNumbers(5, 3); +console.log(`The sum is: ${sum}`); + +const fullName = createFullName("John", "Doe"); +console.log(`Full name: ${fullName}`); + +const tip = calculateTip(50); +console.log(`Tip for $50 bill: $${tip}`); +``` ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------- | ----------------- | -| | Solution includes two or more well-designed functions with a variety of parameters | Solution includes one functional example with limited parameters | Solution contains errors | +| Criteria | Exemplary | Adequate | Needs Improvement | +| -------- | --------- | -------- | ----------------- | +| **Function Creation** | All 6 functions are correctly implemented with proper syntax and naming conventions | 4-5 functions are correctly implemented with minor syntax issues | 3 or fewer functions implemented or major syntax errors | +| **Parameters & Default Values** | Correctly uses required parameters, optional parameters, and default values as specified | Uses parameters correctly but may have issues with default values | Incorrect or missing parameter implementation | +| **Return Values** | Functions that should return values do so correctly, and functions that shouldn't return values only perform actions | Most return values are correct with minor issues | Significant problems with return statements | +| **Code Quality** | Clean, well-organized code with meaningful variable names and proper indentation | Code works but could be cleaner or better organized | Code is difficult to read or poorly structured | +| **Testing** | All functions are tested with appropriate function calls and results are displayed clearly | Most functions are tested adequately | Limited or incorrect testing of functions | + +## Bonus Challenges (Optional) + +If you want to challenge yourself further: + +1. **Create an arrow function version** of one of your functions +2. **Create a function that accepts another function as a parameter** (like the `setTimeout` examples from the lesson) +3. **Add input validation** to ensure your functions handle invalid inputs gracefully + +--- + +> 💡 **Tip**: Remember to open your browser's developer console (F12) to see the output of your `console.log()` statements! --- + **Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/3-making-decisions/README.md b/translations/en/2-js-basics/3-making-decisions/README.md index 56ec92ad7..eea52ef9a 100644 --- a/translations/en/2-js-basics/3-making-decisions/README.md +++ b/translations/en/2-js-basics/3-making-decisions/README.md @@ -1,23 +1,36 @@ - # JavaScript Basics: Making Decisions -![JavaScript Basics - Making decisions](../../../../translated_images/en/webdev101-js-decisions.69e1b20f272dd1f0b1cb2f8adaff3ed2a77c4f91db96d8a0594132a353fa189a.png) +![JavaScript Basics - Making decisions](../../../../translated_images/en/webdev101-js-decisions.69e1b20f272dd1f0.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +```mermaid +journey + title Your JavaScript Decision-Making Adventure + section Foundation + Boolean Values: 5: You + Comparison Operators: 4: You + Logical Thinking: 5: You + section Basic Decisions + If Statements: 4: You + If-Else Logic: 5: You + Switch Statements: 4: You + section Advanced Logic + Logical Operators: 5: You + Complex Conditions: 4: You + Ternary Expressions: 5: You +``` +Have you ever wondered how applications make smart decisions? Like how a navigation system chooses the fastest route, or how a thermostat decides when to turn on the heat? This is the fundamental concept of decision-making in programming. + +Just as Charles Babbage's Analytical Engine was designed to follow different sequences of operations based on conditions, modern JavaScript programs need to make choices based on varying circumstances. This ability to branch and make decisions is what transforms static code into responsive, intelligent applications. + +In this lesson, you'll learn how to implement conditional logic in your programs. We'll explore conditional statements, comparison operators, and logical expressions that allow your code to evaluate situations and respond appropriately. + ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/11) -Making decisions and controlling the flow of your code makes it reusable and reliable. This section explains the syntax for managing data flow in JavaScript and its importance when working with Boolean data types. +The ability to make decisions and control program flow is a fundamental aspect of programming. This section covers how to control the execution path of your JavaScript programs using Boolean values and conditional logic. [![Making Decisions](https://img.youtube.com/vi/SxTp8j-fMMY/0.jpg)](https://youtube.com/watch?v=SxTp8j-fMMY "Making Decisions") @@ -25,76 +38,226 @@ Making decisions and controlling the flow of your code makes it reusable and rel > You can take this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-if-else/?WT.mc_id=academic-77807-sagibbon)! +```mermaid +mindmap + root((Decision Making)) + Boolean Logic + true/false + Comparison results + Logical expressions + Conditional Statements + if statements + Single condition + Code execution + if-else + Two paths + Alternative actions + switch + Multiple options + Clean structure + Operators + Comparison + === !== < > <= >= + Value relationships + Logical + && || ! + Combine conditions + Advanced Patterns + Ternary + ? : syntax + Inline decisions + Complex Logic + Nested conditions + Multiple criteria +``` ## A Brief Recap on Booleans -Booleans can only have two values: `true` or `false`. They are used to decide which lines of code should execute based on specific conditions. +Before exploring decision-making, let's revisit Boolean values from our previous lesson. Named after mathematician George Boole, these values represent binary states – either `true` or `false`. There's no ambiguity, no middle ground. -You can set a Boolean value like this: +These binary values form the foundation of all computational logic. Every decision your program makes ultimately reduces to a Boolean evaluation. -`let myTrueBool = true` -`let myFalseBool = false` +Creating Boolean variables is straightforward: -✅ Booleans are named after George Boole, an English mathematician, philosopher, and logician (1815–1864). +```javascript +let myTrueBool = true; +let myFalseBool = false; +``` + +This creates two variables with explicit Boolean values. + +✅ Booleans are named after the English mathematician, philosopher and logician George Boole (1815–1864). ## Comparison Operators and Booleans -Operators are used to evaluate conditions by comparing values, resulting in a Boolean value. Below is a list of commonly used operators: +In practice, you'll rarely set Boolean values manually. Instead, you'll generate them by evaluating conditions: "Is this number greater than that one?" or "Are these values equal?" + +Comparison operators enable these evaluations. They compare values and return Boolean results based on the relationship between the operands. | Symbol | Description | Example | | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------ | -| `<` | **Less than**: Compares two values and returns `true` if the value on the left is smaller than the value on the right | `5 < 6 // true` | -| `<=` | **Less than or equal to**: Compares two values and returns `true` if the value on the left is smaller than or equal to the value on the right | `5 <= 6 // true` | -| `>` | **Greater than**: Compares two values and returns `true` if the value on the left is larger than the value on the right | `5 > 6 // false` | -| `>=` | **Greater than or equal to**: Compares two values and returns `true` if the value on the left is larger than or equal to the value on the right | `5 >= 6 // false` | -| `===` | **Strict equality**: Compares two values and returns `true` if both values are equal and of the same data type | `5 === 6 // false` | +| `<` | **Less than**: Compares two values and returns the `true` Boolean data type if the value on the left side is less than the right | `5 < 6 // true` | +| `<=` | **Less than or equal to**: Compares two values and returns the `true` Boolean data type if the value on the left side is less than or equal to the right | `5 <= 6 // true` | +| `>` | **Greater than**: Compares two values and returns the `true` Boolean data type if the value on the left side is larger than the right | `5 > 6 // false` | +| `>=` | **Greater than or equal to**: Compares two values and returns the `true` Boolean data type if the value on the left side is larger than or equal to the right | `5 >= 6 // false` | +| `===` | **Strict equality**: Compares two values and returns the `true` Boolean data type if values on the right and left are equal AND are the same data type. | `5 === 6 // false` | | `!==` | **Inequality**: Compares two values and returns the opposite Boolean value of what a strict equality operator would return | `5 !== 6 // true` | -✅ Test your understanding by writing some comparisons in your browser's console. Were any results unexpected? +✅ Check your knowledge by writing some comparisons in your browser's console. Does any returned data surprise you? + +```mermaid +flowchart LR + A["🔢 Values"] --> B["⚖️ Comparison"] + B --> C["✅ Boolean Result"] + + D["5"] --> E["< 6"] + E --> F["true"] + + G["10"] --> H["=== '10'"] + H --> I["false"] + + J["'hello'"] --> K["!== 'world'"] + K --> L["true"] + + M["📋 Operator Types"] --> M1["Equality: === !=="] + M --> M2["Relational: < > <= >="] + M --> M3["Strict vs Loose"] + + style A fill:#e3f2fd + style C fill:#e8f5e8 + style M fill:#fff3e0 +``` +### 🧠 **Comparison Mastery Check: Understanding Boolean Logic** + +**Test your comparison understanding:** +- Why do you think `===` (strict equality) is generally preferred over `==` (loose equality)? +- Can you predict what `5 === '5'` returns? How about `5 == '5'`? +- What's the difference between `!==` and `!=`? + +```mermaid +stateDiagram-v2 + [*] --> Comparison: Two values + Comparison --> StrictEqual: === or !== + Comparison --> Relational: < > <= >= + + StrictEqual --> TypeCheck: Check type AND value + Relational --> NumberCompare: Convert to numbers + + TypeCheck --> BooleanResult: true or false + NumberCompare --> BooleanResult + + note right of StrictEqual + Preferred approach + No type conversion + end note + + note right of Relational + Useful for ranges + Numerical comparisons + end note +``` +> **Pro tip**: Always use `===` and `!==` for equality checks unless you specifically need type conversion. This prevents unexpected behavior! ## If Statement -The `if` statement executes the code within its block if the condition evaluates to `true`. +The `if` statement is like asking a question in your code. "If this condition is true, then do this thing." It's probably the most important tool you'll use for making decisions in JavaScript. + +Here's how it works: ```javascript if (condition) { - //Condition is true. Code in this block will run. + // Condition is true. Code in this block will run. } ``` -Logical operators are often used to create the condition. +The condition goes inside the parentheses, and if it's `true`, JavaScript runs the code inside the curly braces. If it's `false`, JavaScript just skips that whole block. + +You'll often use comparison operators to create these conditions. Let's see a practical example: ```javascript -let currentMoney; -let laptopPrice; +let currentMoney = 1000; +let laptopPrice = 800; if (currentMoney >= laptopPrice) { - //Condition is true. Code in this block will run. + // Condition is true. Code in this block will run. console.log("Getting a new laptop!"); } ``` +Since `1000 >= 800` evaluates to `true`, the code inside the block executes, displaying "Getting a new laptop!" in the console. + +```mermaid +flowchart TD + A["🚀 Program Start"] --> B{"💰 currentMoney >= laptopPrice?"} + B -->|true| C["🎉 'Getting a new laptop!'"] + B -->|false| D["⏭️ Skip code block"] + C --> E["📋 Continue program"] + D --> E + + F["📊 If Statement Structure"] --> F1["if (condition) {"] + F1 --> F2[" // code to run if true"] + F2 --> F3["}"] + + style B fill:#fff3e0 + style C fill:#e8f5e8 + style D fill:#ffebee + style F fill:#e3f2fd +``` ## If..Else Statement -The `else` statement executes the code within its block when the condition is `false`. It is optional when using an `if` statement. +But what if you want your program to do something different when the condition is false? That's where `else` comes in – it's like having a backup plan. + +The `else` statement gives you a way to say "if this condition isn't true, do this other thing instead." ```javascript -let currentMoney; -let laptopPrice; +let currentMoney = 500; +let laptopPrice = 800; if (currentMoney >= laptopPrice) { - //Condition is true. Code in this block will run. + // Condition is true. Code in this block will run. console.log("Getting a new laptop!"); } else { - //Condition is false. Code in this block will run. + // Condition is false. Code in this block will run. console.log("Can't afford a new laptop, yet!"); } ``` -✅ Test your understanding of this code and the following code by running it in a browser console. Modify the values of the `currentMoney` and `laptopPrice` variables to see how the `console.log()` output changes. +Now since `500 >= 800` is `false`, JavaScript skips the first block and runs the `else` block instead. You'll see "Can't afford a new laptop, yet!" in the console. + +✅ Test your understanding of this code and the following code by running it in a browser console. Change the values of the currentMoney and laptopPrice variables to change the returned `console.log()`. + +### 🎯 **If-Else Logic Check: Branching Paths** + +**Evaluate your conditional logic understanding:** +- What happens if `currentMoney` exactly equals `laptopPrice`? +- Can you think of a real-world scenario where if-else logic would be useful? +- How might you extend this to handle multiple price ranges? + +```mermaid +flowchart TD + A["🔍 Evaluate Condition"] --> B{"Condition True?"} + B -->|Yes| C["📤 Execute IF block"] + B -->|No| D["📥 Execute ELSE block"] + + C --> E["✅ One path taken"] + D --> E + + F["🌐 Real-world Examples"] --> F1["User login status"] + F --> F2["Age verification"] + F --> F3["Form validation"] + F --> F4["Game state changes"] + + style B fill:#fff3e0 + style C fill:#e8f5e8 + style D fill:#e3f2fd + style F fill:#f3e5f5 +``` +> **Key insight**: If-else ensures exactly one path is taken. This guarantees your program always has a response to any condition! ## Switch Statement -The `switch` statement allows you to perform different actions based on different conditions. Use it to select one of many code blocks to execute. +Sometimes you need to compare one value against multiple options. While you could chain several `if..else` statements, this approach becomes unwieldy. The `switch` statement provides a cleaner structure for handling multiple discrete values. + +The concept resembles the mechanical switching systems used in early telephone exchanges – one input value determines which specific path the execution follows. ```javascript switch (expression) { @@ -105,61 +268,179 @@ switch (expression) { // code block break; default: - // code block + // code block } ``` +Here's how it's structured: +- JavaScript evaluates the expression once +- It looks through each `case` to find a match +- When it finds a match, it runs that code block +- The `break` tells JavaScript to stop and exit the switch +- If no cases match, it runs the `default` block (if you have one) + ```javascript -// program using switch statement -let a = 2; +// Program using switch statement for day of week +let dayNumber = 2; +let dayName; -switch (a) { +switch (dayNumber) { case 1: - a = "one"; + dayName = "Monday"; break; case 2: - a = "two"; + dayName = "Tuesday"; + break; + case 3: + dayName = "Wednesday"; break; default: - a = "not found"; + dayName = "Unknown day"; break; } -console.log(`The value is ${a}`); +console.log(`Today is ${dayName}`); ``` -✅ Test your understanding of this code and the following code by running it in a browser console. Modify the value of the variable `a` to see how the `console.log()` output changes. +In this example, JavaScript sees that `dayNumber` is `2`, finds the matching `case 2`, sets `dayName` to "Tuesday", and then breaks out of the switch. The result? "Today is Tuesday" gets logged to the console. + +```mermaid +flowchart TD + A["📥 switch(expression)"] --> B["🔍 Evaluate once"] + B --> C{"Match case 1?"} + C -->|Yes| D["📋 Execute case 1"] + C -->|No| E{"Match case 2?"} + E -->|Yes| F["📋 Execute case 2"] + E -->|No| G{"Match case 3?"} + G -->|Yes| H["📋 Execute case 3"] + G -->|No| I["📋 Execute default"] + + D --> J["🛑 break"] + F --> K["🛑 break"] + H --> L["🛑 break"] + + J --> M["✅ Exit switch"] + K --> M + L --> M + I --> M + + style A fill:#e3f2fd + style B fill:#fff3e0 + style M fill:#e8f5e8 +``` +✅ Test your understanding of this code and the following code by running it in a browser console. Change the values of the variable a to change the returned `console.log()`. + +### 🔄 **Switch Statement Mastery: Multiple Options** + +**Test your switch understanding:** +- What happens if you forget a `break` statement? +- When would you use `switch` instead of multiple `if-else` statements? +- Why is the `default` case useful even if you think you've covered all possibilities? + +```mermaid +pie title "When to Use Each Decision Structure" + "Simple if-else" : 40 + "Complex if-else chains" : 25 + "Switch statements" : 20 + "Ternary operators" : 15 +``` +> **Best practice**: Use `switch` when comparing one variable against multiple specific values. Use `if-else` for range checks or complex conditions! ## Logical Operators and Booleans -Sometimes decisions require multiple comparisons, which can be combined using logical operators to produce a Boolean value. +Complex decisions often require evaluating multiple conditions simultaneously. Just as Boolean algebra allows mathematicians to combine logical expressions, programming provides logical operators to connect multiple Boolean conditions. + +These operators enable sophisticated conditional logic by combining simple true/false evaluations. | Symbol | Description | Example | | ------ | ----------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- | -| `&&` | **Logical AND**: Compares two Boolean expressions. Returns `true` **only** if both sides are true | `(5 > 6) && (5 < 6) // One side is false, the other is true. Returns false` | -| `\|\|` | **Logical OR**: Compares two Boolean expressions. Returns `true` if at least one side is true | `(5 > 6) \|\| (5 < 6) // One side is false, the other is true. Returns true` | -| `!` | **Logical NOT**: Returns the opposite value of a Boolean expression | `!(5 > 6) // 5 is not greater than 6, but "!" will return true` | - +| `&&` | **Logical AND**: Compares two Boolean expressions. Returns true **only** if both sides are true | `(5 > 3) && (5 < 10) // Both sides are true. Returns true` | +| `\|\|` | **Logical OR**: Compares two Boolean expressions. Returns true if at least one side is true | `(5 > 10) \|\| (5 < 10) // One side is false, other is true. Returns true` | +| `!` | **Logical NOT**: Returns the opposite value of a Boolean expression | `!(5 > 10) // 5 is not greater than 10, so "!" makes it true` | + +These operators let you combine conditions in useful ways: +- AND (`&&`) means both conditions must be true +- OR (`||`) means at least one condition must be true +- NOT (`!`) flips true to false (and vice versa) + +```mermaid +flowchart LR + A["🔗 Logical Operators"] --> B["&& AND"] + A --> C["|| OR"] + A --> D["! NOT"] + + B --> B1["Both must be true"] + B --> B2["true && true = true"] + B --> B3["true && false = false"] + + C --> C1["At least one true"] + C --> C2["true || false = true"] + C --> C3["false || false = false"] + + D --> D1["Flips the value"] + D --> D2["!true = false"] + D --> D3["!false = true"] + + E["🌍 Real Examples"] --> E1["Age >= 18 && hasLicense"] + E --> E2["isWeekend || isHoliday"] + E --> E3["!isLoggedIn"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 +``` ## Conditions and Decisions with Logical Operators -Logical operators can be used to create conditions in `if..else` statements. +Let's see these logical operators in action with a more realistic example: ```javascript -let currentMoney; -let laptopPrice; -let laptopDiscountPrice = laptopPrice - laptopPrice * 0.2; //Laptop price at 20 percent off +let currentMoney = 600; +let laptopPrice = 800; +let laptopDiscountPrice = laptopPrice - (laptopPrice * 0.2); // Laptop price at 20 percent off if (currentMoney >= laptopPrice || currentMoney >= laptopDiscountPrice) { - //Condition is true. Code in this block will run. + // Condition is true. Code in this block will run. console.log("Getting a new laptop!"); } else { - //Condition is true. Code in this block will run. + // Condition is false. Code in this block will run. console.log("Can't afford a new laptop, yet!"); } ``` +In this example: we calculate a 20% discount price (640), then evaluate whether our available funds cover either the full price OR the discounted price. Since 600 meets the discounted price threshold of 640, the condition evaluates to true. + +### 🧮 **Logical Operators Check: Combining Conditions** + +**Test your logical operator understanding:** +- In the expression `A && B`, what happens if A is false? Does B even get evaluated? +- Can you think of a situation where you'd need all three operators (&&, ||, !) together? +- What's the difference between `!user.isActive` and `user.isActive !== true`? + +```mermaid +stateDiagram-v2 + [*] --> EvaluateA: A && B + EvaluateA --> CheckB: A is true + EvaluateA --> ReturnFalse: A is false + CheckB --> ReturnTrue: B is true + CheckB --> ReturnFalse: B is false + + [*] --> EvaluateC: A || B + EvaluateC --> ReturnTrue: A is true + EvaluateC --> CheckD: A is false + CheckD --> ReturnTrue: B is true + CheckD --> ReturnFalse: B is false + + note right of EvaluateA + Short-circuit evaluation: + If A is false, B is never checked + end note +``` +> **Performance tip**: JavaScript uses "short-circuit evaluation" - in `A && B`, if A is false, B isn't even evaluated. Use this to your advantage! + ### Negation Operator -You've seen how `if...else` statements can be used to create conditional logic. Anything inside an `if` must evaluate to `true` or `false`. The `!` operator allows you to _negate_ an expression, like this: +Sometimes it's easier to think about when something is NOT true. Like instead of asking "Is the user logged in?", you might want to ask "Is the user NOT logged in?" The exclamation mark (`!`) operator flips the logic for you. ```javascript if (!condition) { @@ -169,15 +450,19 @@ if (!condition) { } ``` +The `!` operator is like saying "the opposite of..." – if something is `true`, `!` makes it `false`, and vice versa. + ### Ternary Expressions -`if...else` isn't the only way to express decision-making logic. You can also use a ternary operator, which has the following syntax: +For simple conditional assignments, JavaScript provides the **ternary operator**. This concise syntax allows you to write a conditional expression in a single line, useful when you need to assign one of two values based on a condition. ```javascript -let variable = condition ? : +let variable = condition ? returnThisIfTrue : returnThisIfFalse; ``` -Here's a more practical example: +It reads like a question: "Is this condition true? If yes, use this value. If no, use that value." + +Below is a more tangible example: ```javascript let firstNumber = 20; @@ -185,15 +470,11 @@ let secondNumber = 10; let biggestNumber = firstNumber > secondNumber ? firstNumber : secondNumber; ``` -✅ Take a moment to read this code carefully. Do you understand how these operators work? - -The example above states: +✅ Take a minute to read this code a few times. Do you understand how these operators are working? -- If `firstNumber` is greater than `secondNumber`, - assign `firstNumber` to `biggestNumber`. -- Otherwise, assign `secondNumber`. +Here's what this line is saying: "Is `firstNumber` greater than `secondNumber`? If yes, put `firstNumber` in `biggestNumber`. If no, put `secondNumber` in `biggestNumber`." -The ternary expression is simply a compact way of writing the following code: +The ternary operator is just a shorter way to write this traditional `if..else` statement: ```javascript let biggestNumber; @@ -204,29 +485,179 @@ if (firstNumber > secondNumber) { } ``` +Both approaches produce identical results. The ternary operator offers conciseness, while the traditional if-else structure may be more readable for complex conditions. + +```mermaid +flowchart LR + A["🤔 Ternary Operator"] --> B["condition ?"] + B --> C["valueIfTrue :"] + C --> D["valueIfFalse"] + + E["📝 Traditional If-Else"] --> F["if (condition) {"] + F --> G[" return valueIfTrue"] + G --> H["} else {"] + H --> I[" return valueIfFalse"] + I --> J["}"] + + K["⚡ When to Use"] --> K1["Simple assignments"] + K --> K2["Short conditions"] + K --> K3["Inline decisions"] + K --> K4["Return statements"] + + style A fill:#e3f2fd + style E fill:#fff3e0 + style K fill:#e8f5e8 +``` --- -## 🚀 Challenge - -Write a program using logical operators, then rewrite it using a ternary expression. Which syntax do you prefer? - ---- - -## Post-Lecture Quiz - -[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/12) -## Review & Self Study -Learn more about the various operators available to you [on MDN](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators). +## 🚀 Challenge -Check out Josh Comeau's excellent [operator lookup](https://joshwcomeau.com/operator-lookup/)! +Create a program that is written first with logical operators, and then rewrite it using a ternary expression. What's your preferred syntax? -## Assignment +--- -[Operators](assignment.md) +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Create a comprehensive grade calculator that demonstrates multiple decision-making concepts from this lesson, including if-else statements, switch statements, logical operators, and ternary expressions. + +**Prompt:** Write a JavaScript program that takes a student's numerical score (0-100) and determines their letter grade using the following criteria: +- A: 90-100 +- B: 80-89 +- C: 70-79 +- D: 60-69 +- F: Below 60 + +Requirements: +1. Use an if-else statement to determine the letter grade +2. Use logical operators to check if the student passes (grade >= 60) AND has honors (grade >= 90) +3. Use a switch statement to provide specific feedback for each letter grade +4. Use a ternary operator to determine if the student is eligible for the next course (grade >= 70) +5. Include input validation to ensure the score is between 0 and 100 + +Test your program with various scores including edge cases like 59, 60, 89, 90, and invalid inputs. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + + +## Post-Lecture Quiz + +[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/12) + +## Review & Self Study + +Read more about the many operators available to the user [on MDN](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators). + +Go through Josh Comeau's wonderful [operator lookup](https://joshwcomeau.com/operator-lookup/)! + +## Assignment + +[Operators](assignment.md) + +--- + +## 🧠 **Your Decision-Making Toolkit Summary** + +```mermaid +graph TD + A["🎯 JavaScript Decisions"] --> B["🔍 Boolean Logic"] + A --> C["📊 Conditional Statements"] + A --> D["🔗 Logical Operators"] + A --> E["⚡ Advanced Patterns"] + + B --> B1["true/false values"] + B --> B2["Comparison operators"] + B --> B3["Truthiness concepts"] + + C --> C1["if statements"] + C --> C2["if-else chains"] + C --> C3["switch statements"] + + D --> D1["&& (AND)"] + D --> D2["|| (OR)"] + D --> D3["! (NOT)"] + + E --> E1["Ternary operator"] + E --> E2["Short-circuit evaluation"] + E --> E3["Complex conditions"] + + F["💡 Key Principles"] --> F1["Clear readable conditions"] + F --> F2["Consistent comparison style"] + F --> F3["Proper operator precedence"] + F --> F4["Efficient evaluation order"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec +``` +--- + +## 🚀 Your JavaScript Decision-Making Mastery Timeline + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Practice comparison operators in your browser console +- [ ] Write a simple if-else statement that checks your age +- [ ] Try the challenge: rewrite an if-else using a ternary operator +- [ ] Test what happens with different "truthy" and "falsy" values + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and review any confusing concepts +- [ ] Build the comprehensive grade calculator from the GitHub Copilot challenge +- [ ] Create a simple decision tree for a real-world scenario (like choosing what to wear) +- [ ] Practice combining multiple conditions with logical operators +- [ ] Experiment with switch statements for different use cases + +### 📅 **Your Week-Long Logic Mastery** +- [ ] Complete the operators assignment with creative examples +- [ ] Build a mini quiz application using various conditional structures +- [ ] Create a form validator that checks multiple input conditions +- [ ] Practice Josh Comeau's [operator lookup](https://joshwcomeau.com/operator-lookup/) exercises +- [ ] Refactor existing code to use more appropriate conditional structures +- [ ] Study short-circuit evaluation and performance implications + +### 🌟 **Your Month-Long Transformation** +- [ ] Master complex nested conditions and maintain code readability +- [ ] Build an application with sophisticated decision-making logic +- [ ] Contribute to open source by improving conditional logic in existing projects +- [ ] Teach someone else about different conditional structures and when to use each +- [ ] Explore functional programming approaches to conditional logic +- [ ] Create a personal reference guide for conditional best practices + +### 🏆 **Final Decision-Making Champion Check-in** + +**Celebrate your logical thinking mastery:** +- What's the most complex decision logic you've successfully implemented? +- Which conditional structure feels most natural to you and why? +- How has learning about logical operators changed your problem-solving approach? +- What real-world application would benefit from sophisticated decision-making logic? + +```mermaid +journey + title Your Logical Thinking Evolution + section Today + Boolean Confusion: 3: You + If-Else Understanding: 4: You + Operator Recognition: 5: You + section This Week + Complex Conditions: 4: You + Switch Mastery: 5: You + Logical Combinations: 5: You + section Next Month + Advanced Patterns: 5: You + Performance Awareness: 5: You + Teaching Others: 5: You +``` +> 🧠 **You've mastered the art of digital decision-making!** Every interactive application relies on conditional logic to respond intelligently to user actions and changing conditions. You now understand how to make your programs think, evaluate, and choose appropriate responses. This logical foundation will power every dynamic application you build! 🎉 --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/3-making-decisions/assignment.md b/translations/en/2-js-basics/3-making-decisions/assignment.md index e23e23fd8..2aaff633b 100644 --- a/translations/en/2-js-basics/3-making-decisions/assignment.md +++ b/translations/en/2-js-basics/3-making-decisions/assignment.md @@ -1,54 +1,111 @@ - -# Operators +# Making Decisions: Student Grade Processor -## Instructions +## Learning Objectives -Experiment with operators. Here's an idea for a program you can create: +In this assignment, you'll practice the decision-making concepts from this lesson by building a program that processes student grades from different grading systems. You'll use `if...else` statements, comparison operators, and logical operators to determine which students pass their courses. -You have a group of students from two different grading systems. +## The Challenge -### First grading system +You work for a school that recently merged with another institution. Now you need to process student grades from two completely different grading systems and determine which students are passing. This is a perfect opportunity to practice conditional logic! -One grading system uses grades ranging from 1 to 5, where a grade of 3 or higher means the student passes the course. +### Understanding the Grading Systems -### Second grading system +#### First Grading System (Numeric) +- Grades are given as numbers from 1-5 +- **Passing grade**: 3 and above (3, 4, or 5) +- **Failing grade**: Below 3 (1 or 2) -The other grading system uses the grades `A, A-, B, B-, C, C-`, where `A` is the highest grade and `C` is the lowest passing grade. +#### Second Grading System (Letter Grades) +- Grades use letters: `A`, `A-`, `B`, `B-`, `C`, `C-` +- **Passing grades**: `A`, `A-`, `B`, `B-`, `C`, `C-` (all listed grades are passing) +- **Note**: This system doesn't include failing grades like `D` or `F` -### The task +### Your Task -Using the array `allStudents`, which represents all students and their grades, create a new array `studentsWhoPass` that includes only the students who pass. - -> TIP: Use a for-loop, if...else statements, and comparison operators: +Given the following array `allStudents` representing all students and their grades, construct a new array `studentsWhoPass` containing all students who pass according to their respective grading systems. ```javascript let allStudents = [ - 'A', - 'B-', - 1, - 4, - 5, - 2 -] + 'A', // Letter grade - passing + 'B-', // Letter grade - passing + 1, // Numeric grade - failing + 4, // Numeric grade - passing + 5, // Numeric grade - passing + 2 // Numeric grade - failing +]; let studentsWhoPass = []; ``` +### Step-by-Step Approach + +1. **Set up a loop** to go through each grade in the `allStudents` array +2. **Check the grade type** (is it a number or a string?) +3. **Apply the appropriate grading system rules**: + - For numbers: check if grade >= 3 + - For strings: check if it's one of the valid passing letter grades +4. **Add passing grades** to the `studentsWhoPass` array + +### Helpful Code Techniques + +Use these JavaScript concepts from the lesson: + +- **typeof operator**: `typeof grade === 'number'` to check if it's a numeric grade +- **Comparison operators**: `>=` to compare numeric grades +- **Logical operators**: `||` to check multiple letter grade conditions +- **if...else statements**: to handle different grading systems +- **Array methods**: `.push()` to add passing grades to your new array + +### Expected Output + +When you run your program, `studentsWhoPass` should contain: `['A', 'B-', 4, 5]` + +**Why these grades pass:** +- `'A'` and `'B-'` are valid letter grades (all letter grades in this system are passing) +- `4` and `5` are numeric grades >= 3 +- `1` and `2` fail because they're numeric grades < 3 + +## Testing Your Solution + +Test your code with different scenarios: + +```javascript +// Test with different grade combinations +let testGrades1 = ['A-', 3, 'C', 1, 'B']; +let testGrades2 = [5, 'A', 2, 'C-', 4]; + +// Your solution should work with any combination of valid grades +``` + +## Bonus Challenges + +Once you complete the basic assignment, try these extensions: + +1. **Add validation**: Check for invalid grades (like negative numbers or invalid letters) +2. **Count statistics**: Calculate how many students pass vs. fail +3. **Grade conversion**: Convert all grades to a single numeric system (A=5, B=4, C=3, etc.) + ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | ----------------------------- | ----------------------------- | ------------------------------- | -| | A complete solution is provided | A partial solution is provided | A solution with errors is provided | +| Criteria | Exemplary (4) | Proficient (3) | Developing (2) | Beginning (1) | +|----------|---------------|----------------|----------------|---------------| +| **Functionality** | Program correctly identifies all passing grades from both systems | Program works with minor issues or edge cases | Program partially works but has logical errors | Program has significant errors or doesn't run | +| **Code Structure** | Clean, well-organized code with proper if...else logic | Good structure with appropriate conditional statements | Acceptable structure with some organizational issues | Poor structure, difficult to follow logic | +| **Use of Concepts** | Effectively uses comparison operators, logical operators, and conditional statements | Good use of lesson concepts with minor gaps | Some use of lesson concepts but missing key elements | Limited use of lesson concepts | +| **Problem Solving** | Shows clear understanding of the problem and elegant solution approach | Good problem-solving approach with solid logic | Adequate problem-solving with some confusion | Unclear approach, doesn't demonstrate understanding | + +## Submission Guidelines + +1. **Test your code** thoroughly with the provided examples +2. **Add comments** explaining your logic, especially for the conditional statements +3. **Verify output** matches expected results: `['A', 'B-', 4, 5]` +4. **Consider edge cases** like empty arrays or unexpected data types + +> 💡 **Pro Tip**: Start simple! Get the basic functionality working first, then add more sophisticated features. Remember, the goal is to practice decision-making logic with the tools you learned in this lesson. --- + **Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/4-arrays-loops/README.md b/translations/en/2-js-basics/4-arrays-loops/README.md index 71af1d6fe..f51cde494 100644 --- a/translations/en/2-js-basics/4-arrays-loops/README.md +++ b/translations/en/2-js-basics/4-arrays-loops/README.md @@ -1,141 +1,631 @@ - # JavaScript Basics: Arrays and Loops -![JavaScript Basics - Arrays](../../../../translated_images/en/webdev101-js-arrays.439d7528b8a294558d0e4302e448d193f8ad7495cc407539cc81f1afe904b470.png) +![JavaScript Basics - Arrays](../../../../translated_images/en/webdev101-js-arrays.439d7528b8a29455.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +```mermaid +journey + title Your Arrays & Loops Adventure + section Array Fundamentals + Creating Arrays: 5: You + Accessing Elements: 4: You + Array Methods: 5: You + section Loop Mastery + For Loops: 4: You + While Loops: 5: You + Modern Syntax: 4: You + section Data Processing + Array + Loops: 5: You + Real-world Applications: 4: You + Performance Optimization: 5: You +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/13) -This lesson introduces the fundamentals of JavaScript, the programming language that adds interactivity to websites. In this lesson, you'll explore arrays and loops, which are essential for working with and manipulating data. +Ever wondered how websites keep track of shopping cart items or display your friend list? That's where arrays and loops come in. Arrays are like digital containers that hold multiple pieces of information, while loops let you work with all that data efficiently without repetitive code. + +Together, these two concepts form the foundation for handling information in your programs. You'll learn to move from manually writing out every single step to creating smart, efficient code that can process hundreds or even thousands of items quickly. + +By the end of this lesson, you'll understand how to accomplish complex data tasks with just a few lines of code. Let's explore these essential programming concepts. [![Arrays](https://img.youtube.com/vi/1U4qTyq02Xw/0.jpg)](https://youtube.com/watch?v=1U4qTyq02Xw "Arrays") [![Loops](https://img.youtube.com/vi/Eeh7pxtTZ3k/0.jpg)](https://www.youtube.com/watch?v=Eeh7pxtTZ3k "Loops") -> 🎥 Click the images above to watch videos about arrays and loops. +> 🎥 Click the images above for videos about arrays and loops. + +> You can take this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-arrays/?WT.mc_id=academic-77807-sagibbon)! + +```mermaid +mindmap + root((Data Processing)) + Arrays + Structure + Square brackets syntax + Zero-based indexing + Dynamic sizing + Operations + push/pop + shift/unshift + indexOf/includes + Types + Numbers array + Strings array + Mixed types + Loops + For Loops + Counting iterations + Array processing + Predictable flow + While Loops + Condition-based + Unknown iterations + User input + Modern Syntax + for...of + forEach + Functional methods + Applications + Data Analysis + Statistics + Filtering + Transformations + User Interfaces + Lists + Menus + Galleries +``` +## Arrays -> You can also take this lesson on [Microsoft Learn](https://docs.microsoft.com/learn/modules/web-development-101-arrays/?WT.mc_id=academic-77807-sagibbon)! +Think of arrays as a digital filing cabinet - instead of storing one document per drawer, you can organize multiple related items in a single, structured container. In programming terms, arrays let you store multiple pieces of information in one organized package. -## Arrays +Whether you're building a photo gallery, managing a to-do list, or keeping track of high scores in a game, arrays provide the foundation for data organization. Let's see how they work. -Handling data is a common task in programming, and it becomes much easier when the data is organized in a structured format, like arrays. Arrays store data in a list-like structure. One key advantage of arrays is that they can hold different types of data within the same array. +✅ Arrays are all around us! Can you think of a real-life example of an array, such as a solar panel array? -✅ Arrays are everywhere! Can you think of a real-world example of an array, like a solar panel array? +### Creating Arrays -The syntax for creating an array involves square brackets. +Creating an array is super simple - just use square brackets! ```javascript -let myArray = []; +// Empty array - like an empty shopping cart waiting for items +const myArray = []; ``` -This is an empty array, but arrays can also be initialized with data already inside them. Multiple values in an array are separated by commas. +**What's happening here?** +You've just created an empty container using those square brackets `[]`. Think of it like an empty library shelf - it's ready to hold whatever books you want to organize there. + +You can also fill your array with initial values right from the start: ```javascript -let iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; +// Your ice cream shop's flavor menu +const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; + +// A user's profile info (mixing different types of data) +const userData = ["John", 25, true, "developer"]; + +// Test scores for your favorite class +const scores = [95, 87, 92, 78, 85]; ``` -Each value in an array is assigned a unique identifier called the **index**, which is a whole number based on its position in the array. In the example above, the string "Chocolate" has an index of 0, while "Rocky Road" has an index of 4. You can use the index with square brackets to access, modify, or add values to the array. +**Cool things to notice:** +- You can store text, numbers, or even true/false values in the same array +- Just separate each item with a comma - easy! +- Arrays are perfect for keeping related information together + +```mermaid +flowchart LR + A["📦 Arrays"] --> B["Create [ ]"] + A --> C["Store Multiple Items"] + A --> D["Access by Index"] + + B --> B1["const arr = []"] + B --> B2["const arr = [1,2,3]"] + + C --> C1["Numbers"] + C --> C2["Strings"] + C --> C3["Booleans"] + C --> C4["Mixed Types"] + + D --> D1["arr[0] = first"] + D --> D2["arr[1] = second"] + D --> D3["arr[2] = third"] + + E["📊 Array Index"] --> E1["Index 0: First"] + E --> E2["Index 1: Second"] + E --> E3["Index 2: Third"] + E --> E4["Index n-1: Last"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 +``` +### Array Indexing -✅ Did you know that arrays start at index 0? In some programming languages, indexes begin at 1. There's an interesting history behind this, which you can [read about on Wikipedia](https://en.wikipedia.org/wiki/Zero-based_numbering). +Here's something that might seem unusual at first: arrays number their items starting from 0, not 1. This zero-based indexing has its roots in how computer memory works - it's been a programming convention since the early days of computing languages like C. Each spot in the array gets its own address number called an **index**. + +| Index | Value | Description | +|-------|-------|-------------| +| 0 | "Chocolate" | First element | +| 1 | "Strawberry" | Second element | +| 2 | "Vanilla" | Third element | +| 3 | "Pistachio" | Fourth element | +| 4 | "Rocky Road" | Fifth element | + +✅ Does it surprise you that arrays start at the zero index? In some programming languages, indexes start at 1. There's an interesting history around this, which you can [read on Wikipedia](https://en.wikipedia.org/wiki/Zero-based_numbering). + +**Accessing Array Elements:** ```javascript -let iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; -iceCreamFlavors[2]; //"Vanilla" +const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; + +// Access individual elements using bracket notation +console.log(iceCreamFlavors[0]); // "Chocolate" - first element +console.log(iceCreamFlavors[2]); // "Vanilla" - third element +console.log(iceCreamFlavors[4]); // "Rocky Road" - last element ``` -You can use the index to update a value like this: +**Breaking down what happens here:** +- **Uses** square bracket notation with the index number to access elements +- **Returns** the value stored at that specific position in the array +- **Starts** counting from 0, making the first element index 0 + +**Modifying Array Elements:** ```javascript -iceCreamFlavors[4] = "Butter Pecan"; //Changed "Rocky Road" to "Butter Pecan" +// Change an existing value +iceCreamFlavors[4] = "Butter Pecan"; +console.log(iceCreamFlavors[4]); // "Butter Pecan" + +// Add a new element at the end +iceCreamFlavors[5] = "Cookie Dough"; +console.log(iceCreamFlavors[5]); // "Cookie Dough" ``` -And you can add a new value at a specific index like this: +**In the above, we've:** +- **Modified** the element at index 4 from "Rocky Road" to "Butter Pecan" +- **Added** a new element "Cookie Dough" at index 5 +- **Expanded** the array length automatically when adding beyond current bounds + +### Array Length and Common Methods + +Arrays come with built-in properties and methods that make working with data much easier. + +**Finding Array Length:** ```javascript -iceCreamFlavors[5] = "Cookie Dough"; //Added "Cookie Dough" +const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; +console.log(iceCreamFlavors.length); // 5 + +// Length updates automatically as array changes +iceCreamFlavors.push("Mint Chip"); +console.log(iceCreamFlavors.length); // 6 ``` -✅ A more common way to add values to an array is by using array methods like `array.push()`. +**Key points to remember:** +- **Returns** the total number of elements in the array +- **Updates** automatically when elements are added or removed +- **Provides** a dynamic count useful for loops and validation -To find out how many items are in an array, use the `length` property. +**Essential Array Methods:** ```javascript -let iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; -iceCreamFlavors.length; //5 +const fruits = ["apple", "banana", "orange"]; + +// Add elements +fruits.push("grape"); // Adds to end: ["apple", "banana", "orange", "grape"] +fruits.unshift("strawberry"); // Adds to beginning: ["strawberry", "apple", "banana", "orange", "grape"] + +// Remove elements +const lastFruit = fruits.pop(); // Removes and returns "grape" +const firstFruit = fruits.shift(); // Removes and returns "strawberry" + +// Find elements +const index = fruits.indexOf("banana"); // Returns 1 (position of "banana") +const hasApple = fruits.includes("apple"); // Returns true ``` -✅ Try it out! Open your browser's console and create an array of your own. Experiment with adding, modifying, and accessing its values. +**Understanding these methods:** +- **Adds** elements with `push()` (end) and `unshift()` (beginning) +- **Removes** elements with `pop()` (end) and `shift()` (beginning) +- **Locates** elements with `indexOf()` and checks existence with `includes()` +- **Returns** useful values like removed elements or position indexes + +✅ Try it yourself! Use your browser's console to create and manipulate an array of your own creation. + +### 🧠 **Array Fundamentals Check: Organizing Your Data** + +**Test your array understanding:** +- Why do you think arrays start counting from 0 instead of 1? +- What happens if you try to access an index that doesn't exist (like `arr[100]` in a 5-element array)? +- Can you think of three real-world scenarios where arrays would be useful? + +```mermaid +stateDiagram-v2 + [*] --> EmptyArray: const arr = [] + EmptyArray --> WithItems: Add elements + WithItems --> Accessing: Use indexes + Accessing --> Modifying: Change values + Modifying --> Processing: Use methods + + WithItems --> WithItems: push(), unshift() + Processing --> Processing: pop(), shift() + + note right of Accessing + Zero-based indexing + arr[0] = first element + end note + + note right of Processing + Built-in methods + Dynamic operations + end note +``` +> **Real-world insight**: Arrays are everywhere in programming! Social media feeds, shopping carts, photo galleries, playlist songs - they're all arrays behind the scenes! ## Loops -Loops allow you to perform repetitive or **iterative** tasks, saving time and reducing the amount of code you need to write. Each iteration can involve different variables, values, or conditions. JavaScript offers several types of loops, each with slight differences, but all serve the same purpose: iterating over data. - +Think of the famous punishment from Charles Dickens' novels where students had to write lines repeatedly on a slate. Imagine if you could simply instruct someone to "write this sentence 100 times" and have it done automatically. That's exactly what loops do for your code. + +Loops are like having a tireless assistant who can repeat tasks without error. Whether you need to check every item in a shopping cart or display all the photos in an album, loops handle the repetition efficiently. + +JavaScript provides several types of loops to choose from. Let's examine each one and understand when to use them. + +```mermaid +flowchart TD + A["🔄 Loop Types"] --> B["For Loop"] + A --> C["While Loop"] + A --> D["For...of Loop"] + A --> E["forEach Method"] + + B --> B1["Known iterations"] + B --> B2["Counter-based"] + B --> B3["for(init; condition; increment)"] + + C --> C1["Unknown iterations"] + C --> C2["Condition-based"] + C --> C3["while(condition)"] + + D --> D1["Modern ES6+"] + D --> D2["Array iteration"] + D --> D3["for(item of array)"] + + E --> E1["Functional style"] + E --> E2["Array method"] + E --> E3["array.forEach(callback)"] + + F["⏰ When to Use"] --> F1["For: Counting, indexes"] + F --> F2["While: User input, searching"] + F --> F3["For...of: Simple iteration"] + F --> F4["forEach: Functional programming"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec +``` ### For Loop -A `for` loop requires three components to work: -- `counter`: A variable, usually initialized with a number, that tracks the number of iterations. -- `condition`: An expression that uses comparison operators to stop the loop when it evaluates to `false`. -- `iteration-expression`: Executes at the end of each iteration, typically used to update the counter. +The `for` loop is like setting a timer - you know exactly how many times you want something to happen. It's super organized and predictable, which makes it perfect when you're working with arrays or need to count things. + +**For Loop Structure:** + +| Component | Purpose | Example | +|-----------|---------|----------| +| **Initialization** | Sets starting point | `let i = 0` | +| **Condition** | When to continue | `i < 10` | +| **Increment** | How to update | `i++` | ```javascript -// Counting up to 10 +// Counting from 0 to 9 for (let i = 0; i < 10; i++) { - console.log(i); + console.log(`Count: ${i}`); +} + +// More practical example: processing scores +const testScores = [85, 92, 78, 96, 88]; +for (let i = 0; i < testScores.length; i++) { + console.log(`Student ${i + 1}: ${testScores[i]}%`); } ``` -✅ Run this code in your browser's console. What happens if you tweak the counter, condition, or iteration expression? Can you make the loop run in reverse, like a countdown? +**Step by step, here's what's happening:** +- **Initializes** the counter variable `i` to 0 at the start +- **Checks** the condition `i < 10` before each iteration +- **Executes** the code block when the condition is true +- **Increments** `i` by 1 after each iteration with `i++` +- **Stops** when the condition becomes false (when `i` reaches 10) + +✅ Run this code in a browser console. What happens when you make small changes to the counter, condition, or iteration expression? Can you make it run backwards, creating a countdown? + +### 🗓️ **For Loop Mastery Check: Controlled Repetition** + +**Evaluate your for loop understanding:** +- What are the three parts of a for loop, and what does each one do? +- How would you loop through an array backwards? +- What happens if you forget the increment part (`i++`)? + +```mermaid +flowchart TD + A["🚀 Start For Loop"] --> B["Initialize: let i = 0"] + B --> C{"Condition: i < array.length?"} + C -->|true| D["Execute code block"] + D --> E["Increment: i++"] + E --> C + C -->|false| F["✅ Exit loop"] + + G["📋 Common Patterns"] --> G1["for(let i=0; i G2["for(let i=n-1; i>=0; i--)"] + G --> G3["for(let i=0; i **Loop wisdom**: For loops are perfect when you know exactly how many times you need to repeat something. They're the most common choice for array processing! ### While Loop -Unlike the `for` loop, a `while` loop only requires a condition to stop the loop when it evaluates to `false`. Conditions in loops often depend on other values, like counters, which must be managed during the loop. Initial values for counters must be set outside the loop, and any expressions needed to meet the condition, including updating the counter, must be handled inside the loop. +The `while` loop is like saying "keep doing this until..." - you might not know exactly how many times it'll run, but you know when to stop. It's perfect for things like asking a user for input until they give you what you need, or searching through data until you find what you're looking for. + +**While Loop Characteristics:** +- **Continues** executing as long as the condition is true +- **Requires** manual management of any counter variables +- **Checks** the condition before each iteration +- **Risks** infinite loops if the condition never becomes false ```javascript -//Counting up to 10 +// Basic counting example let i = 0; while (i < 10) { - console.log(i); - i++; + console.log(`While count: ${i}`); + i++; // Don't forget to increment! +} + +// More practical example: processing user input +let userInput = ""; +let attempts = 0; +const maxAttempts = 3; + +while (userInput !== "quit" && attempts < maxAttempts) { + userInput = prompt(`Enter 'quit' to exit (attempt ${attempts + 1}):`); + attempts++; +} + +if (attempts >= maxAttempts) { + console.log("Maximum attempts reached!"); +} +``` + +**Understanding these examples:** +- **Manages** the counter variable `i` manually inside the loop body +- **Increments** the counter to prevent infinite loops +- **Demonstrates** practical use case with user input and attempt limiting +- **Includes** safety mechanisms to prevent endless execution + +### ♾️ **While Loop Wisdom Check: Condition-Based Repetition** + +**Test your while loop comprehension:** +- What's the main danger when using while loops? +- When would you choose a while loop over a for loop? +- How can you prevent infinite loops? + +```mermaid +flowchart LR + A["🔄 While vs For"] --> B["While Loop"] + A --> C["For Loop"] + + B --> B1["Unknown iterations"] + B --> B2["Condition-driven"] + B --> B3["User input, searching"] + B --> B4["⚠️ Risk: infinite loops"] + + C --> C1["Known iterations"] + C --> C2["Counter-driven"] + C --> C3["Array processing"] + C --> C4["✅ Safe: predictable end"] + + D["🛡️ Safety Tips"] --> D1["Always modify condition variable"] + D --> D2["Include escape conditions"] + D --> D3["Set maximum iteration limits"] + + style A fill:#e3f2fd + style B fill:#fff3e0 + style C fill:#e8f5e8 + style D fill:#ffebee +``` +> **Safety first**: While loops are powerful but require careful condition management. Always ensure your loop condition will eventually become false! + +### Modern Loop Alternatives + +JavaScript offers modern loop syntax that can make your code more readable and less error-prone. + +**For...of Loop (ES6+):** + +```javascript +const colors = ["red", "green", "blue", "yellow"]; + +// Modern approach - cleaner and safer +for (const color of colors) { + console.log(`Color: ${color}`); +} + +// Compare with traditional for loop +for (let i = 0; i < colors.length; i++) { + console.log(`Color: ${colors[i]}`); } ``` -✅ Why would you choose a `for` loop over a `while` loop? This question has intrigued 17K viewers on StackOverflow, and you might find their [opinions interesting](https://stackoverflow.com/questions/39969145/while-loops-vs-for-loops-in-javascript). +**Key advantages of for...of:** +- **Eliminates** index management and potential off-by-one errors +- **Provides** direct access to array elements +- **Improves** code readability and reduces syntax complexity + +**forEach Method:** + +```javascript +const prices = [9.99, 15.50, 22.75, 8.25]; + +// Using forEach for functional programming style +prices.forEach((price, index) => { + console.log(`Item ${index + 1}: $${price.toFixed(2)}`); +}); + +// forEach with arrow functions for simple operations +prices.forEach(price => console.log(`Price: $${price}`)); +``` + +**What you need to know about forEach:** +- **Executes** a function for each array element +- **Provides** both element value and index as parameters +- **Cannot** be stopped early (unlike traditional loops) +- **Returns** undefined (doesn't create a new array) + +✅ Why would you choose a for loop vs. a while loop? 17K viewers had the same question on StackOverflow, and some of the opinions [might be interesting to you](https://stackoverflow.com/questions/39969145/while-loops-vs-for-loops-in-javascript). + +### 🎨 **Modern Loop Syntax Check: Embracing ES6+** + +**Assess your modern JavaScript understanding:** +- What are the advantages of `for...of` over traditional for loops? +- When might you still prefer traditional for loops? +- What's the difference between `forEach` and `map`? + +```mermaid +quadrantChart + title Loop Selection Guide + x-axis Traditional --> Modern + y-axis Simple --> Complex + quadrant-1 Modern Complex + quadrant-2 Traditional Complex + quadrant-3 Traditional Simple + quadrant-4 Modern Simple + + Traditional For: [0.2, 0.7] + While Loop: [0.3, 0.6] + For...of: [0.8, 0.3] + forEach: [0.9, 0.4] + Array Methods: [0.8, 0.8] +``` +> **Modern trend**: ES6+ syntax like `for...of` and `forEach` is becoming the preferred approach for array iteration because it's cleaner and less error-prone! ## Loops and Arrays -Loops are frequently used with arrays because the array's length often serves as the condition to stop the loop, and the index can act as the counter. +Combining arrays with loops creates powerful data processing capabilities. This pairing is fundamental to many programming tasks, from displaying lists to calculating statistics. + +**Traditional Array Processing:** ```javascript -let iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; +const iceCreamFlavors = ["Chocolate", "Strawberry", "Vanilla", "Pistachio", "Rocky Road"]; +// Classic for loop approach for (let i = 0; i < iceCreamFlavors.length; i++) { - console.log(iceCreamFlavors[i]); -} //Ends when all flavors are printed + console.log(`Flavor ${i + 1}: ${iceCreamFlavors[i]}`); +} + +// Modern for...of approach +for (const flavor of iceCreamFlavors) { + console.log(`Available flavor: ${flavor}`); +} ``` -✅ Try looping over an array of your own creation in your browser's console. +**Let's understand each approach:** +- **Uses** array length property to determine loop boundary +- **Accesses** elements by index in traditional for loops +- **Provides** direct element access in for...of loops +- **Processes** each array element exactly once +**Practical Data Processing Example:** + +```javascript +const studentGrades = [85, 92, 78, 96, 88, 73, 89]; +let total = 0; +let highestGrade = studentGrades[0]; +let lowestGrade = studentGrades[0]; + +// Process all grades with a single loop +for (let i = 0; i < studentGrades.length; i++) { + const grade = studentGrades[i]; + total += grade; + + if (grade > highestGrade) { + highestGrade = grade; + } + + if (grade < lowestGrade) { + lowestGrade = grade; + } +} + +const average = total / studentGrades.length; +console.log(`Average: ${average.toFixed(1)}`); +console.log(`Highest: ${highestGrade}`); +console.log(`Lowest: ${lowestGrade}`); +``` + +**Here's how this code works:** +- **Initializes** tracking variables for sum and extremes +- **Processes** each grade with a single efficient loop +- **Accumulates** the total for average calculation +- **Tracks** highest and lowest values during iteration +- **Calculates** final statistics after loop completion + +✅ Experiment with looping over an array of your own making in your browser's console. + +```mermaid +flowchart TD + A["📦 Array Data"] --> B["🔄 Loop Processing"] + B --> C["📈 Results"] + + A1["[85, 92, 78, 96, 88]"] --> A + + B --> B1["Calculate total"] + B --> B2["Find min/max"] + B --> B3["Count conditions"] + B --> B4["Transform data"] + + C --> C1["Average: 87.8"] + C --> C2["Highest: 96"] + C --> C3["Passing: 5/5"] + C --> C4["Letter grades"] + + D["⚡ Processing Patterns"] --> D1["Accumulation (sum)"] + D --> D2["Comparison (min/max)"] + D --> D3["Filtering (conditions)"] + D --> D4["Mapping (transformation)"] + + style A fill:#e3f2fd + style B fill:#fff3e0 + style C fill:#e8f5e8 + style D fill:#f3e5f5 +``` --- +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Build a comprehensive data processing function that combines arrays and loops to analyze a dataset and generate meaningful insights. + +**Prompt:** Create a function called `analyzeGrades` that takes an array of student grade objects (each containing name and score properties) and returns an object with statistics including the highest score, lowest score, average score, count of students who passed (score >= 70), and an array of student names who scored above average. Use at least two different loop types in your solution. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + ## 🚀 Challenge +JavaScript offers several modern array methods that can replace traditional loops for specific tasks. Explore [forEach](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach), [for-of](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/for...of), [map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map), [filter](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/filter), and [reduce](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce). -There are other ways to loop through arrays besides `for` and `while` loops. Explore [forEach](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach), [for-of](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/for...of), and [map](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map). Rewrite your array loop using one of these methods. +**Your challenge:** Refactor the student grades example using at least three different array methods. Notice how much cleaner and more readable the code becomes with modern JavaScript syntax. ## Post-Lecture Quiz [Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/14) + ## Review & Self Study -JavaScript arrays come with many built-in methods that are incredibly useful for manipulating data. [Learn more about these methods](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array) and try using some of them (like `push`, `pop`, `slice`, and `splice`) on an array you create. +Arrays in JavaScript have many methods attached to them, that are extremely useful for data manipulation. [Read up on these methods](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array) and try some of them out (like push, pop, slice and splice) on an array of your creation. ## Assignment @@ -143,5 +633,109 @@ JavaScript arrays come with many built-in methods that are incredibly useful for --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +## 📊 **Your Arrays & Loops Toolkit Summary** + +```mermaid +graph TD + A["🎯 Arrays & Loops Mastery"] --> B["📦 Array Fundamentals"] + A --> C["🔄 Loop Types"] + A --> D["🔗 Data Processing"] + A --> E["🎨 Modern Techniques"] + + B --> B1["Creation: [ ]"] + B --> B2["Indexing: arr[0]"] + B --> B3["Methods: push, pop"] + B --> B4["Properties: length"] + + C --> C1["For: Known iterations"] + C --> C2["While: Condition-based"] + C --> C3["For...of: Direct access"] + C --> C4["forEach: Functional"] + + D --> D1["Statistics calculation"] + D --> D2["Data transformation"] + D --> D3["Filtering & searching"] + D --> D4["Real-time processing"] + + E --> E1["Arrow functions"] + E --> E2["Method chaining"] + E --> E3["Destructuring"] + E --> E4["Template literals"] + + F["💡 Key Benefits"] --> F1["Efficient data handling"] + F --> F2["Reduced code repetition"] + F --> F3["Scalable solutions"] + F --> F4["Cleaner syntax"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec +``` +--- + +## 🚀 Your Arrays & Loops Mastery Timeline + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Create an array of your favorite movies and access specific elements +- [ ] Write a for loop that counts from 1 to 10 +- [ ] Try the modern array methods challenge from the lesson +- [ ] Practice array indexing in your browser console + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and review any challenging concepts +- [ ] Build the comprehensive grade analyzer from the GitHub Copilot challenge +- [ ] Create a simple shopping cart that adds and removes items +- [ ] Practice converting between different loop types +- [ ] Experiment with array methods like `push`, `pop`, `slice`, and `splice` + +### 📅 **Your Week-Long Data Processing Journey** +- [ ] Complete the "Loop an Array" assignment with creative enhancements +- [ ] Build a to-do list application using arrays and loops +- [ ] Create a simple statistics calculator for numerical data +- [ ] Practice with [MDN array methods](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array) +- [ ] Build a photo gallery or music playlist interface +- [ ] Explore functional programming with `map`, `filter`, and `reduce` + +### 🌟 **Your Month-Long Transformation** +- [ ] Master advanced array operations and performance optimization +- [ ] Build a complete data visualization dashboard +- [ ] Contribute to open source projects involving data processing +- [ ] Teach someone else about arrays and loops with practical examples +- [ ] Create a personal library of reusable data processing functions +- [ ] Explore algorithms and data structures built on arrays + +### 🏆 **Final Data Processing Champion Check-in** + +**Celebrate your array and loop mastery:** +- What's the most useful array operation you've learned for real-world applications? +- Which loop type feels most natural to you and why? +- How has understanding arrays and loops changed your approach to organizing data? +- What complex data processing task would you like to tackle next? + +```mermaid +journey + title Your Data Processing Evolution + section Today + Array Confusion: 3: You + Loop Basics: 4: You + Index Understanding: 5: You + section This Week + Method Mastery: 4: You + Efficient Processing: 5: You + Modern Syntax: 5: You + section Next Month + Complex Algorithms: 5: You + Performance Optimization: 5: You + Teaching Others: 5: You +``` +> 📦 **You've unlocked the power of data organization and processing!** Arrays and loops are the foundation of almost every application you'll ever build. From simple lists to complex data analysis, you now have the tools to handle information efficiently and elegantly. Every dynamic website, mobile app, and data-driven application relies on these fundamental concepts. Welcome to the world of scalable data processing! 🎉 + +--- + + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/4-arrays-loops/assignment.md b/translations/en/2-js-basics/4-arrays-loops/assignment.md index aea3c84be..d4bb8429c 100644 --- a/translations/en/2-js-basics/4-arrays-loops/assignment.md +++ b/translations/en/2-js-basics/4-arrays-loops/assignment.md @@ -1,27 +1,115 @@ - -# Loop an Array +# Arrays and Loops Assignment ## Instructions -Create a program that lists every 3rd number between 1 and 20 and displays it in the console. +Complete the following exercises to practice working with arrays and loops. Each exercise builds on concepts from the lesson and encourages you to apply different loop types and array methods. -> TIP: Use a for-loop and adjust the iteration expression. +### Exercise 1: Number Pattern Generator +Create a program that lists every 3rd number between 1-20 and prints it to the console. + +**Requirements:** +- Use a `for` loop with a custom increment +- Display numbers in a user-friendly format +- Add descriptive comments explaining your logic + +**Expected Output:** +``` +3, 6, 9, 12, 15, 18 +``` + +> **Tip:** Modify the iteration-expression in your for loop to skip numbers. + +### Exercise 2: Array Analysis +Create an array of at least 8 different numbers and write functions to analyze the data. + +**Requirements:** +- Create an array called `numbers` with at least 8 values +- Write a function `findMaximum()` that returns the highest number +- Write a function `findMinimum()` that returns the lowest number +- Write a function `calculateSum()` that returns the total of all numbers +- Test each function and display the results + +**Bonus Challenge:** Create a function that finds the second highest number in the array. + +### Exercise 3: String Array Processing +Create an array of your favorite movies/books/songs and practice different loop types. + +**Requirements:** +- Create an array with at least 5 string values +- Use a traditional `for` loop to display items with numbers (1. Item Name) +- Use a `for...of` loop to display items in uppercase +- Use `forEach()` method to count and display the total characters + +**Example Output:** +``` +Traditional for loop: +1. The Matrix +2. Inception +3. Interstellar + +For...of loop (uppercase): +THE MATRIX +INCEPTION +INTERSTELLAR + +Character count: +Total characters across all titles: 42 +``` + +### Exercise 4: Data Filtering (Advanced) +Create a program that processes an array of objects representing students. + +**Requirements:** +- Create an array of at least 5 student objects with properties: `name`, `age`, `grade` +- Use loops to find students who are 18 or older +- Calculate the average grade of all students +- Create a new array containing only students with grades above 85 + +**Example Structure:** +```javascript +const students = [ + { name: "Alice", age: 17, grade: 92 }, + { name: "Bob", age: 18, grade: 84 }, + // Add more students... +]; +``` + +## Testing Your Code + +Test your programs by: +1. Running each exercise in your browser's console +2. Verifying outputs match expected results +3. Testing with different data sets +4. Checking that your code handles edge cases (empty arrays, single elements) + +## Submission Guidelines + +Include the following in your submission: +- Well-commented JavaScript code for each exercise +- Screenshots or text output showing your programs running +- Brief explanation of which loop type you chose for each task and why ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | --------------------------------------- | ------------------------ | ------------------------------ | -| | Program works correctly and includes comments | Program lacks comments | Program is incomplete or contains errors | +| Criteria | Exemplary (3 points) | Adequate (2 points) | Needs Improvement (1 point) | +| -------- | -------------------- | ------------------- | --------------------------- | +| **Functionality** | All exercises completed correctly with bonus challenges | All required exercises work correctly | Some exercises incomplete or contain errors | +| **Code Quality** | Clean, well-organized code with descriptive variable names | Code works but could be cleaner | Code is messy or hard to understand | +| **Comments** | Comprehensive comments explaining logic and decisions | Basic comments present | Minimal or no comments | +| **Loop Usage** | Demonstrates understanding of different loop types appropriately | Uses loops correctly but limited variety | Incorrect or inefficient loop usage | +| **Testing** | Evidence of thorough testing with multiple scenarios | Basic testing demonstrated | Little evidence of testing | + +## Reflection Questions + +After completing the exercises, consider: +1. Which type of loop felt most natural to use and why? +2. What challenges did you encounter when working with arrays? +3. How could these skills apply to real-world web development projects? +4. What would you do differently if you had to optimize your code for performance? --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/2-js-basics/README.md b/translations/en/2-js-basics/README.md index 54bc1dbfe..5491259d2 100644 --- a/translations/en/2-js-basics/README.md +++ b/translations/en/2-js-basics/README.md @@ -1,12 +1,3 @@ - # Introduction to JavaScript JavaScript is the language of the web. In these four lessons, you'll learn the basics. diff --git a/translations/en/3-terrarium/1-intro-to-html/README.md b/translations/en/3-terrarium/1-intro-to-html/README.md index 7cbb9c667..bfba4ed1b 100644 --- a/translations/en/3-terrarium/1-intro-to-html/README.md +++ b/translations/en/3-terrarium/1-intro-to-html/README.md @@ -1,83 +1,159 @@ - # Terrarium Project Part 1: Introduction to HTML -![Introduction to HTML](../../../../translated_images/en/webdev101-html.4389c2067af68e98280c1bde52b6c6269f399eaae3659b7c846018d8a7b0bbd9.png) +```mermaid +journey + title Your HTML Learning Journey + section Foundation + Create HTML file: 3: Student + Add DOCTYPE: 4: Student + Structure document: 5: Student + section Content + Add metadata: 4: Student + Include images: 5: Student + Organize layout: 5: Student + section Semantics + Use proper tags: 4: Student + Enhance accessibility: 5: Student + Build terrarium: 5: Student +``` +![Introduction to HTML](../../../../translated_images/en/webdev101-html.4389c2067af68e98.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +HTML, or HyperText Markup Language, is the foundation of every website you've ever visited. Think of HTML as the skeleton that gives structure to web pages – it defines where content goes, how it's organized, and what each piece represents. While CSS will later "dress up" your HTML with colors and layouts, and JavaScript will bring it to life with interactivity, HTML provides the essential structure that makes everything else possible. + +In this lesson, you'll create the HTML structure for a virtual terrarium interface. This hands-on project will teach you fundamental HTML concepts while building something visually engaging. You'll learn how to organize content using semantic elements, work with images, and create the foundation for an interactive web application. + +By the end of this lesson, you'll have a working HTML page displaying plant images in organized columns, ready for styling in the next lesson. Don't worry if it looks basic at first – that's exactly what HTML should do before CSS adds the visual polish. + +```mermaid +mindmap + root((HTML Fundamentals)) + Structure + DOCTYPE Declaration + HTML Element + Head Section + Body Content + Elements + Tags & Attributes + Self-closing Tags + Nested Elements + Block vs Inline + Content + Text Elements + Images + Containers (div) + Lists + Semantics + Meaningful Tags + Accessibility + Screen Readers + SEO Benefits + Best Practices + Proper Nesting + Valid Markup + Descriptive Alt Text + Organized Structure +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/15) - -> Check out video - +> 📺 **Watch and Learn**: Check out this helpful video overview > -> [![Git and GitHub basics video](https://img.youtube.com/vi/1TvxJKBzhyQ/0.jpg)](https://www.youtube.com/watch?v=1TvxJKBzhyQ) - -### Introduction - -HTML, or HyperText Markup Language, is the 'framework' of the web. If CSS 'styles' your HTML and JavaScript adds functionality, HTML is the foundation of your web application. HTML's syntax even reflects this concept, with tags like "head", "body", and "footer". +> [![HTML Fundamentals Video](https://img.youtube.com/vi/1TvxJKBzhyQ/0.jpg)](https://www.youtube.com/watch?v=1TvxJKBzhyQ) -In this lesson, we'll use HTML to structure the 'framework' of our virtual terrarium's interface. It will include a title and three columns: a left and right column for draggable plants, and a center area that will represent the terrarium itself. By the end of this lesson, you'll see the plants in the columns, but the interface will look a bit plain. Don't worry—next, you'll use CSS to enhance its appearance. +## Setting Up Your Project -### Task +Before we dive into HTML code, let's set up a proper workspace for your terrarium project. Creating an organized file structure from the beginning is a crucial habit that will serve you well throughout your web development journey. -On your computer, create a folder named 'terrarium' and inside it, a file called 'index.html'. You can do this in Visual Studio Code by opening a new VS Code window, clicking 'open folder', and navigating to your new folder. Then, click the small 'file' button in the Explorer pane to create the new file: +### Task: Create Your Project Structure -![explorer in VS Code](../../../../translated_images/en/vs-code-index.e2986cf919471eb984a0afef231380c8b132b000635105f2397bd2754d1b689c.png) +You'll create a dedicated folder for your terrarium project and add your first HTML file. Here are two approaches you can use: -Alternatively, you can use these commands in Git Bash: -* `mkdir terrarium` -* `cd terrarium` -* `touch index.html` -* `code index.html` or `nano index.html` +**Option 1: Using Visual Studio Code** +1. Open Visual Studio Code +2. Click "File" → "Open Folder" or use `Ctrl+K, Ctrl+O` (Windows/Linux) or `Cmd+K, Cmd+O` (Mac) +3. Create a new folder called `terrarium` and select it +4. In the Explorer pane, click the "New File" icon +5. Name your file `index.html` -> The `index.html` file tells the browser it's the default file in a folder. URLs like `https://anysite.com/test` might correspond to a folder named `test` containing an `index.html` file. The `index.html` file doesn't need to appear in the URL. +![VS Code Explorer showing new file creation](../../../../translated_images/en/vs-code-index.e2986cf919471eb9.webp) ---- - -## The DocType and html tags - -The first line of an HTML file is its doctype declaration. While it might seem odd to include this line at the very top, it informs older browsers to render the page in standard mode, adhering to the current HTML specification. - -> Tip: In VS Code, you can hover over a tag to access information about its usage from the MDN Reference guides. +**Option 2: Using Terminal Commands** +```bash +mkdir terrarium +cd terrarium +touch index.html +code index.html +``` -The second line should be the opening `` tag, followed by its closing tag ``. These tags serve as the root elements of your interface. +**Here's what these commands accomplish:** +- **Creates** a new directory called `terrarium` for your project +- **Navigates** into the terrarium directory +- **Creates** an empty `index.html` file +- **Opens** the file in Visual Studio Code for editing + +> 💡 **Pro Tip**: The filename `index.html` is special in web development. When someone visits a website, browsers automatically look for `index.html` as the default page to display. This means a URL like `https://mysite.com/projects/` will automatically serve the `index.html` file from the `projects` folder without needing to specify the filename in the URL. + +## Understanding HTML Document Structure + +Every HTML document follows a specific structure that browsers need to understand and display correctly. Think of this structure like a formal letter – it has required elements in a particular order that help the recipient (in this case, the browser) process the content properly. + +```mermaid +flowchart TD + A[""] --> B[""] + B --> C[""] + C --> D[""] + C --> E["<meta charset>"] + C --> F["<meta viewport>"] + B --> G["<body>"] + G --> H["<h1> Heading"] + G --> I["<div> Containers"] + G --> J["<img> Images"] + + style A fill:#e1f5fe + style B fill:#f3e5f5 + style C fill:#fff3e0 + style G fill:#e8f5e8 +``` +Let's start by adding the essential foundation that every HTML document needs. -### Task +### The DOCTYPE Declaration and Root Element -Add these lines at the top of your `index.html` file: +The first two lines of any HTML file serve as the document's "introduction" to the browser: -```HTML +```html <!DOCTYPE html> <html></html> ``` -✅ There are different modes that can be set using the DocType declaration, such as [Quirks Mode and Standards Mode](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode). These modes were designed to support very old browsers (like Netscape Navigator 4 and Internet Explorer 5), which are rarely used today. Stick to the standard doctype declaration. +**Understanding what this code does:** +- **Declares** the document type as HTML5 using `<!DOCTYPE html>` +- **Creates** the root `<html>` element that will contain all page content +- **Establishes** modern web standards for proper browser rendering +- **Ensures** consistent display across different browsers and devices ---- +> 💡 **VS Code Tip**: Hover over any HTML tag in VS Code to see helpful information from MDN Web Docs, including usage examples and browser compatibility details. + +> 📚 **Learn More**: The DOCTYPE declaration prevents browsers from entering "quirks mode," which was used to support very old websites. Modern web development uses the simple `<!DOCTYPE html>` declaration to ensure [standards-compliant rendering](https://developer.mozilla.org/docs/Web/HTML/Quirks_Mode_and_Standards_Mode). -## The document's 'head' +### 🔄 **Pedagogical Check-in** +**Pause and Reflect**: Before continuing, make sure you understand: +- ✅ Why every HTML document needs a DOCTYPE declaration +- ✅ What the `<html>` root element contains +- ✅ How this structure helps browsers render pages correctly -The 'head' section of an HTML document contains essential information about your web page, known as [metadata](https://developer.mozilla.org/docs/Web/HTML/Element/meta). In this case, it provides the web server with the following details: +**Quick Self-Test**: Can you explain in your own words what "standards-compliant rendering" means? -- The page's title -- Metadata, including: - - The 'character set', specifying the character encoding used on the page - - Browser compatibility information, such as `x-ua-compatible` indicating support for IE=edge - - Instructions for how the viewport should behave when loaded, such as setting the initial scale to 1 to control the zoom level. +## Adding Essential Document Metadata -### Task +The `<head>` section of an HTML document contains crucial information that browsers and search engines need, but that visitors don't see directly on the page. Think of it as the "behind-the-scenes" information that helps your webpage work properly and appear correctly across different devices and platforms. -Add a 'head' section to your document between the opening and closing `<html>` tags. +This metadata tells browsers how to display your page, what character encoding to use, and how to handle different screen sizes – all essential for creating professional, accessible web pages. + +### Task: Add the Document Head + +Insert this `<head>` section between your opening and closing `<html>` tags: ```html <head> @@ -88,17 +164,28 @@ Add a 'head' section to your document between the opening and closing `<html>` t </head> ``` -✅ What happens if you set a viewport meta tag like this: `<meta name="viewport" content="width=600">`? Learn more about the [viewport](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag). +**Breaking down what each element accomplishes:** +- **Sets** the page title that appears in browser tabs and search results +- **Specifies** UTF-8 character encoding for proper text display worldwide +- **Ensures** compatibility with modern versions of Internet Explorer +- **Configures** responsive design by setting the viewport to match device width +- **Controls** initial zoom level to display content at natural size ---- +> 🤔 **Think About This**: What would happen if you set a viewport meta tag like this: `<meta name="viewport" content="width=600">`? This would force the page to always be 600 pixels wide, breaking responsive design! Learn more about [proper viewport configuration](https://developer.mozilla.org/docs/Web/HTML/Viewport_meta_tag). -## The document's `body` +## Building the Document Body -### HTML Tags +The `<body>` element contains all the visible content of your webpage – everything users will see and interact with. While the `<head>` section provided instructions to the browser, the `<body>` section contains the actual content: text, images, buttons, and other elements that create your user interface. -In HTML, you use tags in your `.html` file to create elements on a web page. Most tags have an opening and closing tag, like `<p>hello</p>` for a paragraph. Create the body of your interface by adding `<body>` tags inside the `<html>` tag pair. Your markup should now look like this: +Let's add the body structure and understand how HTML tags work together to create meaningful content. -### Task +### Understanding HTML Tag Structure + +HTML uses paired tags to define elements. Most tags have an opening tag like `<p>` and a closing tag like `</p>`, with content in between: `<p>Hello, world!</p>`. This creates a paragraph element containing the text "Hello, world!". + +### Task: Add the Body Element + +Update your HTML file to include the `<body>` element: ```html <!DOCTYPE html> @@ -113,100 +200,179 @@ In HTML, you use tags in your `.html` file to create elements on a web page. Mos </html> ``` -Now, you can start building your page. Typically, `<div>` tags are used to create separate elements on a page. We'll use a series of `<div>` elements to contain images. +**Here's what this complete structure provides:** +- **Establishes** the basic HTML5 document framework +- **Includes** essential metadata for proper browser rendering +- **Creates** an empty body ready for your visible content +- **Follows** modern web development best practices -### Images +Now you're ready to add the visible elements of your terrarium. We'll use `<div>` elements as containers to organize different sections of content, and `<img>` elements to display the plant images. -The `<img>` tag is unique because it doesn't require a closing tag. It includes a `src` attribute that provides all the information needed to render the image. +### Working with Images and Layout Containers -Create a folder in your app called `images` and add all the images from the [source code folder](../../../../3-terrarium/solution/images) into it. (There are 14 plant images.) +Images are special in HTML because they use "self-closing" tags. Unlike elements like `<p></p>` that wrap around content, the `<img>` tag contains all the information it needs within the tag itself using attributes like `src` for the image file path and `alt` for accessibility. -### Task +Before adding images to your HTML, you'll need to organize your project files properly by creating an images folder and adding the plant graphics. -Add these plant images into two columns between the `<body></body>` tags: +**First, set up your images:** +1. Create a folder called `images` inside your terrarium project folder +2. Download the plant images from the [solution folder](../../../../3-terrarium/solution/images) (14 plant images total) +3. Copy all plant images into your new `images` folder + +### Task: Create the Plant Display Layout + +Now add the plant images organized in two columns between your `<body></body>` tags: ```html <div id="page"> <div id="left-container" class="container"> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant1" src="./images/plant1.png" /> + <img class="plant" alt="plant" id="plant1" src="../../../../translated_images/en/plant1.d87946a2ca70cc43.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant2" src="./images/plant2.png" /> + <img class="plant" alt="plant" id="plant2" src="../../../../translated_images/en/plant2.8daa1606c9c1ad89.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant3" src="./images/plant3.png" /> + <img class="plant" alt="plant" id="plant3" src="../../../../translated_images/en/plant3.8b0d484381a2a2a7.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant4" src="./images/plant4.png" /> + <img class="plant" alt="plant" id="plant4" src="../../../../translated_images/en/plant4.656e16ae1df37be2.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant5" src="./images/plant5.png" /> + <img class="plant" alt="plant" id="plant5" src="../../../../translated_images/en/plant5.2b41b9355f11ebcc.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant6" src="./images/plant6.png" /> + <img class="plant" alt="plant" id="plant6" src="../../../../translated_images/en/plant6.3d1827d03b656994.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant7" src="./images/plant7.png" /> + <img class="plant" alt="plant" id="plant7" src="../../../../translated_images/en/plant7.8152c302ac97f621.webp" /> </div> </div> <div id="right-container" class="container"> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant8" src="./images/plant8.png" /> + <img class="plant" alt="plant" id="plant8" src="../../../../translated_images/en/plant8.38d6428174ffa850.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant9" src="./images/plant9.png" /> + <img class="plant" alt="plant" id="plant9" src="../../../../translated_images/en/plant9.f0e38d3327c37fc2.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant10" src="./images/plant10.png" /> + <img class="plant" alt="plant" id="plant10" src="../../../../translated_images/en/plant10.b159d6d6e985595f.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant11" src="./images/plant11.png" /> + <img class="plant" alt="plant" id="plant11" src="../../../../translated_images/en/plant11.2a03a1c2ec8ea84e.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant12" src="./images/plant12.png" /> + <img class="plant" alt="plant" id="plant12" src="../../../../translated_images/en/plant12.60e9b53e538fbaf3.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant13" src="./images/plant13.png" /> + <img class="plant" alt="plant" id="plant13" src="../../../../translated_images/en/plant13.07a51543c820bcf5.webp" /> </div> <div class="plant-holder"> - <img class="plant" alt="plant" id="plant14" src="./images/plant14.png" /> + <img class="plant" alt="plant" id="plant14" src="../../../../translated_images/en/plant14.6e486371ba7d36ba.webp" /> </div> </div> </div> ``` -> Note: Divs vs. Spans. Divs are 'block' elements, while Spans are 'inline'. What happens if you change these divs to spans? - -With this markup, the plants will now appear on the screen. It won't look great yet because the CSS styling hasn't been applied. We'll address that in the next lesson. - -Each image includes alt text, which appears if the image can't be displayed. This is an important attribute for accessibility. You'll learn more about accessibility in future lessons, but for now, remember that the alt attribute provides alternative information for an image if a user can't view it (due to a slow connection, an error in the `src` attribute, or if the user relies on a screen reader). - -✅ Did you notice that each image has the same alt tag? Is this good practice? Why or why not? Can you improve this code? - ---- - -## Semantic markup +**Step by step, here's what's happening in this code:** +- **Creates** a main page container with `id="page"` to hold all content +- **Establishes** two column containers: `left-container` and `right-container` +- **Organizes** 7 plants in the left column and 7 plants in the right column +- **Wraps** each plant image in a `plant-holder` div for individual positioning +- **Applies** consistent class names for CSS styling in the next lesson +- **Assigns** unique IDs to each plant image for JavaScript interaction later +- **Includes** proper file paths pointing to the images folder + +> 🤔 **Consider This**: Notice that all images currently have the same alt text "plant". This isn't ideal for accessibility. Screen reader users would hear "plant" repeated 14 times without knowing which specific plant each image shows. Can you think of better, more descriptive alt text for each image? + +> 📝 **HTML Element Types**: `<div>` elements are "block-level" and take up full width, while `<span>` elements are "inline" and only take up necessary width. What do you think would happen if you changed all these `<div>` tags to `<span>` tags? + +### 🔄 **Pedagogical Check-in** +**Structure Understanding**: Take a moment to review your HTML structure: +- ✅ Can you identify the main containers in your layout? +- ✅ Do you understand why each image has a unique ID? +- ✅ How would you describe the purpose of the `plant-holder` divs? + +**Visual Inspection**: Open your HTML file in a browser. You should see: +- A basic list of plant images +- Images organized in two columns +- Simple, unstyled layout + +**Remember**: This plain appearance is exactly what HTML should look like before CSS styling! + +With this markup added, the plants will appear on screen, though they won't look polished yet – that's what CSS is for in the next lesson! For now, you have a solid HTML foundation that properly organizes your content and follows accessibility best practices. + +## Using Semantic HTML for Accessibility + +Semantic HTML means choosing HTML elements based on their meaning and purpose, not just their appearance. When you use semantic markup, you're communicating the structure and meaning of your content to browsers, search engines, and assistive technologies like screen readers. + +```mermaid +flowchart TD + A[Need to add content?] --> B{What type?} + B -->|Main heading| C["<h1>"] + B -->|Subheading| D["<h2>, <h3>, etc."] + B -->|Paragraph| E["<p>"] + B -->|List| F["<ul>, <ol>"] + B -->|Navigation| G["<nav>"] + B -->|Article| H["<article>"] + B -->|Section| I["<section>"] + B -->|Generic container| J["<div>"] + + C --> K[Screen readers announce as main title] + D --> L[Creates proper heading hierarchy] + E --> M[Provides proper text spacing] + F --> N[Enables list navigation shortcuts] + G --> O[Identifies navigation landmarks] + H --> P[Marks standalone content] + I --> Q[Groups related content] + J --> R[Use only when no semantic tag fits] + + style C fill:#4caf50 + style D fill:#4caf50 + style E fill:#4caf50 + style F fill:#4caf50 + style G fill:#2196f3 + style H fill:#2196f3 + style I fill:#2196f3 + style J fill:#ff9800 +``` +This approach makes your websites more accessible to users with disabilities and helps search engines better understand your content. It's a fundamental principle of modern web development that creates better experiences for everyone. -Using meaningful 'semantics' in HTML means employing tags that represent the type of data or interaction they were designed for. For example, the main title text on a page should use an `<h1>` tag. +### Adding a Semantic Page Title -Add the following line right below your opening `<body>` tag: +Let's add a proper heading to your terrarium page. Insert this line right after your opening `<body>` tag: ```html <h1>My Terrarium</h1> ``` -Using semantic markup, such as headers with `<h1>` and unordered lists with `<ul>`, helps screen readers navigate a page. Buttons should be written as `<button>` and lists as `<li>`. While you can use styled `<span>` elements with click handlers to mimic buttons, it's better for accessibility to use actual button elements. This allows assistive technologies to identify and interact with buttons more effectively. +**Why semantic markup matters:** +- **Helps** screen readers navigate and understand page structure +- **Improves** search engine optimization (SEO) by clarifying content hierarchy +- **Enhances** accessibility for users with visual impairments or cognitive differences +- **Creates** better user experiences across all devices and platforms +- **Follows** web standards and best practices for professional development -✅ Watch a screen reader in action and [see how it interacts with a web page](https://www.youtube.com/watch?v=OUDV1gqs9GA). Can you understand why non-semantic markup might frustrate users? +**Examples of semantic vs. non-semantic choices:** -## The terrarium +| Purpose | ✅ Semantic Choice | ❌ Non-Semantic Choice | +|---------|-------------------|------------------------| +| Main heading | `<h1>Title</h1>` | `<div class="big-text">Title</div>` | +| Navigation | `<nav><ul><li></li></ul></nav>` | `<div class="menu"><div></div></div>` | +| Button | `<button>Click me</button>` | `<span onclick="...">Click me</span>` | +| Article content | `<article><p></p></article>` | `<div class="content"><div></div></div>` | -The final part of this interface involves adding markup that will later be styled to create a terrarium. +> 🎥 **See It in Action**: Watch [how screen readers interact with web pages](https://www.youtube.com/watch?v=OUDV1gqs9GA) to understand why semantic markup is crucial for accessibility. Notice how proper HTML structure helps users navigate efficiently. -### Task: +## Creating the Terrarium Container -Add this markup above the last `</div>` tag: +Now let's add the HTML structure for the terrarium itself – the glass container where plants will eventually be placed. This section demonstrates an important concept: HTML provides structure, but without CSS styling, these elements won't be visible yet. + +The terrarium markup uses descriptive class names that will make CSS styling intuitive and maintainable in the next lesson. + +### Task: Add the Terrarium Structure + +Insert this markup above the last `</div>` tag (before the closing tag of the page container): ```html <div id="terrarium"> @@ -220,13 +386,73 @@ Add this markup above the last `</div>` tag: </div> ``` -✅ Even though you've added this markup, nothing appears on the screen yet. Why? +**Understanding this terrarium structure:** +- **Creates** a main terrarium container with a unique ID for styling +- **Defines** separate elements for each visual component (top, walls, dirt, bottom) +- **Includes** nested elements for glass reflection effects (glossy elements) +- **Uses** descriptive class names that clearly indicate each element's purpose +- **Prepares** the structure for CSS styling that will create the glass terrarium appearance + +> 🤔 **Notice Something?**: Even though you added this markup, you don't see anything new on the page! This perfectly illustrates how HTML provides structure while CSS provides appearance. These `<div>` elements exist but have no visual styling yet – that's coming in the next lesson! + +```mermaid +flowchart TD + A[HTML Document] --> B[Document Head] + A --> C[Document Body] + B --> D[Title Element] + B --> E[Meta Charset] + B --> F[Meta Viewport] + C --> G[Main Heading] + C --> H[Page Container] + H --> I[Left Container with 7 plants] + H --> J[Right Container with 7 plants] + H --> K[Terrarium Structure] + + style A fill:#e1f5fe + style B fill:#fff3e0 + style C fill:#e8f5e8 + style H fill:#f3e5f5 +``` +### 🔄 **Pedagogical Check-in** +**HTML Structure Mastery**: Before moving forward, ensure you can: +- ✅ Explain the difference between HTML structure and visual appearance +- ✅ Identify semantic vs. non-semantic HTML elements +- ✅ Describe how proper markup benefits accessibility +- ✅ Recognize the complete document tree structure + +**Testing Your Understanding**: Try opening your HTML file in a browser with JavaScript disabled and CSS removed. This shows you the pure semantic structure you've created! --- -## 🚀Challenge +## GitHub Copilot Agent Challenge + +Use the Agent mode to complete the following challenge: + +**Description:** Create a semantic HTML structure for a plant care guide section that could be added to the terrarium project. + +**Prompt:** Create a semantic HTML section that includes a main heading "Plant Care Guide", three subsections with headings "Watering", "Light Requirements", and "Soil Care", each containing a paragraph of plant care information. Use proper semantic HTML tags like `<section>`, `<h2>`, `<h3>`, and `<p>` to structure the content appropriately. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + +## Explore HTML History Challenge + +**Learning About Web Evolution** + +HTML has evolved significantly since Tim Berners-Lee created the first web browser at CERN in 1990. Some older tags like `<marquee>` are now deprecated because they don't work well with modern accessibility standards and responsive design principles. + +**Try This Experiment:** +1. Temporarily wrap your `<h1>` title in a `<marquee>` tag: `<marquee><h1>My Terrarium</h1></marquee>` +2. Open your page in a browser and observe the scrolling effect +3. Consider why this tag was deprecated (hint: think about user experience and accessibility) +4. Remove the `<marquee>` tag and return to semantic markup + +**Reflection Questions:** +- How might a scrolling title affect users with visual impairments or motion sensitivity? +- What modern CSS techniques could achieve similar visual effects more accessibly? +- Why is it important to use current web standards instead of deprecated elements? + +Explore more about [obsolete and deprecated HTML elements](https://developer.mozilla.org/docs/Web/HTML/Element#Obsolete_and_deprecated_elements) to understand how web standards evolve to improve user experience. -HTML includes some quirky 'older' tags that are fun to experiment with, even though you shouldn't use deprecated tags like [these tags](https://developer.mozilla.org/docs/Web/HTML/Element#Obsolete_and_deprecated_elements) in your markup. Can you use the old `<marquee>` tag to make the `<h1>` title scroll horizontally? (Remember to remove it afterward!) ## Post-Lecture Quiz @@ -234,9 +460,119 @@ HTML includes some quirky 'older' tags that are fun to experiment with, even tho ## Review & Self Study -HTML is the foundational system that has shaped the web into what it is today. Explore its history by studying old and new tags. Can you figure out why some tags were deprecated and others introduced? What tags might be added in the future? +**Deepen Your HTML Knowledge** + +HTML has been the foundation of the web for over 30 years, evolving from a simple document markup language to a sophisticated platform for building interactive applications. Understanding this evolution helps you appreciate modern web standards and make better development decisions. + +**Recommended Learning Paths:** + +1. **HTML History and Evolution** + - Research the timeline from HTML 1.0 to HTML5 + - Explore why certain tags were deprecated (accessibility, mobile-friendliness, maintainability) + - Investigate emerging HTML features and proposals + +2. **Semantic HTML Deep Dive** + - Study the complete list of [HTML5 semantic elements](https://developer.mozilla.org/docs/Web/HTML/Element) + - Practice identifying when to use `<article>`, `<section>`, `<aside>`, and `<main>` + - Learn about ARIA attributes for enhanced accessibility + +3. **Modern Web Development** + - Explore [building responsive websites](https://docs.microsoft.com/learn/modules/build-simple-website/?WT.mc_id=academic-77807-sagibbon) on Microsoft Learn + - Understand how HTML integrates with CSS and JavaScript + - Learn about web performance and SEO best practices + +**Reflection Questions:** +- Which deprecated HTML tags did you discover, and why were they removed? +- What new HTML features are being proposed for future versions? +- How does semantic HTML contribute to web accessibility and SEO? + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open DevTools (F12) and inspect the HTML structure of your favorite website +- [ ] Create a simple HTML file with basic tags: `<h1>`, `<p>`, and `<img>` +- [ ] Validate your HTML using the W3C HTML Validator online +- [ ] Try adding a comment to your HTML using `<!-- comment -->` + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and review semantic HTML concepts +- [ ] Build a simple webpage about yourself using proper HTML structure +- [ ] Experiment with different heading levels and text formatting tags +- [ ] Add images and links to practice multimedia integration +- [ ] Research HTML5 features you haven't tried yet + +### 📅 **Your Week-Long HTML Journey** +- [ ] Complete the terrarium project assignment with semantic markup +- [ ] Create an accessible webpage using ARIA labels and roles +- [ ] Practice form creation with various input types +- [ ] Explore HTML5 APIs like localStorage or geolocation +- [ ] Study responsive HTML patterns and mobile-first design +- [ ] Review other developers' HTML code for best practices + +### 🌟 **Your Month-Long Web Foundation** +- [ ] Build a portfolio website showcasing your HTML mastery +- [ ] Learn HTML templating with a framework like Handlebars +- [ ] Contribute to open source projects by improving HTML documentation +- [ ] Master advanced HTML concepts like custom elements +- [ ] Integrate HTML with CSS frameworks and JavaScript libraries +- [ ] Mentor others learning HTML fundamentals + +## 🎯 Your HTML Mastery Timeline + +```mermaid +timeline + title HTML Learning Progression + + section Foundation (5 minutes) + Document Structure: DOCTYPE declaration + : HTML root element + : Head vs Body understanding + + section Metadata (10 minutes) + Essential Meta Tags: Character encoding + : Viewport configuration + : Browser compatibility + + section Content Creation (15 minutes) + Image Integration: Proper file paths + : Alt text importance + : Self-closing tags + + section Layout Organization (20 minutes) + Container Strategy: Div elements for structure + : Class and ID naming + : Nested element hierarchy + + section Semantic Mastery (30 minutes) + Meaningful Markup: Heading hierarchy + : Screen reader navigation + : Accessibility best practices + + section Advanced Concepts (1 hour) + HTML5 Features: Modern semantic elements + : ARIA attributes + : Performance considerations + + section Professional Skills (1 week) + Code Organization: File structure patterns + : Maintainable markup + : Team collaboration + + section Expert Level (1 month) + Modern Web Standards: Progressive enhancement + : Cross-browser compatibility + : HTML specification updates +``` +### 🛠️ Your HTML Toolkit Summary + +After completing this lesson, you now have: +- **Document Structure**: Complete HTML5 foundation with proper DOCTYPE +- **Semantic Markup**: Meaningful tags that enhance accessibility and SEO +- **Image Integration**: Proper file organization and alt text practices +- **Layout Containers**: Strategic use of divs with descriptive class names +- **Accessibility Awareness**: Understanding of screen reader navigation +- **Modern Standards**: Current HTML5 practices and deprecated tag knowledge +- **Project Foundation**: Solid base for CSS styling and JavaScript interactivity -Learn more about building websites for the web and mobile devices at [Microsoft Learn](https://docs.microsoft.com/learn/modules/build-simple-website/?WT.mc_id=academic-77807-sagibbon). +**Next Steps**: Your HTML structure is ready for CSS styling! The semantic foundation you've built will make the next lesson much easier to understand. ## Assignment @@ -245,5 +581,7 @@ Learn more about building websites for the web and mobile devices at [Microsoft --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +<!-- CO-OP TRANSLATOR DISCLAIMER START --> +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. +<!-- CO-OP TRANSLATOR DISCLAIMER END --> \ No newline at end of file diff --git a/translations/en/3-terrarium/1-intro-to-html/assignment.md b/translations/en/3-terrarium/1-intro-to-html/assignment.md index 1cc53d61e..ba6259104 100644 --- a/translations/en/3-terrarium/1-intro-to-html/assignment.md +++ b/translations/en/3-terrarium/1-intro-to-html/assignment.md @@ -1,53 +1,145 @@ -<!-- -CO_OP_TRANSLATOR_METADATA: -{ - "original_hash": "5a764667bbe82aa72ac0a67f4c97ff4a", - "translation_date": "2025-10-03T08:22:44+00:00", - "source_file": "3-terrarium/1-intro-to-html/assignment.md", - "language_code": "en" -} ---> # HTML Practice Assignment: Build a Blog Mockup -## Objective +## Learning Objectives -Create and hand-code the HTML structure for a personal blog homepage. This task will help you practice using semantic HTML, planning layouts, and organizing your code. +Apply your HTML knowledge by designing and coding a complete blog homepage structure. This hands-on assignment will reinforce semantic HTML concepts, accessibility best practices, and professional code organization skills that you'll use throughout your web development journey. -## Instructions +**By completing this assignment, you will:** +- Practice planning website layouts before coding +- Apply semantic HTML elements appropriately +- Create accessible, well-structured markup +- Develop professional coding habits with comments and organization -1. **Design Your Blog Mockup** - - Draw a visual representation of your blog homepage. Include essential sections like the header, navigation, main content, sidebar, and footer. - - You can sketch it on paper and scan it, or use digital tools (e.g., Figma, Adobe XD, Canva, or even PowerPoint). +## Project Requirements -2. **Identify HTML Elements** - - Make a list of the HTML elements you intend to use for each section (e.g., `<header>`, `<nav>`, `<main>`, `<article>`, `<aside>`, `<footer>`, `<section>`, `<h1>`–`<h6>`, `<p>`, `<img>`, `<ul>`, `<li>`, `<a>`, etc.). +### Part 1: Design Planning (Visual Mockup) -3. **Write the HTML Markup** - - Hand-code the HTML for your mockup, focusing on semantic structure and best practices. - - Use at least 10 different HTML elements. - - Add comments to explain your choices and structure. +**Create a visual mockup of your blog homepage that includes:** +- Header with site title and navigation +- Main content area with at least 2-3 blog post previews +- Sidebar with additional information (about section, recent posts, categories) +- Footer with contact information or links -4. **Submit Your Work** - - Upload your sketch/mockup along with your HTML file. - - Optionally, write a short reflection (2–3 sentences) about your design decisions. +**Mockup Creation Options:** +- **Hand-drawn sketch**: Use paper and pencil, then photograph or scan your design +- **Digital tools**: Figma, Adobe XD, Canva, PowerPoint, or any drawing application +- **Wireframe tools**: Balsamiq, MockFlow, or similar wireframing software -## Rubric +**Label your mockup sections** with the HTML elements you plan to use (e.g., "Header - `<header>`", "Blog Posts - `<article>`"). -| Criteria | Outstanding | Satisfactory | Needs Improvement | -|------------------|-------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------|---------------------------------------------------------------------------------| -| Visual Mockup | Detailed and clear mockup with labeled sections and a thoughtful layout | Basic mockup with some labeled sections | Incomplete or unclear mockup; missing section labels | -| HTML Elements | Includes 10+ semantic HTML elements; shows understanding of structure and best practices | Includes 5–9 HTML elements; some semantic structure | Includes fewer than 5 elements; lacks semantic structure | -| Code Quality | Code is well-organized, readable, and includes comments; adheres to HTML standards | Code is mostly organized; few comments | Code is disorganized; lacks comments | -| Reflection | Provides meaningful insights into design choices and challenges | Offers a basic reflection | No reflection or lacks relevance | +### Part 2: HTML Element Planning -## Tips +**Create a list mapping each section of your mockup to specific HTML elements:** -- Use semantic HTML tags to improve accessibility and SEO. -- Organize your code with proper indentation and comments. -- Refer to [MDN HTML Elements Reference](https://developer.mozilla.org/en-US/docs/Web/HTML/Element) for guidance. -- Consider how your layout could be expanded or styled in future assignments. +``` +Example: +- Site Header → <header> +- Main Navigation → <nav> with <ul> and <li> +- Blog Post → <article> with <h2>, <p>, <time> +- Sidebar → <aside> with <section> elements +- Page Footer → <footer> +``` + +**Required Elements to Include:** +Your HTML must contain at least 10 different semantic elements from this list: +- `<header>`, `<nav>`, `<main>`, `<article>`, `<section>`, `<aside>`, `<footer>` +- `<h1>`, `<h2>`, `<h3>`, `<p>`, `<ul>`, `<li>`, `<a>` +- `<img>`, `<time>`, `<blockquote>`, `<strong>`, `<em>` + +### Part 3: HTML Implementation + +**Code your blog homepage following these standards:** + +1. **Document Structure**: Include proper DOCTYPE, html, head, and body elements +2. **Semantic Markup**: Use HTML elements for their intended purpose +3. **Accessibility**: Include proper alt text for images and meaningful link text +4. **Code Quality**: Use consistent indentation and meaningful comments +5. **Content**: Include realistic blog content (you can use placeholder text) + +**Sample HTML Structure:** +```html +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>My Personal Blog + + + +
+

My Blog Title

+ +
+ + +
+ +
+ + + + + +
+ +
+ + +``` + +### Part 4: Reflection + +**Write a brief reflection (3-5 sentences) addressing:** +- Which HTML elements were you most confident using? +- What challenges did you encounter while planning or coding? +- How did semantic HTML help organize your content? +- What would you do differently in your next HTML project? + +## Submission Checklist + +**Before submitting, ensure you have:** +- [ ] Visual mockup with labeled HTML elements +- [ ] Complete HTML file with proper document structure +- [ ] At least 10 different semantic HTML elements used appropriately +- [ ] Meaningful comments explaining your code structure +- [ ] Valid HTML syntax (test in a browser) +- [ ] Written reflection addressing the prompt questions + +## Assessment Rubric + +| Criteria | Exemplary (4) | Proficient (3) | Developing (2) | Beginning (1) | +|----------|---------------|----------------|----------------|---------------| +| **Planning & Design** | Detailed, well-labeled mockup showing clear understanding of layout and HTML semantic structure | Clear mockup with most sections labeled appropriately | Basic mockup with some labeling, shows general understanding | Minimal or unclear mockup, lacks proper section identification | +| **Semantic HTML Usage** | Uses 10+ semantic elements appropriately, demonstrates deep understanding of HTML structure and accessibility | Uses 8-9 semantic elements correctly, shows good understanding of semantic markup | Uses 6-7 semantic elements, some confusion about appropriate usage | Uses fewer than 6 elements or misuses semantic elements | +| **Code Quality & Organization** | Exceptionally well-organized, properly indented code with comprehensive comments and perfect HTML syntax | Well-organized code with good indentation, helpful comments, and valid syntax | Mostly organized code with some comments, minor syntax issues | Poor organization, minimal comments, multiple syntax errors | +| **Accessibility & Best Practices** | Excellent accessibility considerations, meaningful alt text, proper heading hierarchy, follows all modern HTML best practices | Good accessibility features, appropriate use of headings and alt text, follows most best practices | Some accessibility considerations, basic alt text and heading structure | Limited accessibility features, poor heading structure, doesn't follow best practices | +| **Reflection & Learning** | Insightful reflection demonstrating deep understanding of HTML concepts and thoughtful analysis of the learning process | Good reflection showing understanding of key concepts and some self-awareness of learning | Basic reflection with limited insight into HTML concepts or learning process | Minimal or missing reflection, shows little understanding of concepts learned | + +## Learning Resources + +**Essential References:** +- [MDN HTML Elements Reference](https://developer.mozilla.org/docs/Web/HTML/Element) - Complete guide to all HTML elements +- [HTML5 Semantic Elements](https://developer.mozilla.org/docs/Web/HTML/Element#content_sectioning) - Understanding semantic markup +- [Web Accessibility Guidelines](https://www.w3.org/WAI/WCAG21/quickref/) - Creating accessible web content +- [HTML Validator](https://validator.w3.org/) - Check your HTML syntax + +**Pro Tips for Success:** +- Start with your mockup before writing any code +- Use the browser's developer tools to inspect your HTML structure +- Test your page with different screen sizes (even without CSS) +- Read your HTML aloud to check if the structure makes logical sense +- Consider how a screen reader would interpret your page structure + +> 💡 **Remember**: This assignment focuses on HTML structure and semantics. Don't worry about visual styling – that's what CSS is for! Your page might look plain, but it should be well-structured and meaningful. --- + **Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/3-terrarium/2-intro-to-css/README.md b/translations/en/3-terrarium/2-intro-to-css/README.md index 328518e8d..87bf3098e 100644 --- a/translations/en/3-terrarium/2-intro-to-css/README.md +++ b/translations/en/3-terrarium/2-intro-to-css/README.md @@ -1,275 +1,718 @@ - # Terrarium Project Part 2: Introduction to CSS -![Introduction to CSS](../../../../translated_images/en/webdev101-css.3f7af5991bf53a200d79e7257e5e450408d8ea97f5b531d31b2e3976317338ee.png) +```mermaid +journey + title Your CSS Styling Journey + section Foundation + Link CSS file: 3: Student + Understand cascade: 4: Student + Learn inheritance: 4: Student + section Selectors + Element targeting: 4: Student + Class patterns: 5: Student + ID specificity: 5: Student + section Layout + Position elements: 4: Student + Create containers: 5: Student + Build terrarium: 5: Student + section Polish + Add visual effects: 5: Student + Responsive design: 5: Student + Glass reflections: 5: Student +``` +![Introduction to CSS](../../../../translated_images/en/webdev101-css.3f7af5991bf53a20.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +Remember how your HTML terrarium looked quite basic? CSS is where we transform that plain structure into something visually appealing. + +If HTML is like building the frame of a house, then CSS is everything that makes it feel like home - the paint colors, the furniture arrangement, the lighting, and how the rooms flow together. Think of how the Palace of Versailles started as a simple hunting lodge, but careful attention to decoration and layout transformed it into one of the world's most magnificent buildings. + +Today, we'll transform your terrarium from functional to polished. You'll learn how to position elements precisely, make layouts respond to different screen sizes, and create the visual appeal that makes websites engaging. + +By the end of this lesson, you'll see how strategic CSS styling can dramatically improve your project. Let's add some style to your terrarium. + +```mermaid +mindmap + root((CSS Fundamentals)) + Cascade + Specificity Rules + Inheritance + Priority Order + Conflict Resolution + Selectors + Element Tags + Classes (.class) + IDs (#id) + Combinators + Box Model + Margin + Border + Padding + Content + Layout + Positioning + Display Types + Flexbox + Grid + Visual Effects + Colors + Shadows + Transitions + Animations + Responsive Design + Media Queries + Flexible Units + Viewport Meta + Mobile First +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/17) -### Introduction +## Getting Started with CSS + +CSS is often thought of as just "making things pretty," but it serves a much broader purpose. CSS is like being the director of a movie - you control not just how everything looks, but how it moves, responds to interaction, and adapts to different situations. -CSS, or Cascading Style Sheets, addresses a key challenge in web development: making your website visually appealing. Styling your apps not only enhances their usability and aesthetics but also enables Responsive Web Design (RWD), ensuring your apps look great on any screen size. CSS goes beyond just making things look good; its specifications include animations and transformations that allow for advanced interactions in your apps. The CSS Working Group maintains the current CSS specifications, and you can follow their work on the [World Wide Web Consortium's site](https://www.w3.org/Style/CSS/members). +Modern CSS is remarkably capable. You can write code that automatically adjusts layouts for phones, tablets, and desktop computers. You can create smooth animations that guide users' attention where needed. The results can be quite impressive when everything works together. -> Note: CSS is an evolving language, like everything on the web, and not all browsers support the latest specifications. Always verify your implementations using [CanIUse.com](https://caniuse.com). +> 💡 **Pro Tip**: CSS is constantly evolving with new features and capabilities. Always check [CanIUse.com](https://caniuse.com) to verify browser support for newer CSS features before using them in production projects. -In this lesson, we’ll add styles to our online terrarium and explore key CSS concepts: the cascade, inheritance, selectors, positioning, and using CSS for layouts. By the end, we’ll have styled the terrarium and created the actual terrarium itself. +**Here's what we'll accomplish in this lesson:** +- **Creates** a complete visual design for your terrarium using modern CSS techniques +- **Explores** fundamental concepts like the cascade, inheritance, and CSS selectors +- **Implements** responsive positioning and layout strategies +- **Builds** the terrarium container using CSS shapes and styling ### Prerequisite -You should already have the HTML for your terrarium prepared and ready for styling. +You should have completed the HTML structure for your terrarium from the previous lesson and have it ready to be styled. -> Watch the video +> 📺 **Video Resource**: Check out this helpful video walkthrough +> +> [![CSS Basics Tutorial](https://img.youtube.com/vi/6yIdOIV9p1I/0.jpg)](https://www.youtube.com/watch?v=6yIdOIV9p1I) -> -> [![Git and GitHub basics video](https://img.youtube.com/vi/6yIdOIV9p1I/0.jpg)](https://www.youtube.com/watch?v=6yIdOIV9p1I) +### Setting Up Your CSS File -### Task +Before we can start styling, we need to connect CSS to our HTML. This connection tells the browser where to find the styling instructions for our terrarium. -In your terrarium folder, create a new file called `style.css`. Link this file in the `` section of your HTML: +In your terrarium folder, create a new file called `style.css`, then link it in your HTML document's `` section: ```html ``` ---- +**Here's what this code does:** +- **Creates** a connection between your HTML and CSS files +- **Tells** the browser to load and apply the styles from `style.css` +- **Uses** the `rel="stylesheet"` attribute to specify this is a CSS file +- **References** the file path with `href="./style.css"` + +## Understanding the CSS Cascade -## The Cascade +Ever wondered why CSS is called "Cascading" Style Sheets? Styles cascade down like a waterfall, and sometimes they conflict with each other. -Cascading Style Sheets are based on the concept of "cascading," meaning that the application of styles is determined by their priority. Styles defined by the website author take precedence over browser defaults. Inline styles have the highest priority, followed by styles in external stylesheets. +Consider how military command structures work - a general order might say "all troops wear green," but a specific order to your unit might say "wear dress blues for the ceremony." The more specific instruction takes precedence. CSS follows similar logic, and understanding this hierarchy makes debugging much more manageable. -### Task +### Experimenting with Cascade Priority -Add the inline style "color: red" to your `

` tag: +Let's see the cascade in action by creating a style conflict. First, add an inline style to your `

` tag: -```HTML +```html

My Terrarium

``` -Next, add the following code to your `style.css` file: +**What this code does:** +- **Applies** a red color directly to the `

` element using inline styling +- **Uses** the `style` attribute to embed CSS directly in the HTML +- **Creates** the highest priority style rule for this specific element + +Next, add this rule to your `style.css` file: -```CSS +```css h1 { - color: blue; + color: blue; } ``` -✅ Which color appears in your web app? Why? Can you find a way to override styles? When might you want to do this, or why not? +**In the above, we've:** +- **Defined** a CSS rule that targets all `

` elements +- **Set** the text color to blue using an external stylesheet +- **Created** a lower priority rule compared to inline styles + +✅ **Knowledge Check**: Which color displays in your web app? Why does that color win? Can you think of scenarios where you might want to override styles? + +```mermaid +flowchart TD + A["Browser encounters h1 element"] --> B{"Check for inline styles"} + B -->|Found| C["style='color: red'"] + B -->|None| D{"Check for ID rules"} + C --> E["Apply red color (1000 points)"] + D -->|Found| F["#heading { color: green }"] + D -->|None| G{"Check for class rules"} + F --> H["Apply green color (100 points)"] + G -->|Found| I[".title { color: blue }"] + G -->|None| J{"Check element rules"} + I --> K["Apply blue color (10 points)"] + J -->|Found| L["h1 { color: purple }"] + J -->|None| M["Use browser default"] + L --> N["Apply purple color (1 point)"] + + style C fill:#ff6b6b + style F fill:#51cf66 + style I fill:#339af0 + style L fill:#9775fa +``` +> 💡 **CSS Priority Order (highest to lowest):** +> 1. **Inline styles** (style attribute) +> 2. **IDs** (#myId) +> 3. **Classes** (.myClass) and attributes +> 4. **Element selectors** (h1, div, p) +> 5. **Browser defaults** ---- +## CSS Inheritance in Action -## Inheritance +CSS inheritance works like genetics - elements inherit certain properties from their parent elements. If you set the font family on the body element, all text inside automatically uses that same font. It's similar to how the Habsburg family's distinctive jawline appeared across generations without being specified for each individual. -Styles are passed down from parent elements to their child elements, meaning nested elements inherit the styles of their parent. +However, not everything gets inherited. Text styles like fonts and colors do inherit, but layout properties like margins and borders do not. Just as children might inherit physical traits but not their parents' fashion choices. -### Task +### Observing Font Inheritance -Set the font for the body and check if a nested element inherits it: +Let's see inheritance in action by setting a font family on the `` element: -```CSS +```css body { - font-family: helvetica, arial, sans-serif; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; } ``` -Open your browser's console and inspect the 'Elements' tab. Observe the font of the `

` tag. You’ll see that it inherits the font from the body, as indicated by the browser: +**Breaking down what happens here:** +- **Sets** the font family for the entire page by targeting the `` element +- **Uses** a font stack with fallback options for better browser compatibility +- **Applies** modern system fonts that look great across different operating systems +- **Ensures** all child elements inherit this font unless specifically overridden -![inherited font](../../../../translated_images/en/1.cc07a5cbe114ad1d4728c35134584ac1b87db688eff83cf75985cf31fe0ed95c.png) +Open your browser's developer tools (F12), navigate to the Elements tab, and inspect your `

` element. You'll see that it inherits the font family from the body: -✅ Can you make a nested style inherit a different property? +![inherited font](../../../../translated_images/en/1.cc07a5cbe114ad1d.webp) ---- +✅ **Experiment Time**: Try setting other inheritable properties on the `` like `color`, `line-height`, or `text-align`. What happens to your heading and other elements? + +> 📝 **Inheritable Properties Include**: `color`, `font-family`, `font-size`, `line-height`, `text-align`, `visibility` +> +> **Non-Inheritable Properties Include**: `margin`, `padding`, `border`, `width`, `height`, `position` + +### 🔄 **Pedagogical Check-in** +**CSS Foundation Understanding**: Before moving to selectors, ensure you can: +- ✅ Explain the difference between cascade and inheritance +- ✅ Predict which style will win in a specificity conflict +- ✅ Identify which properties inherit from parent elements +- ✅ Connect CSS files to HTML properly + +**Quick Test**: If you have these styles, what color will an `

` inside a `
` be? +```css +div { color: blue; } +.special { color: green; } +h1 { color: red; } +``` +*Answer: Red (element selector directly targets h1)* + +## Mastering CSS Selectors -## CSS Selectors +CSS selectors are your way of targeting specific elements for styling. They work like giving precise directions - instead of saying "the house," you might say "the blue house with the red door on Maple Street." -### Tags +CSS provides different ways to be specific, and choosing the right selector is like choosing the appropriate tool for the task. Sometimes you need to style every door in the neighborhood, and sometimes just one specific door. -So far, your `style.css` file has only a few tags styled, and the app looks a bit odd: +### Element Selectors (Tags) -```CSS +Element selectors target HTML elements by their tag name. They're perfect for setting base styles that apply broadly across your page: + +```css body { - font-family: helvetica, arial, sans-serif; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + margin: 0; + padding: 0; } h1 { - color: #3a241d; - text-align: center; + color: #3a241d; + text-align: center; + font-size: 2.5rem; + margin-bottom: 1rem; } ``` -This method of styling tags allows you to control individual elements, but to style multiple plants in your terrarium, you’ll need to use CSS selectors. +**Understanding these styles:** +- **Sets** consistent typography across the entire page with the `body` selector +- **Removes** default browser margins and padding for better control +- **Styles** all heading elements with color, alignment, and spacing +- **Uses** `rem` units for scalable, accessible font sizing + +While element selectors work well for general styling, you'll need more specific selectors to style individual components like the plants in your terrarium. -### Ids +### ID Selectors for Unique Elements -Add styles to position the left and right containers. Since there’s only one left container and one right container, they are assigned ids in the HTML. Use `#` to style them: +ID selectors use the `#` symbol and target elements with specific `id` attributes. Since IDs must be unique on a page, they're perfect for styling individual, special elements like our left and right plant containers. -```CSS +Let's create the styling for our terrarium's side containers where the plants will live: + +```css #left-container { - background-color: #eee; - width: 15%; - left: 0px; - top: 0px; - position: absolute; - height: 100%; - padding: 10px; + background-color: #f5f5f5; + width: 15%; + left: 0; + top: 0; + position: absolute; + height: 100vh; + padding: 1rem; + box-sizing: border-box; } #right-container { - background-color: #eee; - width: 15%; - right: 0px; - top: 0px; - position: absolute; - height: 100%; - padding: 10px; + background-color: #f5f5f5; + width: 15%; + right: 0; + top: 0; + position: absolute; + height: 100vh; + padding: 1rem; + box-sizing: border-box; } ``` -Here, the containers are positioned absolutely on the far left and right of the screen, with their widths set as percentages to ensure they scale on smaller mobile screens. +**Here's what this code accomplishes:** +- **Positions** containers at the far left and right edges using `absolute` positioning +- **Uses** `vh` (viewport height) units for responsive height that adapts to screen size +- **Applies** `box-sizing: border-box` so padding is included in the total width +- **Removes** unnecessary `px` units from zero values for cleaner code +- **Sets** a subtle background color that's easier on the eyes than stark gray -✅ This code is repetitive and not "DRY" (Don’t Repeat Yourself). Can you find a better way to style these ids, perhaps by combining an id and a class? You’ll need to update the HTML and refactor the CSS: +✅ **Code Quality Challenge**: Notice how this CSS violates the DRY (Don't Repeat Yourself) principle. Can you refactor it using both an ID and a class? +**Improved approach:** ```html
+
``` -### Classes +```css +.container { + background-color: #f5f5f5; + width: 15%; + top: 0; + position: absolute; + height: 100vh; + padding: 1rem; + box-sizing: border-box; +} -In the example above, you styled two unique elements. To apply styles to multiple elements, use CSS classes. Style the plants in the left and right containers as follows. +#left-container { + left: 0; +} -Notice that each plant in the HTML has both ids and classes. The ids are used by JavaScript (added later) to manipulate the placement of plants in the terrarium. The classes, however, define the styles for all plants. +#right-container { + right: 0; +} +``` + +### Class Selectors for Reusable Styles + +Class selectors use the `.` symbol and are perfect when you want to apply the same styles to multiple elements. Unlike IDs, classes can be reused throughout your HTML, making them ideal for consistent styling patterns. + +In our terrarium, each plant needs similar styling but also needs individual positioning. We'll use a combination of classes for shared styles and IDs for unique positioning. +**Here's the HTML structure for each plant:** ```html
- plant + Decorative plant for terrarium
``` -Add the following to your `style.css` file: +**Key elements explained:** +- **Uses** `class="plant-holder"` for consistent container styling across all plants +- **Applies** `class="plant"` for shared image styling and behavior +- **Includes** unique `id="plant1"` for individual positioning and JavaScript interaction +- **Provides** descriptive alt text for screen reader accessibility -```CSS +Now add these styles to your `style.css` file: + +```css .plant-holder { - position: relative; - height: 13%; - left: -10px; + position: relative; + height: 13%; + left: -0.6rem; } .plant { - position: absolute; - max-width: 150%; - max-height: 150%; - z-index: 2; + position: absolute; + max-width: 150%; + max-height: 150%; + z-index: 2; + transition: transform 0.3s ease; } -``` - -Key points in this snippet include the combination of relative and absolute positioning, which we’ll discuss in the next section. Pay attention to how heights are managed using percentages: -- The plant holder’s height is set to 13%, ensuring all plants fit vertically within their containers without scrolling. -- The plant holder is shifted left to center the plants within their containers. The plant images have a lot of transparent space to make them draggable, so they need to be adjusted for better alignment. -- The plant’s max-width is set to 150%, allowing it to scale down as the browser window shrinks. Resize your browser to see how the plants stay within their containers while scaling down. - -Also noteworthy is the use of `z-index`, which controls the stacking order of elements (ensuring the plants appear on top of the container and look like they’re inside the terrarium). - -✅ Why do you need both a plant holder and a plant CSS selector? - -## CSS Positioning - -Mixing position properties (static, relative, fixed, absolute, and sticky) can be tricky, but when done correctly, it provides precise control over your page elements. - -- Absolutely positioned elements are placed relative to their nearest positioned ancestor. If none exists, they are positioned relative to the document body. -- Relatively positioned elements are offset from their original position based on the CSS instructions. - -In our example, the `plant-holder` is relatively positioned within an absolutely positioned container. This setup ensures the side containers are pinned to the left and right, while the `plant-holder` adjusts itself within the side containers, creating space for the plants to align vertically. +.plant:hover { + transform: scale(1.05); +} +``` -> The `plant` itself is absolutely positioned, which is necessary for making it draggable, as you’ll learn in the next lesson. +**Breaking down these styles:** +- **Creates** relative positioning for the plant holder to establish a positioning context +- **Sets** each plant holder to 13% height, ensuring all plants fit vertically without scrolling +- **Shifts** holders slightly left to better center plants within their containers +- **Allows** plants to scale responsively with `max-width` and `max-height` properties +- **Uses** `z-index` to layer plants above other elements in the terrarium +- **Adds** a subtle hover effect with CSS transitions for better user interaction + +✅ **Critical Thinking**: Why do we need both `.plant-holder` and `.plant` selectors? What would happen if we tried to use just one? + +> 💡 **Design Pattern**: The container (`.plant-holder`) controls layout and positioning, while the content (`.plant`) controls appearance and scaling. This separation makes the code more maintainable and flexible. + +## Understanding CSS Positioning + +CSS positioning is like being the stage director for a play - you direct where every actor stands and how they move around the stage. Some actors follow the standard formation, while others need specific positioning for dramatic effect. + +Once you understand positioning, many layout challenges become manageable. Need a navigation bar that stays at the top while users scroll? Positioning handles that. Want a tooltip that appears at a specific location? That's positioning too. + +### The Five Position Values + +```mermaid +quadrantChart + title CSS Positioning Strategy + x-axis Document Flow --> Removed from Flow + y-axis Static Position --> Precise Control + quadrant-1 Absolute + quadrant-2 Fixed + quadrant-3 Static + quadrant-4 Sticky + + Static: [0.2, 0.2] + Relative: [0.3, 0.6] + Absolute: [0.8, 0.8] + Fixed: [0.9, 0.7] + Sticky: [0.5, 0.9] +``` +| Position Value | Behavior | Use Case | +|----------------|----------|----------| +| `static` | Default flow, ignores top/left/right/bottom | Normal document layout | +| `relative` | Positioned relative to its normal position | Small adjustments, creating positioning context | +| `absolute` | Positioned relative to nearest positioned ancestor | Precise placement, overlays | +| `fixed` | Positioned relative to viewport | Navigation bars, floating elements | +| `sticky` | Switches between relative and fixed based on scroll | Headers that stick when scrolling | + +### Positioning in Our Terrarium + +Our terrarium uses a strategic combination of positioning types to create the desired layout: + +```css +/* Container positioning */ +.container { + position: absolute; /* Removes from normal flow */ + /* ... other styles ... */ +} -✅ Experiment with changing the positioning of the side containers and the `plant-holder`. What happens? +/* Plant holder positioning */ +.plant-holder { + position: relative; /* Creates positioning context */ + /* ... other styles ... */ +} -## CSS Layouts +/* Plant positioning */ +.plant { + position: absolute; /* Allows precise placement within holder */ + /* ... other styles ... */ +} +``` -Now, use what you’ve learned to build the terrarium itself using only CSS! +**Understanding the positioning strategy:** +- **Absolute containers** are removed from normal document flow and pinned to screen edges +- **Relative plant holders** create a positioning context while staying in document flow +- **Absolute plants** can be positioned precisely within their relative containers +- **This combination** allows plants to stack vertically while being individually positionable + +> 🎯 **Why This Matters**: The `plant` elements need absolute positioning to become draggable in the next lesson. Absolute positioning removes them from the normal layout flow, making drag-and-drop interactions possible. + +✅ **Experiment Time**: Try changing the positioning values and observe the results: +- What happens if you change `.container` from `absolute` to `relative`? +- How does the layout change if `.plant-holder` uses `absolute` instead of `relative`? +- What occurs when you switch `.plant` to `relative` positioning? + +### 🔄 **Pedagogical Check-in** +**CSS Positioning Mastery**: Pause to verify your understanding: +- ✅ Can you explain why plants need absolute positioning for drag-and-drop? +- ✅ Do you understand how relative containers create positioning context? +- ✅ Why do the side containers use absolute positioning? +- ✅ What would happen if you removed position declarations entirely? + +**Real-World Connection**: Think about how CSS positioning mirrors real-world layout: +- **Static**: Books on a shelf (natural order) +- **Relative**: Moving a book slightly but keeping its spot +- **Absolute**: Placing a bookmark at an exact page number +- **Fixed**: A sticky note that stays visible as you flip pages + +## Building the Terrarium with CSS + +Now we'll build a glass jar using only CSS - no images or graphics software required. + +Creating realistic-looking glass, shadows, and depth effects using positioning and transparency demonstrates CSS's visual capabilities. This technique mirrors how architects in the Bauhaus movement used simple geometric forms to create complex, beautiful structures. Once you understand these principles, you'll recognize the CSS techniques behind many web designs. + +```mermaid +flowchart LR + A[Jar Top] --> E[Complete Terrarium] + B[Jar Walls] --> E + C[Dirt Layer] --> E + D[Jar Bottom] --> E + F[Glass Effects] --> E + + A1["50% width
5% height
Top position"] --> A + B1["60% width
80% height
Rounded corners
0.5 opacity"] --> B + C1["60% width
5% height
Dark brown
Bottom layer"] --> C + D1["50% width
1% height
Bottom position"] --> D + F1["Subtle shadows
Transparency
Z-index layering"] --> F + + style E fill:#d1e1df,stroke:#3a241d + style A fill:#e8f5e8 + style B fill:#e8f5e8 + style C fill:#8B4513 + style D fill:#e8f5e8 +``` +### Creating the Glass Jar Components -First, style the `.terrarium` div children as a rounded rectangle: +Let's build the terrarium jar piece by piece. Each part uses absolute positioning and percentage-based sizing for responsive design: -```CSS +```css .jar-walls { - height: 80%; - width: 60%; - background: #d1e1df; - border-radius: 1rem; - position: absolute; - bottom: 0.5%; - left: 20%; - opacity: 0.5; - z-index: 1; + height: 80%; + width: 60%; + background: #d1e1df; + border-radius: 1rem; + position: absolute; + bottom: 0.5%; + left: 20%; + opacity: 0.5; + z-index: 1; + box-shadow: inset 0 0 2rem rgba(0, 0, 0, 0.1); } .jar-top { - width: 50%; - height: 5%; - background: #d1e1df; - position: absolute; - bottom: 80.5%; - left: 25%; - opacity: 0.7; - z-index: 1; + width: 50%; + height: 5%; + background: #d1e1df; + position: absolute; + bottom: 80.5%; + left: 25%; + opacity: 0.7; + z-index: 1; + border-radius: 0.5rem 0.5rem 0 0; } .jar-bottom { - width: 50%; - height: 1%; - background: #d1e1df; - position: absolute; - bottom: 0%; - left: 25%; - opacity: 0.7; + width: 50%; + height: 1%; + background: #d1e1df; + position: absolute; + bottom: 0; + left: 25%; + opacity: 0.7; + border-radius: 0 0 0.5rem 0.5rem; } .dirt { - width: 60%; - height: 5%; - background: #3a241d; - position: absolute; - border-radius: 0 0 1rem 1rem; - bottom: 1%; - left: 20%; - opacity: 0.7; - z-index: -1; + width: 60%; + height: 5%; + background: #3a241d; + position: absolute; + border-radius: 0 0 1rem 1rem; + bottom: 1%; + left: 20%; + opacity: 0.7; + z-index: -1; } ``` -Notice the use of percentages. If you resize your browser, the jar scales accordingly. Pay attention to the width and height percentages for the jar elements and how each is absolutely positioned in the center, pinned to the bottom of the viewport. +**Understanding the terrarium construction:** +- **Uses** percentage-based dimensions for responsive scaling across all screen sizes +- **Positions** elements absolutely to stack and align them precisely +- **Applies** different opacity values to create the glass transparency effect +- **Implements** `z-index` layering so plants appear inside the jar +- **Adds** subtle box-shadow and refined border-radius for more realistic appearance + +### Responsive Design with Percentages + +Notice how all dimensions use percentages rather than fixed pixel values: + +**Why this matters:** +- **Ensures** the terrarium scales proportionally on any screen size +- **Maintains** the visual relationships between jar components +- **Provides** a consistent experience from mobile phones to large desktop monitors +- **Allows** the design to adapt without breaking the visual layout -We’re also using `rem` for the border-radius, a font-relative unit. Learn more about this relative measurement in the [CSS spec](https://www.w3.org/TR/css-values-3/#font-relative-lengths). +### CSS Units in Action -✅ Try changing the jar’s colors and opacity compared to the dirt. What happens? Why? +We're using `rem` units for border-radius, which scale relative to the root font size. This creates more accessible designs that respect user font preferences. Learn more about [CSS relative units](https://www.w3.org/TR/css-values-3/#font-relative-lengths) in the official specification. + +✅ **Visual Experimentation**: Try modifying these values and observe the effects: +- Change the jar opacity from 0.5 to 0.8 – how does this affect the glass appearance? +- Adjust the dirt color from `#3a241d` to `#8B4513` – what visual impact does this have? +- Modify the `z-index` of the dirt to 2 – what happens to the layering? + +### 🔄 **Pedagogical Check-in** +**CSS Visual Design Understanding**: Confirm your grasp of visual CSS: +- ✅ How do percentage-based dimensions create responsive design? +- ✅ Why does opacity create the glass transparency effect? +- ✅ What role does z-index play in layering elements? +- ✅ How do border-radius values create the jar shape? + +**Design Principle**: Notice how we're building complex visuals from simple shapes: +1. **Rectangles** → **Rounded rectangles** → **Jar components** +2. **Flat colors** → **Opacity** → **Glass effect** +3. **Individual elements** → **Layered composition** → **3D appearance** --- -## 🚀Challenge +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: -Add a "bubble" shine to the bottom-left area of the jar to make it look more like glass. Style the `.jar-glossy-long` and `.jar-glossy-short` to create a reflective shine. Here’s the final result: +**Description:** Create a CSS animation that makes the terrarium plants gently sway back and forth, simulating a natural breeze effect. This will help you practice CSS animations, transforms, and keyframes while enhancing the visual appeal of your terrarium. -![finished terrarium](../../../../translated_images/en/terrarium-final.2f07047ffc597d0a06b06cab28a77801a10dd12fdb6c7fc630e9c40665491c53.png) +**Prompt:** Add CSS keyframe animations to make the plants in the terrarium sway gently from side to side. Create a swaying animation that rotates each plant slightly (2-3 degrees) left and right with a duration of 3-4 seconds, and apply it to the `.plant` class. Make sure the animation loops infinitely and has an easing function for natural movement. -To complete the post-lecture quiz, explore this Learn module: [Style your HTML app with CSS](https://docs.microsoft.com/learn/modules/build-simple-website/4-css-basics/?WT.mc_id=academic-77807-sagibbon) +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + +## 🚀 Challenge: Adding Glass Reflections + +Ready to enhance your terrarium with realistic glass reflections? This technique will add depth and realism to the design. + +You'll create subtle highlights that simulate how light reflects off glass surfaces. This approach is similar to how Renaissance painters like Jan van Eyck used light and reflection to make painted glass appear three-dimensional. Here's what you're aiming for: + +![finished terrarium](../../../../translated_images/en/terrarium-final.2f07047ffc597d0a.webp) + +**Your challenge:** +- **Create** subtle white or light-colored oval shapes for the glass reflections +- **Position** them strategically on the left side of the jar +- **Apply** appropriate opacity and blur effects for realistic light reflection +- **Use** `border-radius` to create organic, bubble-like shapes +- **Experiment** with gradients or box-shadows for enhanced realism ## Post-Lecture Quiz [Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/18) -## Review & Self Study +## Expand Your CSS Knowledge + +CSS can feel complex initially, but understanding these core concepts provides a solid foundation for more advanced techniques. + +**Your next CSS learning areas:** +- **Flexbox** - simplifies alignment and distribution of elements +- **CSS Grid** - provides powerful tools for creating complex layouts +- **CSS Variables** - reduces repetition and improves maintainability +- **Responsive design** - ensures sites work well across different screen sizes + +### Interactive Learning Resources + +Practice these concepts with these engaging, hands-on games: +- 🐸 [Flexbox Froggy](https://flexboxfroggy.com/) - Master Flexbox through fun challenges +- 🌱 [Grid Garden](https://codepip.com/games/grid-garden/) - Learn CSS Grid by growing virtual carrots +- 🎯 [CSS Battle](https://cssbattle.dev/) - Test your CSS skills with coding challenges + +### Additional Learning + +For comprehensive CSS fundamentals, complete this Microsoft Learn module: [Style your HTML app with CSS](https://docs.microsoft.com/learn/modules/build-simple-website/4-css-basics/?WT.mc_id=academic-77807-sagibbon) + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open DevTools and inspect CSS styles on any website using the Elements panel +- [ ] Create a simple CSS file and link it to an HTML page +- [ ] Try changing colors using different methods: hex, RGB, and named colors +- [ ] Practice the box model by adding padding and margin to a div + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and review CSS fundamentals +- [ ] Style your HTML page with fonts, colors, and spacing +- [ ] Create a simple layout using flexbox or grid +- [ ] Experiment with CSS transitions for smooth effects +- [ ] Practice responsive design with media queries + +### 📅 **Your Week-Long CSS Adventure** +- [ ] Complete the terrarium styling assignment with creative flair +- [ ] Master CSS Grid by building a photo gallery layout +- [ ] Learn CSS animations to bring your designs to life +- [ ] Explore CSS preprocessors like Sass or Less +- [ ] Study design principles and apply them to your CSS +- [ ] Analyze and recreate interesting designs you find online + +### 🌟 **Your Month-Long Design Mastery** +- [ ] Build a complete responsive website design system +- [ ] Learn CSS-in-JS or utility-first frameworks like Tailwind +- [ ] Contribute to open source projects with CSS improvements +- [ ] Master advanced CSS concepts like CSS custom properties and containment +- [ ] Create reusable component libraries with modular CSS +- [ ] Mentor others learning CSS and share design knowledge + +## 🎯 Your CSS Mastery Timeline + +```mermaid +timeline + title CSS Learning Progression + + section Foundation (10 minutes) + File Connection: Link CSS to HTML + : Understand cascade rules + : Learn inheritance basics + + section Selectors (15 minutes) + Targeting Elements: Element selectors + : Class patterns + : ID specificity + : Combinators + + section Box Model (20 minutes) + Layout Fundamentals: Margin and padding + : Border properties + : Content sizing + : Box-sizing behavior + + section Positioning (25 minutes) + Element Placement: Static vs relative + : Absolute positioning + : Z-index layering + : Responsive units + + section Visual Design (30 minutes) + Styling Mastery: Colors and opacity + : Shadows and effects + : Transitions + : Transform properties + + section Responsive Design (45 minutes) + Multi-Device Support: Media queries + : Flexible layouts + : Mobile-first approach + : Viewport optimization + + section Advanced Techniques (1 week) + Modern CSS: Flexbox layouts + : CSS Grid systems + : Custom properties + : Animation keyframes + + section Professional Skills (1 month) + CSS Architecture: Component patterns + : Maintainable code + : Performance optimization + : Cross-browser compatibility +``` +### 🛠️ Your CSS Toolkit Summary + +After completing this lesson, you now have: +- **Cascade Understanding**: How styles inherit and override each other +- **Selector Mastery**: Precise targeting with elements, classes, and IDs +- **Positioning Skills**: Strategic element placement and layering +- **Visual Design**: Creating glass effects, shadows, and transparency +- **Responsive Techniques**: Percentage-based layouts that adapt to any screen +- **Code Organization**: Clean, maintainable CSS structure +- **Modern Practices**: Using relative units and accessible design patterns -CSS may seem simple, but styling an app perfectly for all browsers and screen sizes can be challenging. Tools like CSS Grid and Flexbox make this process more structured and reliable. Learn about these tools by playing [Flexbox Froggy](https://flexboxfroggy.com/) and [Grid Garden](https://codepip.com/games/grid-garden/). +**Next Steps**: Your terrarium now has both structure (HTML) and style (CSS). The final lesson will add interactivity with JavaScript! ## Assignment @@ -277,5 +720,7 @@ CSS may seem simple, but styling an app perfectly for all browsers and screen si --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, a professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. + \ No newline at end of file diff --git a/translations/en/3-terrarium/2-intro-to-css/assignment.md b/translations/en/3-terrarium/2-intro-to-css/assignment.md index 15295f595..70f930c4d 100644 --- a/translations/en/3-terrarium/2-intro-to-css/assignment.md +++ b/translations/en/3-terrarium/2-intro-to-css/assignment.md @@ -1,41 +1,127 @@ - # CSS Refactoring Assignment ## Objective -Refactor the terrarium project to use **Flexbox** or **CSS Grid** for layout. Update the HTML and CSS as needed to achieve a modern, responsive design. You do not need to implement draggable elements—focus solely on layout and styling. +Transform your terrarium project to use modern CSS layout techniques! Refactor the current absolute positioning approach to implement **Flexbox** or **CSS Grid** for a more maintainable, responsive design. This assignment challenges you to apply modern CSS standards while maintaining the visual appeal of your terrarium. + +Understanding when and how to use different layout methods is a crucial skill for modern web development. This exercise bridges traditional positioning techniques with contemporary CSS layout systems. + +## Assignment Instructions + +### Phase 1: Analysis and Planning +1. **Review your current terrarium code** - Identify which elements are currently using absolute positioning +2. **Choose your layout method** - Decide whether Flexbox or CSS Grid better suits your design goals +3. **Sketch your new layout structure** - Plan how containers and plant elements will be organized + +### Phase 2: Implementation +1. **Create a new version** of your terrarium project in a separate folder +2. **Update the HTML structure** as needed to support your chosen layout method +3. **Refactor the CSS** to use Flexbox or CSS Grid instead of absolute positioning +4. **Maintain visual consistency** - Ensure your plants and terrarium jar appear in the same positions +5. **Implement responsive behavior** - Your layout should adapt gracefully to different screen sizes + +### Phase 3: Testing and Documentation +1. **Cross-browser testing** - Verify your design works in Chrome, Firefox, Edge, and Safari +2. **Responsive testing** - Check your layout on mobile, tablet, and desktop screen sizes +3. **Documentation** - Add comments to your CSS explaining your layout choices +4. **Screenshots** - Capture your terrarium in different browsers and screen sizes + +## Technical Requirements + +### Layout Implementation +- **Choose ONE**: Implement either Flexbox OR CSS Grid (not both for the same elements) +- **Responsive Design**: Use relative units (`rem`, `em`, `%`, `vw`, `vh`) instead of fixed pixels +- **Accessibility**: Maintain proper semantic HTML structure and alt text +- **Code Quality**: Use consistent naming conventions and organize CSS logically + +### Modern CSS Features to Include +```css +/* Example Flexbox approach */ +.terrarium-container { + display: flex; + flex-direction: column; + min-height: 100vh; + align-items: center; + justify-content: center; +} + +.plant-containers { + display: flex; + justify-content: space-between; + width: 100%; + max-width: 1200px; +} + +/* Example Grid approach */ +.terrarium-layout { + display: grid; + grid-template-columns: 1fr 3fr 1fr; + grid-template-rows: auto 1fr; + min-height: 100vh; + gap: 1rem; +} +``` + +### Browser Support Requirements +- **Chrome/Edge**: Latest 2 versions +- **Firefox**: Latest 2 versions +- **Safari**: Latest 2 versions +- **Mobile browsers**: iOS Safari, Chrome Mobile + +## Deliverables + +1. **Updated HTML file** with improved semantic structure +2. **Refactored CSS file** using modern layout techniques +3. **Screenshot collection** showing cross-browser compatibility: + - Desktop view (1920x1080) + - Tablet view (768x1024) + - Mobile view (375x667) + - At least 2 different browsers +4. **README.md file** documenting: + - Your layout choice (Flexbox vs Grid) and reasoning + - Challenges faced during refactoring + - Browser compatibility notes + - Instructions for running your code + +## Assessment Rubric + +| Criteria | Exemplary (4) | Proficient (3) | Developing (2) | Beginning (1) | +|----------|---------------|----------------|---------------|---------------| +| **Layout Implementation** | Masterful use of Flexbox/Grid with advanced features; fully responsive | Correct implementation with good responsive behavior | Basic implementation with minor responsive issues | Incomplete or incorrect layout implementation | +| **Code Quality** | Clean, well-organized CSS with meaningful comments and consistent naming | Good organization with some comments | Adequate organization with minimal comments | Poor organization; difficult to understand | +| **Cross-Browser Compatibility** | Perfect consistency across all required browsers with screenshots | Good compatibility with minor differences documented | Some compatibility issues that don't break functionality | Major compatibility problems or missing testing | +| **Responsive Design** | Exceptional mobile-first approach with smooth breakpoints | Good responsive behavior with appropriate breakpoints | Basic responsive features with some layout issues | Limited or broken responsive behavior | +| **Documentation** | Comprehensive README with detailed explanations and insights | Good documentation covering all required elements | Basic documentation with minimal explanations | Incomplete or missing documentation | + +## Helpful Resources -## Instructions +### Layout Method Guides +- 📖 [A Complete Guide to Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) +- 📖 [A Complete Guide to CSS Grid](https://css-tricks.com/snippets/css/complete-guide-grid/) +- 📖 [Flexbox vs Grid - Choose the Right Tool](https://blog.webdevsimplified.com/2022-11/flexbox-vs-grid/) -1. **Create a new version** of the terrarium app. Modify the HTML and CSS to utilize Flexbox or CSS Grid for layout. -2. **Ensure all artwork and elements are properly displayed** as in the original version. -3. **Test your design** in at least two different browsers (e.g., Chrome, Firefox, Edge). -4. **Take screenshots** of your terrarium in each browser to showcase cross-browser compatibility. -5. **Submit** your updated code along with the screenshots. +### Browser Testing Tools +- 🛠️ [Browser DevTools Responsive Mode](https://developer.chrome.com/docs/devtools/device-mode/) +- 🛠️ [Can I Use - Feature Support](https://caniuse.com/) +- 🛠️ [BrowserStack - Cross-browser Testing](https://www.browserstack.com/) -## Rubric +### Code Quality Tools +- ✅ [CSS Validator](https://jigsaw.w3.org/css-validator/) +- ✅ [HTML Validator](https://validator.w3.org/) +- ✅ [WebAIM Contrast Checker](https://webaim.org/resources/contrastchecker/) -| Criteria | Outstanding | Satisfactory | Needs Improvement | -|------------|--------------------------------------------------------------------------|---------------------------------------|----------------------------------------| -| Layout | Fully refactored using Flexbox or CSS Grid; visually appealing and responsive | Partial refactoring; some use of Flexbox or Grid | Minimal or no use of Flexbox or Grid; layout unchanged | -| Cross-Browser | Screenshots provided for multiple browsers; consistent appearance | Screenshots for one browser; minor inconsistencies | No screenshots or major inconsistencies | -| Code Quality | Clean, well-structured HTML/CSS; clear comments | Some structure; few comments | Disorganized code; lacks comments | +## Bonus Challenges -## Tips +🌟 **Advanced Layouts**: Implement both Flexbox AND Grid in different parts of your design +🌟 **Animation Integration**: Add CSS transitions or animations that work with your new layout +🌟 **Dark Mode**: Implement a CSS custom properties-based theme switcher +🌟 **Container Queries**: Use modern container query techniques for component-level responsiveness -- Refer to [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) and [CSS Grid](https://css-tricks.com/snippets/css/complete-guide-grid/) guides. -- Use browser developer tools to check responsiveness. -- Add comments to your code for better clarity. +> 💡 **Remember**: The goal isn't just to make it work, but to understand WHY your chosen layout method is the best solution for this particular design challenge! --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/3-terrarium/3-intro-to-DOM-and-closures/README.md b/translations/en/3-terrarium/3-intro-to-DOM-and-closures/README.md index 5823242f4..395aa0d4c 100644 --- a/translations/en/3-terrarium/3-intro-to-DOM-and-closures/README.md +++ b/translations/en/3-terrarium/3-intro-to-DOM-and-closures/README.md @@ -1,62 +1,196 @@ - -# Terrarium Project Part 3: DOM Manipulation and a Closure - -![DOM and a closure](../../../../translated_images/en/webdev101-js.10280393044d7eaaec7e847574946add7ddae6be2b2194567d848b61d849334a.png) +# Terrarium Project Part 3: DOM Manipulation and JavaScript Closures + +```mermaid +journey + title Your JavaScript DOM Journey + section Foundation + Understand DOM: 3: Student + Learn closures: 4: Student + Connect elements: 4: Student + section Interaction + Setup drag events: 4: Student + Track coordinates: 5: Student + Handle movement: 5: Student + section Polish + Add cleanup: 4: Student + Test functionality: 5: Student + Complete terrarium: 5: Student +``` +![DOM and a closure](../../../../translated_images/en/webdev101-js.10280393044d7eaa.webp) > Sketchnote by [Tomomi Imura](https://twitter.com/girlie_mac) +Welcome to one of the most engaging aspects of web development - making things interactive! The Document Object Model (DOM) is like a bridge between your HTML and JavaScript, and today we'll use it to bring your terrarium to life. When Tim Berners-Lee created the first web browser, he envisioned a web where documents could be dynamic and interactive - the DOM makes that vision possible. + +We'll also explore JavaScript closures, which might sound intimidating initially. Think of closures as creating "memory pockets" where your functions can remember important information. It's like each plant in your terrarium having its own data record to track its position. By the end of this lesson, you'll understand how natural and useful they are. + +Here's what we're building: a terrarium where users can drag and drop plants anywhere they want. You'll learn the DOM manipulation techniques that power everything from drag-and-drop file uploads to interactive games. Let's make your terrarium come alive. + +```mermaid +mindmap + root((DOM & JavaScript)) + DOM Tree + Element Selection + Property Access + Event Handling + Dynamic Updates + Events + Pointer Events + Mouse Events + Touch Events + Event Listeners + Closures + Private Variables + Function Scope + Memory Persistence + State Management + Drag & Drop + Position Tracking + Coordinate Math + Event Lifecycle + User Interaction + Modern Patterns + Event Delegation + Performance + Cross-Device + Accessibility +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/19) -### Introduction +## Understanding the DOM: Your Gateway to Interactive Web Pages + +The Document Object Model (DOM) is how JavaScript communicates with your HTML elements. When your browser loads an HTML page, it creates a structured representation of that page in memory - that's the DOM. Think of it as a family tree where every HTML element is a family member that JavaScript can access, modify, or rearrange. + +DOM manipulation transforms static pages into interactive websites. Every time you see a button change color on hover, content update without page refresh, or elements you can drag around, that's DOM manipulation at work. + +```mermaid +flowchart TD + A["Document"] --> B["HTML"] + B --> C["Head"] + B --> D["Body"] + C --> E["Title"] + C --> F["Meta Tags"] + D --> G["H1: My Terrarium"] + D --> H["Div: Page Container"] + H --> I["Div: Left Container"] + H --> J["Div: Right Container"] + H --> K["Div: Terrarium"] + I --> L["Plant Elements 1-7"] + J --> M["Plant Elements 8-14"] + + L --> N["img#plant1"] + L --> O["img#plant2"] + M --> P["img#plant8"] + M --> Q["img#plant9"] + + style A fill:#e1f5fe + style B fill:#f3e5f5 + style D fill:#e8f5e8 + style H fill:#fff3e0 + style N fill:#ffebee + style O fill:#ffebee + style P fill:#ffebee + style Q fill:#ffebee +``` +![DOM tree representation](../../../../translated_images/en/dom-tree.7daf0e763cbbba92.webp) + +> A representation of the DOM and the HTML markup that references it. From [Olfa Nasraoui](https://www.researchgate.net/publication/221417012_Profile-Based_Focused_Crawler_for_Social_Media-Sharing_Websites) + +**Here's what makes the DOM powerful:** +- **Provides** a structured way to access any element on your page +- **Enables** dynamic content updates without page refreshes +- **Allows** real-time response to user interactions like clicks and drags +- **Creates** the foundation for modern interactive web applications + +## JavaScript Closures: Creating Organized, Powerful Code + +A [JavaScript closure](https://developer.mozilla.org/docs/Web/JavaScript/Closures) is like giving a function its own private workspace with persistent memory. Consider how Darwin's finches on the Galápagos Islands each developed specialized beaks based on their specific environment - closures work similarly, creating specialized functions that "remember" their specific context even after their parent function has finished. + +In our terrarium, closures help each plant remember its own position independently. This pattern appears throughout professional JavaScript development, making it a valuable concept to understand. + +```mermaid +flowchart LR + A["dragElement(plant1)"] --> B["Creates Closure"] + A2["dragElement(plant2)"] --> B2["Creates Closure"] + + B --> C["Private Variables"] + B2 --> C2["Private Variables"] + + C --> D["pos1, pos2, pos3, pos4"] + C --> E["pointerDrag function"] + C --> F["elementDrag function"] + C --> G["stopElementDrag function"] + + C2 --> D2["pos1, pos2, pos3, pos4"] + C2 --> E2["pointerDrag function"] + C2 --> F2["elementDrag function"] + C2 --> G2["stopElementDrag function"] + + H["Plant 1 remembers its position"] --> B + H2["Plant 2 remembers its position"] --> B2 + + style B fill:#e8f5e8 + style B2 fill:#e8f5e8 + style C fill:#fff3e0 + style C2 fill:#fff3e0 +``` +> 💡 **Understanding Closures**: Closures are a significant topic in JavaScript, and many developers use them for years before fully grasping all the theoretical aspects. Today, we're focusing on practical application - you'll see closures naturally emerge as we build our interactive features. Understanding will develop as you see how they solve real problems. -Manipulating the DOM, or the "Document Object Model," is a fundamental part of web development. According to [MDN](https://developer.mozilla.org/docs/Web/API/Document_Object_Model/Introduction), "The Document Object Model (DOM) is the data representation of the objects that comprise the structure and content of a document on the web." The challenges of DOM manipulation have often led developers to use JavaScript frameworks instead of plain JavaScript to manage the DOM, but we’ll tackle it ourselves! +![DOM tree representation](../../../../translated_images/en/dom-tree.7daf0e763cbbba92.webp) -Additionally, this lesson introduces the concept of a [JavaScript closure](https://developer.mozilla.org/docs/Web/JavaScript/Closures), which you can think of as a function wrapped inside another function, allowing the inner function to access the outer function's scope. +> A representation of the DOM and the HTML markup that references it. From [Olfa Nasraoui](https://www.researchgate.net/publication/221417012_Profile-Based_Focused_Crawler_for_Social_Media-Sharing_Websites) -> JavaScript closures are a broad and complex topic. This lesson covers the basic idea that in the terrarium's code, you’ll encounter a closure: an inner function and an outer function structured in a way that lets the inner function access the outer function's scope. For more details, check out the [comprehensive documentation](https://developer.mozilla.org/docs/Web/JavaScript/Closures). +In this lesson, we will complete our interactive terrarium project by creating the JavaScript that will allow a user to manipulate the plants on the page. -We’ll use a closure to manipulate the DOM. +## Before We Begin: Setting Up for Success -Think of the DOM as a tree that represents all the ways a web page document can be manipulated. Various APIs (Application Program Interfaces) have been created to allow developers to access, edit, rearrange, and manage the DOM using their preferred programming language. +You'll need your HTML and CSS files from the previous terrarium lessons - we're about to make that static design interactive. If you're joining for the first time, completing those lessons first will provide important context. -![DOM tree representation](../../../../translated_images/en/dom-tree.7daf0e763cbbba9273f9a66fe04c98276d7d23932309b195cb273a9cf1819b42.png) +Here's what we'll build: +- **Smooth drag-and-drop** for all terrarium plants +- **Coordinate tracking** so plants remember their positions +- **A complete interactive interface** using vanilla JavaScript +- **Clean, organized code** using closure patterns -> A representation of the DOM and the HTML markup that references it. From [Olfa Nasraoui](https://www.researchgate.net/publication/221417012_Profile-Based_Focused_Crawler_for_Social_Media-Sharing_Websites) +## Setting Up Your JavaScript File -In this lesson, we’ll complete our interactive terrarium project by writing JavaScript that lets users move plants around the page. +Let's create the JavaScript file that will make your terrarium interactive. -### Prerequisite +**Step 1: Create your script file** -You should already have the HTML and CSS for your terrarium set up. By the end of this lesson, you’ll be able to drag plants into and out of the terrarium. +In your terrarium folder, create a new file called `script.js`. -### Task +**Step 2: Link the JavaScript to your HTML** -In your terrarium folder, create a new file called `script.js`. Import this file in the `` section: +Add this script tag to the `` section of your `index.html` file: ```html - + ``` -> Note: Use `defer` when importing an external JavaScript file into the HTML file to ensure the JavaScript runs only after the HTML file has fully loaded. Alternatively, you could use the `async` attribute, which allows the script to execute while the HTML file is still being parsed. However, in our case, it’s important for the HTML elements to be fully loaded before the drag script runs. +**Why the `defer` attribute is important:** +- **Ensures** your JavaScript waits until all HTML is loaded +- **Prevents** errors where JavaScript looks for elements that aren't ready yet +- **Guarantees** all your plant elements are available for interaction +- **Provides** better performance than placing scripts at the page bottom + +> ⚠️ **Important Note**: The `defer` attribute prevents common timing issues. Without it, JavaScript may try to access HTML elements before they're loaded, causing errors. --- -## The DOM elements +## Connecting JavaScript to Your HTML Elements -The first step is to create references to the elements you want to manipulate in the DOM. In this case, these are the 14 plants currently located in the sidebars. +Before we can make elements draggable, JavaScript needs to locate them in the DOM. Think of this like a library cataloging system - once you have the catalog number, you can find exactly the book you need and access all its contents. -### Task +We'll use the `document.getElementById()` method to make these connections. It's like having a precise filing system - you provide an ID, and it locates exactly the element you need in your HTML. -```html +### Enabling Drag Functionality for All Plants + +Add this code to your `script.js` file: + +```javascript +// Enable drag functionality for all 14 plants dragElement(document.getElementById('plant1')); dragElement(document.getElementById('plant2')); dragElement(document.getElementById('plant3')); @@ -73,157 +207,549 @@ dragElement(document.getElementById('plant13')); dragElement(document.getElementById('plant14')); ``` -What’s happening here? You’re referencing the document and searching its DOM for an element with a specific Id. Recall from the first HTML lesson that you assigned unique Ids to each plant image (`id="plant1"`). Now, you’ll use those Ids. After identifying each element, you pass it to a function called `dragElement`, which you’ll build shortly. This makes the HTML element draggable—or it will soon. +**Here's what this code accomplishes:** +- **Locates** each plant element in the DOM using its unique ID +- **Retrieves** a JavaScript reference to each HTML element +- **Passes** each element to a `dragElement` function (which we'll create next) +- **Prepares** every plant for drag-and-drop interaction +- **Connects** your HTML structure to JavaScript functionality -✅ Why do we reference elements by Id instead of their CSS class? Refer back to the CSS lesson for the answer. +> 🎯 **Why Use IDs Instead of Classes?** IDs provide unique identifiers for specific elements, while CSS classes are designed for styling groups of elements. When JavaScript needs to manipulate individual elements, IDs offer the precision and performance we need. + +> 💡 **Pro Tip**: Notice how we're calling `dragElement()` for each plant individually. This approach ensures that each plant gets its own independent dragging behavior, which is essential for smooth user interaction. + +### 🔄 **Pedagogical Check-in** +**DOM Connection Understanding**: Before moving to drag functionality, verify you can: +- ✅ Explain how `document.getElementById()` locates HTML elements +- ✅ Understand why we use unique IDs for each plant +- ✅ Describe the purpose of the `defer` attribute in script tags +- ✅ Recognize how JavaScript and HTML connect through the DOM + +**Quick Self-Test**: What would happen if two elements had the same ID? Why does `getElementById()` return only one element? +*Answer: IDs should be unique; if duplicated, only the first element is returned* --- -## The Closure +## Building the Drag Element Closure + +Now we'll create the heart of our dragging functionality: a closure that manages the dragging behavior for each plant. This closure will contain multiple inner functions that work together to track mouse movements and update element positions. -Now it’s time to create the `dragElement` closure, which is an outer function that wraps around inner functions (in this case, three). +Closures are perfect for this task because they allow us to create "private" variables that persist between function calls, giving each plant its own independent coordinate tracking system. -Closures are useful when one or more functions need access to the outer function's scope. Here’s an example: +### Understanding Closures with a Simple Example + +Let me demonstrate closures with a simple example that illustrates the concept: ```javascript -function displayCandy(){ - let candy = ['jellybeans']; - function addCandy(candyType) { - candy.push(candyType) - } - addCandy('gumdrops'); +function createCounter() { + let count = 0; // This is like a private variable + + function increment() { + count++; // The inner function remembers the outer variable + return count; + } + + return increment; // We're giving back the inner function } -displayCandy(); -console.log(candy) -``` -In this example, the `displayCandy` function wraps around a function that adds a new candy type to an array already defined in the outer function. If you run this code, the `candy` array will be undefined because it’s a local variable (local to the closure). - -✅ How can you make the `candy` array accessible? Try moving it outside the closure. This way, the array becomes global instead of being limited to the closure’s local scope. +const myCounter = createCounter(); +console.log(myCounter()); // 1 +console.log(myCounter()); // 2 +``` -### Task +**Here's what's happening in this closure pattern:** +- **Creates** a private `count` variable that only exists within this closure +- **The inner function** can access and modify that outer variable (the closure mechanism) +- **When we return** the inner function, it maintains its connection to that private data +- **Even after** `createCounter()` finishes execution, `count` persists and remembers its value + +### Why Closures Are Perfect for Drag Functionality + +For our terrarium, each plant needs to remember its current position coordinates. Closures provide the perfect solution: + +**Key benefits for our project:** +- **Maintains** private position variables for each plant independently +- **Preserves** coordinate data between drag events +- **Prevents** variable conflicts between different draggable elements +- **Creates** clean, organized code structure + +> 🎯 **Learning Goal**: You don't need to master every aspect of closures right now. Focus on seeing how they help us organize code and maintain state for our dragging functionality. + +```mermaid +stateDiagram-v2 + [*] --> Ready: Page loads + Ready --> DragStart: User presses down (pointerdown) + DragStart --> Dragging: Mouse/finger moves (pointermove) + Dragging --> Dragging: Continue moving + Dragging --> DragEnd: User releases (pointerup) + DragEnd --> Ready: Reset for next drag + + state DragStart { + [*] --> CapturePosition + CapturePosition --> SetupListeners + SetupListeners --> [*] + } + + state Dragging { + [*] --> CalculateMovement + CalculateMovement --> UpdatePosition + UpdatePosition --> [*] + } + + state DragEnd { + [*] --> RemoveListeners + RemoveListeners --> CleanupState + CleanupState --> [*] + } +``` +### Creating the dragElement Function -Under the element declarations in `script.js`, create a function: +Now let's build the main function that will handle all the dragging logic. Add this function below your plant element declarations: ```javascript function dragElement(terrariumElement) { - //set 4 positions for positioning on the screen - let pos1 = 0, - pos2 = 0, - pos3 = 0, - pos4 = 0; - terrariumElement.onpointerdown = pointerDrag; + // Initialize position tracking variables + let pos1 = 0, // Previous mouse X position + pos2 = 0, // Previous mouse Y position + pos3 = 0, // Current mouse X position + pos4 = 0; // Current mouse Y position + + // Set up the initial drag event listener + terrariumElement.onpointerdown = pointerDrag; } ``` -`dragElement` receives its `terrariumElement` object from the declarations at the top of the script. Then, you set some local positions to `0` for the object passed into the function. These local variables will be used to track each element’s position as you add drag-and-drop functionality within the closure. The terrarium will be populated with these draggable elements, so the app needs to keep track of their placement. - -Additionally, the `terrariumElement` passed to this function is assigned a `pointerdown` event, which is part of the [web APIs](https://developer.mozilla.org/docs/Web/API) designed for DOM manipulation. `onpointerdown` triggers when a button is pressed or, in this case, when a draggable element is touched. This event handler works on both [web and mobile browsers](https://caniuse.com/?search=onpointerdown), with a few exceptions. - -✅ The [event handler `onclick`](https://developer.mozilla.org/docs/Web/API/GlobalEventHandlers/onclick) has broader browser support. Why wouldn’t you use it here? Consider the specific type of interaction you’re trying to create. +**Understanding the position tracking system:** +- **`pos1` and `pos2`**: Store the difference between old and new mouse positions +- **`pos3` and `pos4`**: Track the current mouse coordinates +- **`terrariumElement`**: The specific plant element we're making draggable +- **`onpointerdown`**: The event that triggers when the user starts dragging + +**Here's how the closure pattern works:** +- **Creates** private position variables for each plant element +- **Maintains** these variables throughout the dragging lifecycle +- **Ensures** each plant tracks its own coordinates independently +- **Provides** a clean interface through the `dragElement` function + +### Why Use Pointer Events? + +You might wonder why we use `onpointerdown` instead of the more familiar `onclick`. Here's the reasoning: + +| Event Type | Best For | The Catch | +|------------|----------|-------------| +| `onclick` | Simple button clicks | Can't handle dragging (just clicks and releases) | +| `onpointerdown` | Both mouse and touch | Newer, but well-supported these days | +| `onmousedown` | Desktop mouse only | Leaves mobile users out in the cold | + +**Why pointer events are perfect for what we're building:** +- **Works great** whether someone's using a mouse, finger, or even a stylus +- **Feels the same** on a laptop, tablet, or phone +- **Handles** the actual dragging motion (not just click-and-done) +- **Creates** a smooth experience that users expect from modern web apps + +> 💡 **Future-Proofing**: Pointer events are the modern way to handle user interactions. Instead of writing separate code for mouse and touch, you get both for free. Pretty neat, right? + +### 🔄 **Pedagogical Check-in** +**Event Handling Understanding**: Pause to confirm your grasp of events: +- ✅ Why do we use pointer events instead of mouse events? +- ✅ How do closure variables persist between function calls? +- ✅ What role does `preventDefault()` play in smooth dragging? +- ✅ Why do we attach listeners to the document instead of individual elements? + +**Real-World Connection**: Think about drag-and-drop interfaces you use daily: +- **File uploads**: Dragging files into a browser window +- **Kanban boards**: Moving tasks between columns +- **Image galleries**: Rearranging photo order +- **Mobile interfaces**: Swiping and dragging on touchscreens --- -## The Pointerdrag function +## The pointerDrag Function: Capturing the Start of a Drag -The `terrariumElement` is now ready to be dragged. When the `onpointerdown` event is triggered, the `pointerDrag` function is called. Add this function right below the line: `terrariumElement.onpointerdown = pointerDrag;`: +When a user presses down on a plant (whether with a mouse click or finger touch), the `pointerDrag` function springs into action. This function captures the initial coordinates and sets up the dragging system. -### Task +Add this function inside your `dragElement` closure, right after the line `terrariumElement.onpointerdown = pointerDrag;`: ```javascript function pointerDrag(e) { - e.preventDefault(); - console.log(e); - pos3 = e.clientX; - pos4 = e.clientY; + // Prevent default browser behavior (like text selection) + e.preventDefault(); + + // Capture the initial mouse/touch position + pos3 = e.clientX; // X coordinate where drag started + pos4 = e.clientY; // Y coordinate where drag started + + // Set up event listeners for the dragging process + document.onpointermove = elementDrag; + document.onpointerup = stopElementDrag; } ``` -Several things happen here. First, you prevent the default events that typically occur on pointerdown by using `e.preventDefault();`. This gives you more control over the interface’s behavior. +**Step by step, here's what's happening:** +- **Prevents** default browser behaviors that could interfere with dragging +- **Records** the exact coordinates where the user started the drag gesture +- **Establishes** event listeners for the ongoing drag movement +- **Prepares** the system to track mouse/finger movement across the entire document -> After completing the script file, revisit this line and try removing `e.preventDefault()`—what changes? +### Understanding Event Prevention -Next, open `index.html` in a browser and inspect the interface. When you click a plant, you’ll see how the 'e' event is captured. Explore the event to see the wealth of information gathered from a single pointerdown event! +The `e.preventDefault()` line is crucial for smooth dragging: -Then, note how the local variables `pos3` and `pos4` are set to `e.clientX`. You can find the `e` values in the inspection pane. These values capture the x and y coordinates of the plant at the moment you click or touch it. You’ll need precise control over the plants’ behavior as you drag them, so you track their coordinates. +**Without prevention, browsers might:** +- **Select** text when dragging across the page +- **Trigger** context menus on right-click drag +- **Interfere** with our custom dragging behavior +- **Create** visual artifacts during the drag operation -✅ Is it becoming clearer why this app is built with one large closure? Without it, how would you maintain scope for each of the 14 draggable plants? +> 🔍 **Experiment**: After completing this lesson, try removing `e.preventDefault()` and see how it affects the dragging experience. You'll quickly understand why this line is essential! -Complete the initial function by adding two more pointer event manipulations under `pos4 = e.clientY`: +### Coordinate Tracking System -```html +The `e.clientX` and `e.clientY` properties give us precise mouse/touch coordinates: + +| Property | What It Measures | Use Case | +|----------|------------------|----------| +| `clientX` | Horizontal position relative to the viewport | Tracking left-right movement | +| `clientY` | Vertical position relative to the viewport | Tracking up-down movement | + +**Understanding these coordinates:** +- **Provides** pixel-perfect positioning information +- **Updates** in real-time as the user moves their pointer +- **Remains** consistent across different screen sizes and zoom levels +- **Enables** smooth, responsive drag interactions + +### Setting Up Document-Level Event Listeners + +Notice how we attach the move and stop events to the entire `document`, not just the plant element: + +```javascript document.onpointermove = elementDrag; document.onpointerup = stopElementDrag; ``` -Here, you specify that the plant should move with the pointer as you drag it and stop moving when you release it. `onpointermove` and `onpointerup` are part of the same API as `onpointerdown`. The interface will throw errors now because the `elementDrag` and `stopElementDrag` functions haven’t been defined yet, so let’s build those next. +**Why attach to the document:** +- **Continues** tracking even when the mouse leaves the plant element +- **Prevents** drag interruption if the user moves quickly +- **Provides** smooth dragging across the entire screen +- **Handles** edge cases where the cursor moves outside the browser window ---- +> ⚡ **Performance Note**: We'll clean up these document-level listeners when dragging stops to avoid memory leaks and performance issues. -## The elementDrag and stopElementDrag functions +## Completing the Drag System: Movement and Cleanup -Complete the closure by adding two more internal functions to handle what happens when you drag a plant and when you stop dragging it. The goal is to allow you to drag any plant at any time and place it anywhere on the screen. This interface is intentionally flexible (there’s no drop zone, for example) so you can design your terrarium however you like by adding, removing, and repositioning plants. +Now we'll add the two remaining functions that handle the actual dragging movement and the cleanup when dragging stops. These functions work together to create smooth, responsive plant movement across your terrarium. -### Task +### The elementDrag Function: Tracking Movement Add the `elementDrag` function right after the closing curly bracket of `pointerDrag`: ```javascript function elementDrag(e) { - pos1 = pos3 - e.clientX; - pos2 = pos4 - e.clientY; - pos3 = e.clientX; - pos4 = e.clientY; - console.log(pos1, pos2, pos3, pos4); - terrariumElement.style.top = terrariumElement.offsetTop - pos2 + 'px'; - terrariumElement.style.left = terrariumElement.offsetLeft - pos1 + 'px'; + // Calculate the distance moved since the last event + pos1 = pos3 - e.clientX; // Horizontal distance moved + pos2 = pos4 - e.clientY; // Vertical distance moved + + // Update the current position tracking + pos3 = e.clientX; // New current X position + pos4 = e.clientY; // New current Y position + + // Apply the movement to the element's position + terrariumElement.style.top = (terrariumElement.offsetTop - pos2) + 'px'; + terrariumElement.style.left = (terrariumElement.offsetLeft - pos1) + 'px'; } ``` -In this function, you make several adjustments to the initial positions (`pos1`–`pos4`) set as local variables in the outer function. What’s happening here? - -As you drag, you update `pos1` by setting it equal to `pos3` (previously set as `e.clientX`) minus the current `e.clientX` value. You do something similar for `pos2`. Then, you update `pos3` and `pos4` to the new x and y coordinates of the element. You can observe these changes in the console as you drag. Finally, you modify the plant’s CSS style to set its new position based on the updated values of `pos1` and `pos2`, calculating the plant’s top and left coordinates relative to its offset. - -> `offsetTop` and `offsetLeft` are CSS properties that position an element relative to its parent, as long as the parent isn’t positioned as `static`. - -This recalculation ensures precise control over the terrarium and its plants. - -### Task +**Understanding the coordinate mathematics:** +- **`pos1` and `pos2`**: Calculate how far the mouse has moved since the last update +- **`pos3` and `pos4`**: Store the current mouse position for the next calculation +- **`offsetTop` and `offsetLeft`**: Get the element's current position on the page +- **Subtraction logic**: Moves the element by the same amount the mouse moved + +```mermaid +sequenceDiagram + participant User + participant Mouse + participant JavaScript + participant Plant + + User->>Mouse: Start drag at (100, 50) + Mouse->>JavaScript: pointerdown event + JavaScript->>JavaScript: Store initial position (pos3=100, pos4=50) + JavaScript->>JavaScript: Setup move/up listeners + + User->>Mouse: Move to (110, 60) + Mouse->>JavaScript: pointermove event + JavaScript->>JavaScript: Calculate: pos1=10, pos2=10 + JavaScript->>Plant: Update: left += 10px, top += 10px + Plant->>Plant: Render at new position + + User->>Mouse: Release at (120, 65) + Mouse->>JavaScript: pointerup event + JavaScript->>JavaScript: Remove listeners + JavaScript->>JavaScript: Reset for next drag +``` +**Here's the movement calculation breakdown:** +1. **Measures** the difference between old and new mouse positions +2. **Calculates** how much to move the element based on mouse movement +3. **Updates** the element's CSS position properties in real-time +4. **Stores** the new position as the baseline for the next movement calculation + +### Visual Representation of the Math + +```mermaid +sequenceDiagram + participant Mouse + participant JavaScript + participant Plant + + Mouse->>JavaScript: Move from (100,50) to (110,60) + JavaScript->>JavaScript: Calculate: moved 10px right, 10px down + JavaScript->>Plant: Update position by +10px right, +10px down + Plant->>Plant: Render at new position +``` +### The stopElementDrag Function: Cleaning Up -Finally, add the `stopElementDrag` function after the closing curly bracket of `elementDrag`: +Add the cleanup function after the closing curly bracket of `elementDrag`: ```javascript function stopElementDrag() { - document.onpointerup = null; - document.onpointermove = null; + // Remove the document-level event listeners + document.onpointerup = null; + document.onpointermove = null; } ``` -This small function resets the `onpointerup` and `onpointermove` events, allowing you to either restart dragging the same plant or begin dragging a new one. +**Why cleanup is essential:** +- **Prevents** memory leaks from lingering event listeners +- **Stops** the dragging behavior when the user releases the plant +- **Allows** other elements to be dragged independently +- **Resets** the system for the next drag operation + +**What happens without cleanup:** +- Event listeners continue running even after dragging stops +- Performance degrades as unused listeners accumulate +- Unexpected behavior when interacting with other elements +- Browser resources are wasted on unnecessary event handling + +### Understanding CSS Position Properties + +Our dragging system manipulates two key CSS properties: + +| Property | What It Controls | How We Use It | +|----------|------------------|---------------| +| `top` | Distance from the top edge | Vertical positioning during drag | +| `left` | Distance from the left edge | Horizontal positioning during drag | + +**Key insights about offset properties:** +- **`offsetTop`**: Current distance from the top of the positioned parent element +- **`offsetLeft`**: Current distance from the left of the positioned parent element +- **Positioning context**: These values are relative to the nearest positioned ancestor +- **Real-time updates**: Changes immediately when we modify the CSS properties + +> 🎯 **Design Philosophy**: This drag system is intentionally flexible – there are no "drop zones" or restrictions. Users can place plants anywhere, giving them complete creative control over their terrarium design. -✅ What happens if you don’t set these events to null? +## Bringing It All Together: Your Complete Drag System -Now your project is complete! +Congratulations! You've just built a sophisticated drag-and-drop system using vanilla JavaScript. Your complete `dragElement` function now contains a powerful closure that manages: -🥇Congratulations! You’ve finished your beautiful terrarium! ![finished terrarium](../../../../translated_images/en/terrarium-final.0920f16e87c13a84cd2b553a5af9a3ad1cffbd41fbf8ce715d9e9c43809a5e2c.png) +**What your closure accomplishes:** +- **Maintains** private position variables for each plant independently +- **Handles** the complete drag lifecycle from start to finish +- **Provides** smooth, responsive movement across the entire screen +- **Cleans** up resources properly to prevent memory leaks +- **Creates** an intuitive, creative interface for terrarium design + +### Testing Your Interactive Terrarium + +Now test your interactive terrarium! Open your `index.html` file in a web browser and try the functionality: + +1. **Click and hold** any plant to start dragging +2. **Move your mouse or finger** and watch the plant follow smoothly +3. **Release** to drop the plant in its new position +4. **Experiment** with different arrangements to explore the interface + +🥇 **Achievement**: You've created a fully interactive web application using core concepts that professional developers use daily. That drag-and-drop functionality uses the same principles behind file uploads, kanban boards, and many other interactive interfaces. + +### 🔄 **Pedagogical Check-in** +**Complete System Understanding**: Verify your mastery of the full drag system: +- ✅ How do closures maintain independent state for each plant? +- ✅ Why is the coordinate calculation math necessary for smooth movement? +- ✅ What would happen if we forgot to clean up event listeners? +- ✅ How does this pattern scale to more complex interactions? + +**Code Quality Reflection**: Review your complete solution: +- **Modular design**: Each plant gets its own closure instance +- **Event efficiency**: Proper setup and cleanup of listeners +- **Cross-device support**: Works on desktop and mobile +- **Performance conscious**: No memory leaks or redundant calculations + +![finished terrarium](../../../../translated_images/en/terrarium-final.0920f16e87c13a84.webp) --- -## 🚀Challenge +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: -Add a new event handler to your closure to add more functionality to the plants—for example, double-clicking a plant to bring it to the front. Get creative! +**Description:** Enhance the terrarium project by adding a reset functionality that returns all plants to their original positions with smooth animations. + +**Prompt:** Create a reset button that, when clicked, animates all plants back to their original sidebar positions using CSS transitions. The function should store the original positions when the page loads and smoothly transition plants back to those positions over 1 second when the reset button is pressed. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + +## 🚀 Additional Challenge: Expand Your Skills + +Ready to take your terrarium to the next level? Try implementing these enhancements: + +**Creative Extensions:** +- **Double-click** a plant to bring it to the front (z-index manipulation) +- **Add visual feedback** like a subtle glow when hovering over plants +- **Implement boundaries** to prevent plants from being dragged outside the terrarium +- **Create a save function** that remembers plant positions using localStorage +- **Add sound effects** for picking up and placing plants + +> 💡 **Learning Opportunity**: Each of these challenges will teach you new aspects of DOM manipulation, event handling, and user experience design. ## Post-Lecture Quiz [Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/20) -## Review & Self Study +## Review & Self Study: Deepening Your Understanding + +You've mastered the fundamentals of DOM manipulation and closures, but there's always more to explore! Here are some pathways to expand your knowledge and skills. + +### Alternative Drag and Drop Approaches + +We used pointer events for maximum flexibility, but web development offers multiple approaches: + +| Approach | Best For | Learning Value | +|----------|----------|----------------| +| [HTML Drag and Drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) | File uploads, formal drag zones | Understanding native browser capabilities | +| [Touch Events](https://developer.mozilla.org/docs/Web/API/Touch_events) | Mobile-specific interactions | Mobile-first development patterns | +| CSS `transform` properties | Smooth animations | Performance optimization techniques | + +### Advanced DOM Manipulation Topics + +**Next steps in your learning journey:** +- **Event delegation**: Handling events efficiently for multiple elements +- **Intersection Observer**: Detecting when elements enter/leave the viewport +- **Mutation Observer**: Watching for changes in the DOM structure +- **Web Components**: Creating reusable, encapsulated UI elements +- **Virtual DOM concepts**: Understanding how frameworks optimize DOM updates + +### Essential Resources for Continued Learning + +**Technical Documentation:** +- [MDN Pointer Events Guide](https://developer.mozilla.org/docs/Web/API/Pointer_events) - Comprehensive pointer event reference +- [W3C Pointer Events Specification](https://www.w3.org/TR/pointerevents1/) - Official standards documentation +- [JavaScript Closures Deep Dive](https://developer.mozilla.org/docs/Web/JavaScript/Closures) - Advanced closure patterns + +**Browser Compatibility:** +- [CanIUse.com](https://caniuse.com/) - Check feature support across browsers +- [MDN Browser Compatibility Data](https://github.com/mdn/browser-compat-data) - Detailed compatibility information + +**Practice Opportunities:** +- **Build** a puzzle game using similar drag mechanics +- **Create** a kanban board with drag-and-drop task management +- **Design** an image gallery with draggable photo arrangements +- **Experiment** with touch gestures for mobile interfaces + +> 🎯 **Learning Strategy**: The best way to solidify these concepts is through practice. Try building variations of draggable interfaces – each project will teach you something new about user interaction and DOM manipulation. + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open browser DevTools and type `document.querySelector('body')` in the console +- [ ] Try changing a webpage's text using `innerHTML` or `textContent` +- [ ] Add a click event listener to any button or link on a webpage +- [ ] Inspect the DOM tree structure using the Elements panel + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and review DOM manipulation concepts +- [ ] Create an interactive webpage that responds to user clicks +- [ ] Practice event handling with different event types (click, mouseover, keypress) +- [ ] Build a simple to-do list or counter using DOM manipulation +- [ ] Explore the relationship between HTML elements and JavaScript objects + +### 📅 **Your Week-Long JavaScript Journey** +- [ ] Complete the interactive terrarium project with drag-and-drop functionality +- [ ] Master event delegation for efficient event handling +- [ ] Learn about the event loop and asynchronous JavaScript +- [ ] Practice closures by building modules with private state +- [ ] Explore modern DOM APIs like Intersection Observer +- [ ] Build interactive components without using frameworks + +### 🌟 **Your Month-Long JavaScript Mastery** +- [ ] Create a complex single-page application using vanilla JavaScript +- [ ] Learn a modern framework (React, Vue, or Angular) and compare it to vanilla DOM +- [ ] Contribute to open source JavaScript projects +- [ ] Master advanced concepts like web components and custom elements +- [ ] Build performant web applications with optimal DOM patterns +- [ ] Teach others about DOM manipulation and JavaScript fundamentals + +## 🎯 Your JavaScript DOM Mastery Timeline + +```mermaid +timeline + title DOM & JavaScript Learning Progression + + section Foundation (15 minutes) + DOM Understanding: Element selection methods + : Tree structure navigation + : Property access patterns + + section Event Handling (20 minutes) + User Interaction: Pointer event basics + : Event listener setup + : Cross-device compatibility + : Event prevention techniques + + section Closures (25 minutes) + Scope Management: Private variable creation + : Function persistence + : State management patterns + : Memory efficiency + + section Drag System (30 minutes) + Interactive Features: Coordinate tracking + : Position calculation + : Movement mathematics + : Cleanup procedures + + section Advanced Patterns (45 minutes) + Professional Skills: Event delegation + : Performance optimization + : Error handling + : Accessibility considerations + + section Framework Understanding (1 week) + Modern Development: Virtual DOM concepts + : State management libraries + : Component architectures + : Build tool integration + + section Expert Level (1 month) + Advanced DOM APIs: Intersection Observer + : Mutation Observer + : Custom Elements + : Web Components +``` +### 🛠️ Your JavaScript Toolkit Summary -While dragging elements around the screen may seem simple, there are many ways to achieve this and many potential challenges, depending on the desired effect. In fact, there’s an entire [drag-and-drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) you can explore. We didn’t use it in this module because we wanted a slightly different effect, but try it out in your own project to see what you can create. +After completing this lesson, you now have: +- **DOM Mastery**: Element selection, property manipulation, and tree navigation +- **Event Expertise**: Cross-device interaction handling with pointer events +- **Closure Understanding**: Private state management and function persistence +- **Interactive Systems**: Complete drag-and-drop implementation from scratch +- **Performance Awareness**: Proper event cleanup and memory management +- **Modern Patterns**: Code organization techniques used in professional development +- **User Experience**: Creating intuitive, responsive interfaces -Learn more about pointer events in the [W3C docs](https://www.w3.org/TR/pointerevents1/) and on [MDN web docs](https://developer.mozilla.org/docs/Web/API/Pointer_events). +**Professional Skills Gained**: You've built features using the same techniques as: +- **Trello/Kanban boards**: Card dragging between columns +- **File upload systems**: Drag-and-drop file handling +- **Image galleries**: Photo arrangement interfaces +- **Mobile apps**: Touch-based interaction patterns -Always check browser compatibility using [CanIUse.com](https://caniuse.com/). +**Next Level**: You're ready to explore modern frameworks like React, Vue, or Angular that build upon these fundamental DOM manipulation concepts! ## Assignment @@ -231,5 +757,7 @@ Always check browser compatibility using [CanIUse.com](https://caniuse.com/). --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/3-terrarium/3-intro-to-DOM-and-closures/assignment.md b/translations/en/3-terrarium/3-intro-to-DOM-and-closures/assignment.md index 0db47b8a0..d3c4879c6 100644 --- a/translations/en/3-terrarium/3-intro-to-DOM-and-closures/assignment.md +++ b/translations/en/3-terrarium/3-intro-to-DOM-and-closures/assignment.md @@ -1,25 +1,130 @@ - -# Work a bit more with the DOM +# DOM Element Investigation Assignment + +## Overview + +Now that you've experienced the power of DOM manipulation firsthand, it's time to explore the broader world of DOM interfaces. This assignment will deepen your understanding of how different web technologies interact with the DOM beyond just dragging elements. + +## Learning Objectives + +By completing this assignment, you will: +- **Research** and understand a specific DOM interface in depth +- **Analyze** real-world implementations of DOM manipulation +- **Connect** theoretical concepts to practical applications +- **Develop** skills in technical documentation and analysis ## Instructions -Explore the DOM further by 'adopting' a DOM element. Visit the MDN's [list of DOM interfaces](https://developer.mozilla.org/docs/Web/API/Document_Object_Model) and choose one. Find an example of it being used on a website, and write an explanation of how it is utilized. +### Step 1: Choose Your DOM Interface + +Visit MDN's comprehensive [list of DOM interfaces](https://developer.mozilla.org/docs/Web/API/Document_Object_Model) and select one interface that interests you. Consider choosing from these categories for variety: + +**Beginner-Friendly Options:** +- `Element.classList` - Managing CSS classes dynamically +- `Document.querySelector()` - Advanced element selection +- `Element.addEventListener()` - Event handling beyond pointer events +- `Window.localStorage` - Client-side data storage + +**Intermediate Challenges:** +- `Intersection Observer API` - Detecting element visibility +- `MutationObserver` - Watching DOM changes +- `Drag and Drop API` - Alternative to our pointer-based approach +- `Geolocation API` - Accessing user location + +**Advanced Exploration:** +- `Web Components` - Custom elements and shadow DOM +- `Canvas API` - Programmatic graphics +- `Web Workers` - Background processing +- `Service Workers` - Offline functionality + +### Step 2: Research and Document + +Create a comprehensive analysis (300-500 words) that includes: + +#### Technical Overview +- **Define** what your chosen interface does in clear, beginner-friendly language +- **Explain** the key methods, properties, or events it provides +- **Describe** the types of problems it's designed to solve + +#### Real-World Implementation +- **Find** a website that uses your chosen interface (inspect the code or research examples) +- **Document** the specific implementation with code snippets if possible +- **Analyze** why the developers chose this approach +- **Explain** how it enhances the user experience + +#### Practical Application +- **Compare** your interface to the techniques we used in the terrarium project +- **Suggest** how your interface could enhance or extend the terrarium functionality +- **Identify** other projects where this interface would be valuable + +### Step 3: Code Example + +Include a simple, working code example that demonstrates your interface in action. This should be: +- **Functional** - The code should actually work when tested +- **Commented** - Explain what each part does +- **Relevant** - Connected to a realistic use case +- **Beginner-friendly** - Understandable to someone learning web development + +## Submission Format + +Structure your submission with clear headings: + +```markdown +# [Interface Name] DOM Investigation + +## What It Does +[Technical overview] + +## Real-World Example +[Website analysis and implementation details] + +## Code Demonstration +[Your working example with comments] + +## Reflection +[How this connects to our terrarium project and future applications] +``` + +## Assessment Rubric + +| Criteria | Exemplary (A) | Proficient (B) | Developing (C) | Needs Improvement (D) | +|----------|---------------|----------------|----------------|----------------------| +| **Technical Understanding** | Demonstrates deep understanding with accurate explanations and proper terminology | Shows solid understanding with mostly accurate explanations | Basic understanding with some misconceptions | Limited understanding with significant errors | +| **Real-World Analysis** | Identifies and thoroughly analyzes actual implementation with specific examples | Finds real example with adequate analysis | Locates example but analysis lacks depth | Vague or inaccurate real-world connection | +| **Code Example** | Working, well-commented code that clearly demonstrates the interface | Functional code with adequate comments | Code works but needs better documentation | Code has errors or poor explanation | +| **Writing Quality** | Clear, engaging writing with proper structure and technical communication | Well-organized with good technical writing | Adequate organization and clarity | Poor organization or unclear communication | +| **Critical Thinking** | Makes insightful connections between concepts and suggests innovative applications | Shows good analytical thinking and relevant connections | Some analysis present but could be deeper | Limited evidence of critical thinking | + +## Tips for Success + +**Research Strategies:** +- **Start** with MDN documentation for authoritative information +- **Look** for code examples on GitHub or CodePen +- **Check** popular websites using browser developer tools +- **Watch** tutorial videos for visual explanations + +**Writing Guidelines:** +- **Use** your own words rather than copying documentation +- **Include** specific examples and code snippets +- **Explain** technical concepts as if teaching a friend +- **Connect** your interface to broader web development concepts + +**Code Example Ideas:** +- **Create** a simple demo that showcases the interface's main features +- **Build** on concepts from our terrarium project where relevant +- **Focus** on functionality over visual design +- **Test** your code to ensure it works correctly + +## Submission Deadline + +[Insert deadline here] -## Rubric +## Questions? -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | -| | Paragraph explanation is provided, with example | Paragraph explanation is provided, without example | No explanation is provided | +If you need clarification on any aspect of this assignment, don't hesitate to ask! This investigation will deepen your understanding of how the DOM enables the interactive web experiences we use every day. --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the definitive source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/3-terrarium/README.md b/translations/en/3-terrarium/README.md index e51f936a7..92e3fb9f0 100644 --- a/translations/en/3-terrarium/README.md +++ b/translations/en/3-terrarium/README.md @@ -1,45 +1,21 @@ - -# My Terrarium: A project to learn about HTML, CSS, and DOM manipulation using JavaScript 🌵🌱 - -A small drag-and-drop coding exercise. With a bit of HTML, JS, and CSS, you’ll be able to create a web interface, style it, and even add various interactions of your choice. - -![my terrarium](../../../translated_images/en/screenshot_gray.0c796099a1f9f25e40aa55ead81f268434c00af30d7092490759945eda63067d.png) - -# Lessons - -1. [Introduction to HTML](./1-intro-to-html/README.md) -2. [Introduction to CSS](./2-intro-to-css/README.md) -3. [Introduction to DOM and JS Closures](./3-intro-to-DOM-and-closures/README.md) - -## Credits - -Written with ♥️ by [Jen Looper](https://www.twitter.com/jenlooper) - -The CSS-based terrarium design was inspired by Jakub Mandra's glass jar [codepen](https://codepen.io/Rotarepmi/pen/rjpNZY). - -The artwork was hand-drawn by [Jen Looper](http://jenlooper.com) using Procreate. - ## Deploy your Terrarium -You can deploy or publish your terrarium on the web using Azure Static Web Apps. +You can deploy, or publish your Terrarium on the web using **Azure Static Web Apps**. -1. Fork this repository. +1. Fork this repo -2. Click this button: +2. Press this button 👇 -[![Deploy to Azure button](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/?feature.customportal=false&WT.mc_id=academic-77807-sagibbon#create/Microsoft.StaticApp) +[![Deploy to Azure](https://aka.ms/deploytoazurebutton)](https://portal.azure.com/#create/Microsoft.StaticApp) -3. Follow the wizard to create your app. Make sure to set the app root to either `/solution` or the root of your codebase. This app doesn’t include an API, so you don’t need to add one. A GitHub folder will be created in your forked repository, which will help Azure Static Web Apps' build services to build and publish your app to a new URL. +3. Follow the setup wizard to create your app. + - Set the **App root** to either `/solution` or the root of your codebase. + - There’s no API in this app, so you can skip the API configuration. + - A `.github` folder will be created automatically to help Azure Static Web Apps build and publish your app. --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/3-terrarium/solution/README.md b/translations/en/3-terrarium/solution/README.md index 0c28bb0e1..9da08ad98 100644 --- a/translations/en/3-terrarium/solution/README.md +++ b/translations/en/3-terrarium/solution/README.md @@ -1,17 +1,8 @@ - # My Terrarium: A project to learn about HTML, CSS, and DOM manipulation using JavaScript 🌵🌱 A small drag-and-drop coding exercise. With a bit of HTML, JS, and CSS, you can create a web interface, style it, and add interactivity. -![my terrarium](../../../../translated_images/en/screenshot_gray.0c796099a1f9f25e40aa55ead81f268434c00af30d7092490759945eda63067d.png) +![my terrarium](../../../../translated_images/en/screenshot_gray.0c796099a1f9f25e.webp) ## Credits diff --git a/translations/en/4-typing-game/README.md b/translations/en/4-typing-game/README.md index 9d877d08d..9d7f50cae 100644 --- a/translations/en/4-typing-game/README.md +++ b/translations/en/4-typing-game/README.md @@ -1,38 +1,273 @@ - # Event-Driven Programming - Build a Typing Game +```mermaid +journey + title Your Typing Game Development Journey + section Foundation + Plan game structure: 3: Student + Design user interface: 4: Student + Setup HTML elements: 4: Student + section Functionality + Handle user input: 4: Student + Track timing: 5: Student + Calculate accuracy: 5: Student + section Features + Add visual feedback: 5: Student + Implement game logic: 5: Student + Polish experience: 5: Student +``` ## Introduction -Typing is one of the most overlooked skills for developers. Being able to quickly translate your thoughts into code allows your creativity to flow seamlessly. And what better way to practice than by playing a game? +Here's something every developer knows but rarely talks about: typing fast is a superpower! 🚀 Think about it - the faster you can get your ideas from your brain to your code editor, the more your creativity can flow. It's like having a direct pipeline between your thoughts and the screen. -> Let's build a typing game! +```mermaid +pie title Game Features + "Real-time Feedback" : 25 + "Performance Tracking" : 20 + "Interactive UI" : 20 + "Timer System" : 15 + "Quote Management" : 10 + "Results Display" : 10 +``` +Want to know one of the best ways to level up this skill? You guessed it - we're going to build a game! -You'll use the JavaScript, HTML, and CSS skills you've learned so far to create a typing game. The game will display a random quote (we're using [Sherlock Holmes](https://en.wikipedia.org/wiki/Sherlock_Holmes) quotes) and measure how long it takes the player to type it accurately. You'll use the JavaScript, HTML, and CSS skills you've learned so far to create this game. +```mermaid +flowchart LR + A[Player starts game] --> B[Random quote displayed] + B --> C[Player types characters] + C --> D{Character correct?} + D -->|Yes| E[Green highlight] + D -->|No| F[Red highlight] + E --> G[Update accuracy] + F --> G + G --> H{Quote complete?} + H -->|No| C + H -->|Yes| I[Calculate WPM] + I --> J[Display results] + J --> K[Play again?] + K -->|Yes| B + K -->|No| L[Game over] + + style A fill:#e1f5fe + style D fill:#fff3e0 + style E fill:#e8f5e8 + style F fill:#ffebee + style I fill:#f3e5f5 +``` +> Let's create an awesome typing game together! +Ready to put all those JavaScript, HTML, and CSS skills you've been learning to work? We're going to build a typing game that'll challenge you with random quotes from the legendary detective [Sherlock Holmes](https://en.wikipedia.org/wiki/Sherlock_Holmes). The game will track how fast and accurately you can type - and trust me, it's more addictive than you might think! + +```mermaid +mindmap + root((Typing Game Development)) + User Interface + Input Elements + Visual Feedback + Responsive Design + Accessibility + Game Logic + Quote Selection + Timer Management + Accuracy Tracking + Score Calculation + Event Handling + Keyboard Input + Button Clicks + Real-time Updates + Game State Changes + Performance Metrics + Words Per Minute + Character Accuracy + Error Tracking + Progress Display + User Experience + Immediate Feedback + Clear Instructions + Engaging Content + Achievement System +``` ![demo](../../../4-typing-game/images/demo.gif) -## Prerequisites +## What You'll Need to Know -This lesson assumes you're familiar with the following concepts: +```mermaid +flowchart TD + A[User Action] --> B{Event Type?} + B -->|Key Press| C[Keyboard Event] + B -->|Button Click| D[Mouse Event] + B -->|Timer| E[Time Event] + + C --> F[Check Character] + D --> G[Start/Reset Game] + E --> H[Update Timer] + + F --> I{Correct?} + I -->|Yes| J[Highlight Green] + I -->|No| K[Highlight Red] + + J --> L[Update Score] + K --> L + L --> M[Check Game State] + + G --> N[Generate New Quote] + H --> O[Display Time] + + M --> P{Game Complete?} + P -->|Yes| Q[Show Results] + P -->|No| R[Continue Game] + + style A fill:#e1f5fe + style F fill:#e8f5e8 + style I fill:#fff3e0 + style Q fill:#f3e5f5 +``` +Before we dive in, make sure you're comfortable with these concepts (don't worry if you need a quick refresher - we've all been there!): -- Creating text input and button elements -- Using CSS and applying styles with classes +- Creating text input and button controls +- CSS and setting styles using classes - JavaScript basics - - Working with arrays - - Generating random numbers - - Retrieving the current time + - Creating an array + - Creating a random number + - Getting the current time + +If any of these feel a bit rusty, that's totally fine! Sometimes the best way to solidify your knowledge is by jumping into a project and figuring things out as you go. + +### 🔄 **Pedagogical Check-in** +**Foundation Assessment**: Before starting development, ensure you understand: +- ✅ How HTML forms and input elements work +- ✅ CSS classes and dynamic styling +- ✅ JavaScript event listeners and handlers +- ✅ Array manipulation and random selection +- ✅ Time measurement and calculations + +**Quick Self-Test**: Can you explain how these concepts work together in an interactive game? +- **Events** trigger when users interact with elements +- **Handlers** process those events and update game state +- **CSS** provides visual feedback for user actions +- **Timing** enables performance measurement and game progression + +```mermaid +quadrantChart + title Typing Game Skills Development + x-axis Beginner --> Expert + y-axis Static --> Interactive + quadrant-1 Advanced Games + quadrant-2 Real-time Apps + quadrant-3 Basic Pages + quadrant-4 Interactive Sites + + HTML Forms: [0.3, 0.2] + CSS Styling: [0.4, 0.3] + Event Handling: [0.7, 0.8] + Game Logic: [0.8, 0.9] + Performance Tracking: [0.9, 0.7] +``` +## Let's Build This Thing! + +[Creating a typing game by using event driven programming](./typing-game/README.md) + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open your browser console and try listening for keyboard events with `addEventListener` +- [ ] Create a simple HTML page with an input field and test typing detection +- [ ] Practice string manipulation by comparing typed text with target text +- [ ] Experiment with `setTimeout` to understand timing functions + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand event-driven programming +- [ ] Build a basic version of the typing game with word validation +- [ ] Add visual feedback for correct and incorrect typing +- [ ] Implement a simple scoring system based on speed and accuracy +- [ ] Style your game with CSS to make it visually appealing + +### 📅 **Your Week-Long Game Development** +- [ ] Complete the full typing game with all features and polish +- [ ] Add difficulty levels with varying word complexity +- [ ] Implement user statistics tracking (WPM, accuracy over time) +- [ ] Create sound effects and animations for better user experience +- [ ] Make your game mobile-responsive for touch devices +- [ ] Share your game online and gather feedback from users + +### 🌟 **Your Month-Long Interactive Development** +- [ ] Build multiple games exploring different interaction patterns +- [ ] Learn about game loops, state management, and performance optimization +- [ ] Contribute to open source game development projects +- [ ] Master advanced timing concepts and smooth animations +- [ ] Create a portfolio showcasing various interactive applications +- [ ] Mentor others interested in game development and user interaction + +## 🎯 Your Typing Game Mastery Timeline + +```mermaid +timeline + title Game Development Learning Progression + + section Setup (10 minutes) + Project Structure: HTML foundation + : CSS styling setup + : JavaScript file creation + + section User Interface (20 minutes) + Interactive Elements: Input fields + : Button controls + : Display areas + : Responsive layout + + section Event Handling (25 minutes) + User Interaction: Keyboard events + : Mouse events + : Real-time feedback + : State management + + section Game Logic (30 minutes) + Core Functionality: Quote generation + : Character comparison + : Accuracy calculation + : Timer implementation + + section Performance Tracking (35 minutes) + Metrics & Analytics: WPM calculation + : Error tracking + : Progress visualization + : Results display + + section Polish & Enhancement (45 minutes) + User Experience: Visual feedback + : Sound effects + : Animations + : Accessibility features + + section Advanced Features (1 week) + Extended Functionality: Difficulty levels + : Leaderboards + : Custom quotes + : Multiplayer options + + section Professional Skills (1 month) + Game Development: Performance optimization + : Code architecture + : Testing strategies + : Deployment patterns +``` +### 🛠️ Your Game Development Toolkit Summary + +After completing this project, you'll have mastered: +- **Event-Driven Programming**: Responsive user interfaces that react to input +- **Real-Time Feedback**: Instant visual and performance updates +- **Performance Measurement**: Accurate timing and scoring systems +- **Game State Management**: Controlling application flow and user experience +- **Interactive Design**: Creating engaging, addictive user experiences +- **Modern Web APIs**: Utilizing browser capabilities for rich interactions +- **Accessibility Patterns**: Inclusive design for all users -## Lesson +**Real-World Applications**: These skills directly apply to: +- **Web Applications**: Any interactive interface or dashboard +- **Educational Software**: Learning platforms and skill assessment tools +- **Productivity Tools**: Text editors, IDEs, and collaboration software +- **Gaming Industry**: Browser games and interactive entertainment +- **Mobile Development**: Touch-based interfaces and gesture handling -[Creating a typing game by using event-driven programming](./typing-game/README.md) +**Next Level**: You're ready to explore advanced game frameworks, real-time multiplayer systems, or complex interactive applications! ## Credits @@ -40,5 +275,7 @@ Written with ♥️ by [Christopher Harrison](http://www.twitter.com/geektrainer --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/4-typing-game/solution/README.md b/translations/en/4-typing-game/solution/README.md index 6c0b26c89..b78db64df 100644 --- a/translations/en/4-typing-game/solution/README.md +++ b/translations/en/4-typing-game/solution/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/4-typing-game/typing-game/README.md b/translations/en/4-typing-game/typing-game/README.md index 17187baa2..8cc87d363 100644 --- a/translations/en/4-typing-game/typing-game/README.md +++ b/translations/en/4-typing-game/typing-game/README.md @@ -1,56 +1,93 @@ - # Creating a game using events +Have you ever wondered how websites know when you click a button or type in a text box? That's the magic of event-driven programming! What better way to learn this essential skill than by building something useful - a typing speed game that reacts to every keystroke you make. + +You're going to see firsthand how web browsers "talk" to your JavaScript code. Every time you click, type, or move your mouse, the browser is sending little messages (we call them events) to your code, and you get to decide how to respond! + +By the time we're done here, you'll have built a real typing game that tracks your speed and accuracy. More importantly, you'll understand the fundamental concepts that power every interactive website you've ever used. Let's dive in! + ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/21) -## Event-driven programming +## Event driven programming + +Think about your favorite app or website - what makes it feel alive and responsive? It's all about how it reacts to what you do! Every tap, click, swipe, or keystroke creates what we call an "event," and that's where the real magic of web development happens. + +Here's what makes programming for the web so interesting: we never know when someone will click that button or start typing in a text box. They might click immediately, wait five minutes, or maybe never click at all! This unpredictability means we need to think differently about how we write our code. + +Instead of writing code that runs from top to bottom like a recipe, we write code that sits patiently waiting for something to happen. It's similar to how telegraph operators in the 1800s would sit by their machines, ready to respond the moment a message came through the wire. -When building a browser-based application, we provide a graphical user interface (GUI) for users to interact with what we've created. The most common ways users interact with the browser are by clicking and typing in various elements. The challenge for us as developers is that we don't know when they will perform these actions! +So what exactly is an "event"? Simply put, it's something that happens! When you click a button - that's an event. When you type a letter - that's an event. When you move your mouse - that's another event. -[Event-driven programming](https://en.wikipedia.org/wiki/Event-driven_programming) is the type of programming we use to create our GUI. If we break down the term, the key word here is **event**. According to [Merriam-Webster](https://www.merriam-webster.com/dictionary/event), an event is "something which happens." This perfectly describes our situation. We know something will happen that we want to respond to with code, but we don't know when it will occur. +Event-driven programming lets us set up our code to listen and respond. We create special functions called **event listeners** that wait patiently for specific things to happen, then spring into action when they do. -The way we specify the code we want to execute is by creating a function. In [procedural programming](https://en.wikipedia.org/wiki/Procedural_programming), functions are called in a specific order. This is also true in event-driven programming. The difference lies in **how** the functions are called. +Think of event listeners like having a doorbell for your code. You set up the doorbell (`addEventListener()`), tell it what sound to listen for (like a 'click' or 'keypress'), and then specify what should happen when someone rings it (your custom function). -To handle events (like button clicks or typing), we register **event listeners**. An event listener is a function that waits for an event to occur and executes in response. Event listeners can update the UI, make server calls, or perform any other necessary actions based on the user's input. We add an event listener using [addEventListener](https://developer.mozilla.org/docs/Web/API/EventTarget/addEventListener) and provide a function to execute. +**Here's how event listeners work:** +- **Listens** for specific user actions like clicks, keystrokes, or mouse movements +- **Executes** your custom code when the specified event occurs +- **Responds** immediately to user interactions, creating a seamless experience +- **Handles** multiple events on the same element using different listeners -> **NOTE:** There are many ways to create event listeners. You can use anonymous functions, create named functions, or use shortcuts like setting the `click` property. In this exercise, we will focus on `addEventListener` and anonymous functions, as this is the most common and flexible approach used by web developers. `addEventListener` works for all events, and the event name can be passed as a parameter. +> **NOTE:** It's worth highlighting there are numerous ways to create event listeners. You can use anonymous functions, or create named ones. You can use various shortcuts, like setting the `click` property, or using `addEventListener()`. In our exercise we are going to focus on `addEventListener()` and anonymous functions, as it's probably the most common technique web developers use. It's also the most flexible, as `addEventListener()` works for all events, and the event name can be provided as a parameter. ### Common events -There are [dozens of events](https://developer.mozilla.org/docs/Web/Events) you can listen to when building an application. Essentially, anything a user does on a page triggers an event, giving you the power to create the desired user experience. Fortunately, you'll typically only need a few key events. Here are some common ones (including the two we'll use for our game): +While web browsers offer dozens of different events you can listen for, most interactive applications rely on just a handful of essential events. Understanding these core events will give you the foundation to build sophisticated user interactions. -- [click](https://developer.mozilla.org/docs/Web/API/Element/click_event): Triggered when the user clicks on something, like a button or hyperlink. -- [contextmenu](https://developer.mozilla.org/docs/Web/API/Element/contextmenu_event): Triggered when the user right-clicks. -- [select](https://developer.mozilla.org/docs/Web/API/Element/select_event): Triggered when the user highlights text. -- [input](https://developer.mozilla.org/docs/Web/API/Element/input_event): Triggered when the user enters text. +There are [dozens of events](https://developer.mozilla.org/docs/Web/Events) available for you to listen to when creating an application. Basically anything a user does on a page raises an event, which gives you a lot of power to ensure they get the experience you desire. Fortunately, you'll normally only need a small handful of events. Here's a few common ones (including the two we'll use when creating our game): -## Creating the game +| Event | Description | Common Use Cases | +|-------|-------------|------------------| +| `click` | The user clicked on something | Buttons, links, interactive elements | +| `contextmenu` | The user clicked the right mouse button | Custom right-click menus | +| `select` | The user highlighted some text | Text editing, copy operations | +| `input` | The user input some text | Form validation, real-time search | + +**Understanding these event types:** +- **Triggers** when users interact with specific elements on your page +- **Provides** detailed information about the user's action through event objects +- **Enables** you to create responsive, interactive web applications +- **Works** consistently across different browsers and devices -We will create a game to explore how events work in JavaScript. Our game will test a player's typing skills, which is an essential skill for developers. Here's the general flow of the game: +## Creating the game -- The player clicks the start button and is presented with a quote to type. -- The player types the quote as quickly as possible in a textbox. - - As each word is completed, the next word is highlighted. - - If the player makes a typo, the textbox turns red. - - When the player completes the quote, a success message is displayed along with the elapsed time. +Now that you understand how events work, let's put that knowledge into practice by building something useful. We'll create a typing speed game that demonstrates event handling while helping you develop an important developer skill. + +We're going to create a game to explore how events work in JavaScript. Our game will test a player's typing skill, which is one of the most underrated skills all developers should have. Fun fact: the QWERTY keyboard layout we use today was actually designed in the 1870s for typewriters - and good typing skills are still just as valuable for programmers today! The general flow of the game will look like this: + +```mermaid +flowchart TD + A[Player clicks Start] --> B[Random quote displays] + B --> C[Player types in textbox] + C --> D{Word complete?} + D -->|Yes| E[Highlight next word] + D -->|No| F{Correct so far?} + F -->|Yes| G[Keep normal styling] + F -->|No| H[Show error styling] + E --> I{Quote complete?} + I -->|No| C + I -->|Yes| J[Show success message with time] + G --> C + H --> C +``` +**Here's how our game will work:** +- **Starts** when the player clicks the start button and displays a random quote +- **Tracks** the player's typing progress word by word in real-time +- **Highlights** the current word to guide the player's focus +- **Provides** immediate visual feedback for typing errors +- **Calculates** and displays the total time when the quote is completed -Let's build the game and learn about events! +Let's build our game, and learn about events! ### File structure -We will need three files: **index.html**, **script.js**, and **style.css**. Let's set them up to make things easier. +Before we start coding, let's get organized! Having a clean file structure from the beginning will save you headaches later and make your project more professional. 😊 -- Create a new folder for your project by opening a console or terminal and running the following command: +We're going to keep things simple with just three files: `index.html` for our page structure, `script.js` for all our game logic, and `style.css` to make everything look great. This is the classic trio that powers most of the web! + +**Create a new folder for your work by opening a console or terminal window and issuing the following command:** ```bash # Linux or macOS @@ -60,29 +97,49 @@ mkdir typing-game && cd typing-game md typing-game && cd typing-game ``` -- Open Visual Studio Code. +**Here's what these commands do:** +- **Creates** a new directory called `typing-game` for your project files +- **Navigates** into the newly created directory automatically +- **Sets up** a clean workspace for your game development + +**Open Visual Studio Code:** ```bash code . ``` -- Add three files to the folder in Visual Studio Code: - - index.html - - script.js - - style.css +**This command:** +- **Launches** Visual Studio Code in the current directory +- **Opens** your project folder in the editor +- **Provides** access to all the development tools you'll need + +**Add three files to the folder in Visual Studio Code with the following names:** +- `index.html` - Contains the structure and content of your game +- `script.js` - Handles all the game logic and event listeners +- `style.css` - Defines the visual appearance and styling ## Create the user interface -Based on the requirements, we know we need a few elements on our HTML page. Think of this as a recipe where we need specific ingredients: +Now let's build the stage where all our game action will happen! Think of this like designing the control panel for a spaceship - we need to make sure everything our players need is right where they expect it to be. -- A place to display the quote for the user to type. -- A place to display messages, like a success message. -- A textbox for typing. -- A start button. +Let's figure out what our game actually needs. If you were playing a typing game, what would you want to see on the screen? Here's what we'll need: -Each of these elements will need IDs so we can interact with them in JavaScript. We will also include references to the CSS and JavaScript files. +| UI Element | Purpose | HTML Element | +|------------|---------|-------------| +| Quote Display | Shows the text to type | `

` with `id="quote"` | +| Message Area | Displays status and success messages | `

` with `id="message"` | +| Text Input | Where players type the quote | `` with `id="typed-value"` | +| Start Button | Begins the game | ` - +

+

New? Add your Information

+
+
+ + +
+
+ + +
+ + ``` -This form will save the input information to local storage. -Next, create the results area. Add some divs below the final form tag: +**Here's what this form accomplishes:** +- **Creates** a semantic form structure with proper labels and input associations +- **Enables** browser autocomplete functionality for improved user experience +- **Requires** both fields to be filled before submission using the `required` attribute +- **Organizes** inputs with descriptive class names for easy styling and JavaScript targeting +- **Provides** clear instructions for users who are setting up the extension for the first time + +### Building the Results Display + +Next, create the results area that will show the carbon footprint data. Add this HTML below the form: -```HTML +```html
-
loading...
-
-
-
-

Region:

-

Carbon Usage:

-

Fossil Fuel Percentage:

-
- +
loading...
+
+
+
+

Region:

+

Carbon Usage:

+

Fossil Fuel Percentage:

+
+
``` -Now, try building the extension. Install the package dependencies: -``` -npm install -``` - -This command uses npm (Node Package Manager) to install webpack for the build process. Webpack bundles the code, and you can see the output in `/dist/main.js`. +**Breaking down what this structure provides:** +- **`loading`**: **Displays** a loading message while API data is being fetched +- **`errors`**: **Shows** error messages if API calls fail or data is invalid +- **`data`**: **Holds** raw data for debugging purposes during development +- **`result-container`**: **Presents** formatted carbon footprint information to users +- **`clear-btn`**: **Allows** users to change their region and reconfigure the extension -At this stage, the extension should build successfully. If you deploy it in Edge, you'll see a neatly displayed form. - -Congratulations! You've taken the first steps toward building a browser extension. In the next lessons, you'll add more functionality and features. - ---- +### Setting Up the Build Process -## 🚀 Challenge +Now let's install the project dependencies and test the build process: -Explore a browser extension store and install an extension. Examine its files to uncover interesting details. What do you find? - -## Post-Lecture Quiz - -[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/24) - -## Review & Self Study - -In this lesson, you learned about the history of web browsers. Take some time to explore how the inventors of the World Wide Web envisioned its use. Here are some useful resources: +```bash +npm install +``` -[The History of Web Browsers](https://www.mozilla.org/firefox/browsers/browser-history/) +**What this installation process accomplishes:** +- **Downloads** Webpack and other development dependencies specified in `package.json` +- **Configures** the build toolchain for compiling modern JavaScript +- **Prepares** the development environment for extension building and testing +- **Enables** code bundling, optimization, and cross-browser compatibility features -[History of the Web](https://webfoundation.org/about/vision/history-of-the-web/) +> 💡 **Build Process Insight**: Webpack bundles your source code from `/src/index.js` into `/dist/main.js`. This process optimizes your code for production and ensures browser compatibility. -[An interview with Tim Berners-Lee](https://www.theguardian.com/technology/2019/mar/12/tim-berners-lee-on-30-years-of-the-web-if-we-dream-a-little-we-can-get-the-web-we-want) +### Testing Your Progress -## Assignment +At this point, you can test your extension: +1. **Run** the build command to compile your code +2. **Load** the extension into your browser using the developer mode +3. **Verify** that the form displays correctly and looks professional +4. **Check** that all form elements are properly aligned and functional + +**What you've accomplished:** +- **Built** the foundational HTML structure for your extension +- **Created** both configuration and results interfaces with proper semantic markup +- **Set up** a modern development workflow using industry-standard tools +- **Prepared** the foundation for adding interactive JavaScript functionality + +### 🔄 **Pedagogical Check-in** +**Extension Development Progress**: Verify your understanding before continuing: +- ✅ Can you explain the purpose of each file in the project structure? +- ✅ Do you understand how the build process transforms your source code? +- ✅ Why do we separate configuration and results into different UI sections? +- ✅ How does the form structure support both usability and accessibility? + +**Development Workflow Understanding**: You should now be able to: +1. **Modify** HTML and CSS for your extension interface +2. **Run** the build command to compile your changes +3. **Reload** the extension in your browser to test updates +4. **Debug** issues using browser developer tools + +You've completed the first phase of browser extension development. Like how the Wright brothers first needed to understand aerodynamics before achieving flight, understanding these foundational concepts prepares you for building more complex interactive features in the next lesson. + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Enhance the browser extension by adding form validation and user feedback features to improve the user experience when entering API keys and region codes. + +**Prompt:** Create JavaScript validation functions that check if the API key field contains at least 20 characters and if the region code follows the correct format (like 'US-NEISO'). Add visual feedback by changing input border colors to green for valid inputs and red for invalid ones. Also add a toggle feature to show/hide the API key for security purposes. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + +## 🚀 Challenge + +Take a look at a browser extension store and install one to your browser. You can examine its files in interesting ways. What do you discover? + +## Post-Lecture Quiz + +[Post-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/24) + +## Review & Self Study + +In this lesson you learned a little about the history of the web browser; take this opportunity to learn about how the inventors of the World Wide Web envisioned its use by reading more about its history. Some useful sites include: + +[The History of Web Browsers](https://www.mozilla.org/firefox/browsers/browser-history/) + +[History of the Web](https://webfoundation.org/about/vision/history-of-the-web/) + +[An interview with Tim Berners-Lee](https://www.theguardian.com/technology/2019/mar/12/tim-berners-lee-on-30-years-of-the-web-if-we-dream-a-little-we-can-get-the-web-we-want) + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open Chrome/Edge extensions page (chrome://extensions) and explore what you have installed +- [ ] Look at your browser's DevTools Network tab while loading a webpage +- [ ] Try viewing page source (Ctrl+U) to see HTML structure +- [ ] Inspect any webpage element and modify its CSS in DevTools + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand browser fundamentals +- [ ] Create a basic manifest.json file for a browser extension +- [ ] Build a simple "Hello World" extension that shows a popup +- [ ] Test loading your extension in developer mode +- [ ] Explore the browser extension documentation for your target browser + +### 📅 **Your Week-Long Extension Journey** +- [ ] Complete a functional browser extension with real utility +- [ ] Learn about content scripts, background scripts, and popup interactions +- [ ] Master browser APIs like storage, tabs, and messaging +- [ ] Design user-friendly interfaces for your extension +- [ ] Test your extension across different websites and scenarios +- [ ] Publish your extension to the browser's extension store + +### 🌟 **Your Month-Long Browser Development** +- [ ] Build multiple extensions solving different user problems +- [ ] Learn advanced browser APIs and security best practices +- [ ] Contribute to open source browser extension projects +- [ ] Master cross-browser compatibility and progressive enhancement +- [ ] Create extension development tools and templates for others +- [ ] Become a browser extension expert who helps other developers + +## 🎯 Your Browser Extension Mastery Timeline + +```mermaid +timeline + title Browser Extension Development Progression + + section Foundation (15 minutes) + Browser Understanding: Core architecture + : Rendering process + : Extension integration points + + section Setup (20 minutes) + Development Environment: Project structure + : Build tools configuration + : Browser developer mode + : Extension loading process + + section Interface Design (25 minutes) + User Experience: HTML structure + : CSS styling + : Form validation + : Responsive design + + section Core Functionality (35 minutes) + JavaScript Integration: Event handling + : API interactions + : Data storage + : Error handling + + section Browser APIs (45 minutes) + Platform Integration: Permissions system + : Storage APIs + : Tab management + : Context menus + + section Advanced Features (1 week) + Professional Extensions: Background scripts + : Content scripts + : Cross-browser compatibility + : Performance optimization + + section Publishing (2 weeks) + Distribution: Store submission + : Review process + : User feedback + : Update management + + section Expert Level (1 month) + Extension Ecosystem: Advanced APIs + : Security best practices + : Enterprise features + : Framework integration +``` +### 🛠️ Your Extension Development Toolkit Summary + +After completing this lesson, you now have: +- **Browser Architecture Knowledge**: Understanding of rendering engines, security models, and extension integration +- **Development Environment**: Modern toolchain with Webpack, NPM, and debugging capabilities +- **UI/UX Foundation**: Semantic HTML structure with progressive disclosure patterns +- **Security Awareness**: Understanding of browser permissions and safe development practices +- **Cross-Browser Concepts**: Knowledge of compatibility considerations and testing approaches +- **API Integration**: Foundation for working with external data sources +- **Professional Workflow**: Industry-standard development and testing procedures + +**Real-World Applications**: These skills directly apply to: +- **Web Development**: Single-page applications and progressive web apps +- **Desktop Applications**: Electron and web-based desktop software +- **Mobile Development**: Hybrid apps and web-based mobile solutions +- **Enterprise Tools**: Internal productivity applications and workflow automation +- **Open Source**: Contributing to browser extension projects and web standards + +**Next Level**: You're ready to add interactive functionality, work with browser APIs, and create extensions that solve real user problems! + +## Assignment [Restyle your extension](assignment.md) --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/5-browser-extension/1-about-browsers/assignment.md b/translations/en/5-browser-extension/1-about-browsers/assignment.md index fca9ed925..745addb73 100644 --- a/translations/en/5-browser-extension/1-about-browsers/assignment.md +++ b/translations/en/5-browser-extension/1-about-browsers/assignment.md @@ -1,25 +1,137 @@ - -# Restyle your Extension +# Assignment: Restyle Your Browser Extension + +## Overview + +Now that you've built the HTML structure for your carbon footprint browser extension, it's time to make it visually appealing and user-friendly. Great design enhances the user experience and makes your extension more professional and engaging. + +Your extension comes with basic CSS styling, but this assignment challenges you to create a unique visual identity that reflects your personal style while maintaining excellent usability. ## Instructions -The codebase for this extension includes pre-existing styles, but you’re not obligated to use them. Personalize your extension by modifying its CSS file to create your own unique design. +### Part 1: Analyze the Current Design + +Before making changes, examine the existing CSS structure: + +1. **Locate** the CSS files in your extension project +2. **Review** the current styling approach and color scheme +3. **Identify** areas for improvement in layout, typography, and visual hierarchy +4. **Consider** how the design supports user goals (easy form completion and clear data display) + +### Part 2: Design Your Custom Styling + +Create a cohesive visual design that includes: + +**Color Scheme:** +- Choose a primary color palette that reflects environmental themes +- Ensure sufficient contrast for accessibility (use tools like WebAIM's contrast checker) +- Consider how colors will look across different browser themes + +**Typography:** +- Select readable fonts that work well at small extension sizes +- Establish a clear hierarchy with appropriate font sizes and weights +- Ensure text remains legible in both light and dark browser themes + +**Layout and Spacing:** +- Improve the visual organization of form elements and data display +- Add appropriate padding and margins for better readability +- Consider responsive design principles for different screen sizes + +### Part 3: Implement Your Design + +Modify the CSS files to implement your design: + +```css +/* Example starting points for customization */ + +.form-data { + /* Style the configuration form */ + background: /* your choice */; + padding: /* your spacing */; + border-radius: /* your preference */; +} + +.result-container { + /* Style the data display area */ + background: /* complementary color */; + border: /* your border style */; + margin: /* your spacing */; +} + +/* Add your custom styles here */ +``` + +**Key areas to style:** +- **Form elements**: Input fields, labels, and submit button +- **Results display**: Data container, text styling, and loading states +- **Interactive elements**: Hover effects, button states, and transitions +- **Overall layout**: Container spacing, background colors, and visual hierarchy + +### Part 4: Test and Refine + +1. **Build** your extension with `npm run build` +2. **Load** the updated extension into your browser +3. **Test** all visual states (form entry, loading, results display, errors) +4. **Verify** accessibility with browser developer tools +5. **Refine** your styles based on actual usage + +## Creative Challenges + +### Basic Level +- Update colors and fonts to create a cohesive theme +- Improve spacing and alignment throughout the interface +- Add subtle hover effects to interactive elements + +### Intermediate Level +- Design custom icons or graphics for your extension +- Implement smooth transitions between different states +- Create a unique loading animation for API calls + +### Advanced Level +- Design multiple theme options (light/dark/high-contrast) +- Implement responsive design for different browser window sizes +- Add micro-interactions that enhance the user experience + +## Submission Guidelines + +Your completed assignment should include: + +- **Modified CSS files** with your custom styling +- **Screenshots** showing your extension in different states (form, loading, results) +- **Brief description** (2-3 sentences) explaining your design choices and how they improve the user experience + +## Assessment Rubric + +| Criteria | Exemplary (4) | Proficient (3) | Developing (2) | Beginning (1) | +|----------|---------------|----------------|----------------|----------------| +| **Visual Design** | Creative, cohesive design that enhances usability and reflects strong design principles | Good design choices with consistent styling and clear visual hierarchy | Basic design improvements with some consistency issues | Minimal styling changes or inconsistent design | +| **Functionality** | All styles work perfectly across different states and browser environments | Styles work well with minor issues in edge cases | Most styles functional with some display problems | Significant styling issues that impact usability | +| **Code Quality** | Clean, well-organized CSS with meaningful class names and efficient selectors | Good CSS structure with appropriate use of selectors and properties | Acceptable CSS with some organization issues | Poor CSS structure or overly complex styling | +| **Accessibility** | Excellent color contrast, readable fonts, and consideration for users with disabilities | Good accessibility practices with minor areas for improvement | Basic accessibility considerations with some issues | Limited attention to accessibility requirements | + +## Tips for Success + +> 💡 **Design Tip**: Start with subtle changes and build up to more dramatic styling. Small improvements in typography and spacing often have big impacts on perceived quality. + +**Best practices to follow:** +- **Test** your extension in both light and dark browser themes +- **Use** relative units (em, rem) for better scalability +- **Maintain** consistent spacing using CSS custom properties +- **Consider** how your design will look to users with different visual needs +- **Validate** your CSS to ensure it follows proper syntax + +> ⚠️ **Common Mistake**: Don't sacrifice usability for visual appeal. Your extension should be both beautiful and functional. -## Rubric +**Remember to:** +- **Keep** important information easily readable +- **Ensure** buttons and interactive elements are easy to click +- **Maintain** clear visual feedback for user actions +- **Test** your design with real data, not just placeholder text -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | -------------------------------------------- | --------------------- | ----------------- | -| | Code is submitted with fully functional new styles | Styling is incomplete | Styles contain errors | +Good luck creating a browser extension that's both functional and visually stunning! --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the definitive source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/5-browser-extension/2-forms-browsers-local-storage/README.md b/translations/en/5-browser-extension/2-forms-browsers-local-storage/README.md index e4b5202ca..942130823 100644 --- a/translations/en/5-browser-extension/2-forms-browsers-local-storage/README.md +++ b/translations/en/5-browser-extension/2-forms-browsers-local-storage/README.md @@ -1,31 +1,99 @@ - # Browser Extension Project Part 2: Call an API, use Local Storage +```mermaid +journey + title Your API Integration & Storage Journey + section Foundation + Setup DOM references: 3: Student + Add event listeners: 4: Student + Handle form submission: 4: Student + section Data Management + Implement local storage: 4: Student + Build API calls: 5: Student + Handle async operations: 5: Student + section User Experience + Add error handling: 5: Student + Create loading states: 4: Student + Polish interactions: 5: Student +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/25) -### Introduction - -In this lesson, you'll learn how to call an API by submitting your browser extension's form and displaying the results within the extension. Additionally, you'll explore how to store data in your browser's local storage for future use and reference. - -✅ Follow the numbered sections in the relevant files to know where to insert your code. - -### Set up the elements to manipulate in the extension: - -By now, you've created the HTML for the form and the results `
` in your browser extension. From this point forward, you'll work in the `/src/index.js` file to build your extension step by step. Refer to the [previous lesson](../1-about-browsers/README.md) for instructions on setting up your project and the build process. - -In your `index.js` file, start by creating some `const` variables to hold the values associated with different fields: - -```JavaScript +## Introduction + +Remember that browser extension you started building? Right now you've got a nice-looking form, but it's essentially static. Today we'll bring it to life by connecting it to real data and giving it memory. + +Think about the Apollo mission control computers - they didn't just display fixed information. They constantly communicated with spacecraft, updated with telemetry data, and remembered critical mission parameters. That's the kind of dynamic behavior we're building today. Your extension will reach out to the internet, grab real environmental data, and remember your settings for next time. + +API integration might sound complex, but it's really just teaching your code how to communicate with other services. Whether you're fetching weather data, social media feeds, or carbon footprint information like we'll do today, it's all about establishing these digital connections. We'll also explore how browsers can persist information - similar to how libraries have used card catalogs to remember where books belong. + +By the end of this lesson, you'll have a browser extension that fetches real data, stores user preferences, and provides a smooth experience. Let's get started! + +```mermaid +mindmap + root((Dynamic Extensions)) + DOM Manipulation + Element Selection + Event Handling + State Management + UI Updates + Local Storage + Data Persistence + Key-Value Pairs + Session Management + User Preferences + API Integration + HTTP Requests + Authentication + Data Parsing + Error Handling + Async Programming + Promises + Async/Await + Error Catching + Non-blocking Code + User Experience + Loading States + Error Messages + Smooth Transitions + Data Validation +``` +✅ Follow the numbered segments in the appropriate files to know where to place your code + +## Set up the elements to manipulate in the extension + +Before your JavaScript can manipulate the interface, it needs references to specific HTML elements. Think of it like a telescope needing to be pointed at particular stars - before Galileo could study Jupiter's moons, he had to locate and focus on Jupiter itself. + +In your `index.js` file, we'll create `const` variables that capture references to each important form element. This is similar to how scientists label their equipment - instead of searching through the entire laboratory each time, they can directly access what they need. + +```mermaid +flowchart LR + A[JavaScript Code] --> B[document.querySelector] + B --> C[CSS Selectors] + C --> D[HTML Elements] + + D --> E[".form-data"] + D --> F[".region-name"] + D --> G[".api-key"] + D --> H[".loading"] + D --> I[".errors"] + D --> J[".result-container"] + + E --> K[Form Element] + F --> L[Input Field] + G --> M[Input Field] + H --> N[UI Element] + I --> O[UI Element] + J --> P[UI Element] + + style A fill:#e1f5fe + style D fill:#e8f5e8 + style K fill:#fff3e0 + style L fill:#fff3e0 + style M fill:#fff3e0 +``` +```javascript // form fields const form = document.querySelector('.form-data'); const region = document.querySelector('.region-name'); @@ -41,123 +109,259 @@ const myregion = document.querySelector('.my-region'); const clearBtn = document.querySelector('.clear-btn'); ``` -All these fields are referenced by their CSS class, as you defined them in the HTML during the previous lesson. - -### Add listeners - -Next, add event listeners to the form and the clear button that resets the form. This ensures that when a user submits the form or clicks the reset button, an action is triggered. Also, add the call to initialize the app at the bottom of the file: - -```JavaScript +**Here's what this code does:** +- **Captures** form elements using `document.querySelector()` with CSS class selectors +- **Creates** references to input fields for the region name and API key +- **Establishes** connections to result display elements for carbon usage data +- **Sets up** access to UI elements like loading indicators and error messages +- **Stores** each element reference in a `const` variable for easy reuse throughout your code + +## Add event listeners + +Now we'll make your extension respond to user actions. Event listeners are your code's way of monitoring user interactions. Think of them like the operators in early telephone exchanges - they listened for incoming calls and connected the right circuits when someone wanted to make a connection. + +```mermaid +sequenceDiagram + participant User + participant Form + participant JavaScript + participant API + participant Storage + + User->>Form: Fills out region/API key + User->>Form: Clicks submit + Form->>JavaScript: Triggers submit event + JavaScript->>JavaScript: handleSubmit(e) + JavaScript->>Storage: Save user preferences + JavaScript->>API: Fetch carbon data + API->>JavaScript: Returns data + JavaScript->>Form: Update UI with results + + User->>Form: Clicks clear button + Form->>JavaScript: Triggers click event + JavaScript->>Storage: Clear saved data + JavaScript->>Form: Reset to initial state +``` +```javascript form.addEventListener('submit', (e) => handleSubmit(e)); clearBtn.addEventListener('click', (e) => reset(e)); init(); ``` -✅ Notice the shorthand used to listen for submit or click events, and how the event is passed to the handleSubmit or reset functions. Can you write the equivalent of this shorthand in a longer format? Which approach do you prefer? +**Understanding these concepts:** +- **Attaches** a submit listener to the form that triggers when users press Enter or click submit +- **Connects** a click listener to the clear button for resetting the form +- **Passes** the event object `(e)` to handler functions for additional control +- **Calls** the `init()` function immediately to set up the initial state of your extension + +✅ Notice the shorthand arrow function syntax used here. This modern JavaScript approach is cleaner than traditional function expressions, but both work equally well! + +### 🔄 **Pedagogical Check-in** +**Event Handling Understanding**: Before moving to initialization, ensure you can: +- ✅ Explain how `addEventListener` connects user actions to JavaScript functions +- ✅ Understand why we pass the event object `(e)` to handler functions +- ✅ Recognize the difference between `submit` and `click` events +- ✅ Describe when the `init()` function runs and why + +**Quick Self-Test**: What would happen if you forgot `e.preventDefault()` in a form submission? +*Answer: The page would reload, losing all JavaScript state and interrupting the user experience* + +## Build the initialization and reset functions -### Build out the init() function and the reset() function: +Let's create the initialization logic for your extension. The `init()` function is like a ship's navigation system checking its instruments - it determines the current state and adjusts the interface accordingly. It checks if someone has used your extension before and loads their previous settings. -Now, you'll create the function that initializes the extension, called `init()`: +The `reset()` function provides users with a fresh start - similar to how scientists reset their instruments between experiments to ensure clean data. -```JavaScript +```javascript function init() { - //if anything is in localStorage, pick it up + // Check if user has previously saved API credentials const storedApiKey = localStorage.getItem('apiKey'); const storedRegion = localStorage.getItem('regionName'); - //set icon to be generic green - //todo + // Set extension icon to generic green (placeholder for future lesson) + // TODO: Implement icon update in next lesson if (storedApiKey === null || storedRegion === null) { - //if we don't have the keys, show the form + // First-time user: show the setup form form.style.display = 'block'; results.style.display = 'none'; loading.style.display = 'none'; clearBtn.style.display = 'none'; errors.textContent = ''; } else { - //if we have saved keys/regions in localStorage, show results when they load - displayCarbonUsage(storedApiKey, storedRegion); + // Returning user: load their saved data automatically + displayCarbonUsage(storedApiKey, storedRegion); results.style.display = 'none'; form.style.display = 'none'; clearBtn.style.display = 'block'; } -}; +} function reset(e) { e.preventDefault(); - //clear local storage for region only + // Clear stored region to allow user to choose a new location localStorage.removeItem('regionName'); + // Restart the initialization process init(); } - ``` -This function contains some interesting logic. As you read through it, can you understand what happens? - -- Two `const` variables are set up to check if the user has stored an APIKey and region code in local storage. -- If either of these is null, the form is displayed by changing its style to 'block.' -- The results, loading indicator, and clear button are hidden, and any error text is cleared. -- If both the key and region exist, a routine is started to: - - Call the API to retrieve carbon usage data. - - Hide the results area. - - Hide the form. - - Display the reset button. - -Before proceeding, it's helpful to learn about an important browser concept: [LocalStorage](https://developer.mozilla.org/docs/Web/API/Window/localStorage). LocalStorage is a convenient way to store strings in the browser as `key-value` pairs. This type of web storage can be managed using JavaScript to handle data within the browser. LocalStorage does not expire, whereas SessionStorage (another type of web storage) is cleared when the browser is closed. Each type of storage has its own advantages and disadvantages. - -> Note: Your browser extension has its own local storage. The main browser window operates as a separate instance and behaves independently. - -You can set your APIKey to have a string value, for example, and view it in Edge by "inspecting" a web page (right-click to inspect) and navigating to the Applications tab to see the storage. - -![Local storage pane](../../../../translated_images/en/localstorage.472f8147b6a3f8d141d9551c95a2da610ac9a3c6a73d4a1c224081c98bae09d9.png) +**Breaking down what happens here:** +- **Retrieves** stored API key and region from browser's local storage +- **Checks** if this is a first-time user (no stored credentials) or returning user +- **Shows** the setup form for new users and hides other interface elements +- **Loads** saved data automatically for returning users and displays the reset option +- **Manages** the user interface state based on available data + +**Key concepts about Local Storage:** +- **Persists** data between browser sessions (unlike session storage) +- **Stores** data as key-value pairs using `getItem()` and `setItem()` +- **Returns** `null` when no data exists for a given key +- **Provides** a simple way to remember user preferences and settings + +> 💡 **Understanding Browser Storage**: [LocalStorage](https://developer.mozilla.org/docs/Web/API/Window/localStorage) is like giving your extension persistent memory. Consider how the ancient Library of Alexandria stored scrolls - information remained available even when scholars left and returned. +> +> **Key characteristics:** +> - **Persists** data even after you close your browser +> - **Survives** computer restarts and browser crashes +> - **Provides** substantial storage space for user preferences +> - **Offers** instant access without network delays + +> **Important Note**: Your browser extension has its own isolated local storage that's separate from regular web pages. This provides security and prevents conflicts with other websites. + +You can view your stored data by opening browser Developer Tools (F12), navigating to the **Application** tab, and expanding the **Local Storage** section. + +```mermaid +stateDiagram-v2 + [*] --> CheckStorage: Extension starts + CheckStorage --> FirstTime: No stored data + CheckStorage --> Returning: Data found + + FirstTime --> ShowForm: Display setup form + ShowForm --> UserInput: User enters data + UserInput --> SaveData: Store in localStorage + SaveData --> FetchAPI: Get carbon data + + Returning --> LoadData: Read from localStorage + LoadData --> FetchAPI: Get carbon data + + FetchAPI --> ShowResults: Display data + ShowResults --> UserAction: User interacts + + UserAction --> Reset: Clear button clicked + UserAction --> ShowResults: View data + + Reset --> ClearStorage: Remove saved data + ClearStorage --> FirstTime: Back to setup +``` +![Local storage pane](../../../../translated_images/en/localstorage.472f8147b6a3f8d1.webp) -✅ Consider situations where you would NOT want to store certain data in LocalStorage. Generally, storing API Keys in LocalStorage is a bad idea! Can you understand why? In our case, since this app is purely for learning and won't be published in an app store, we'll use this method. +> ⚠️ **Security Consideration**: In production applications, storing API keys in LocalStorage poses security risks since JavaScript can access this data. For learning purposes, this approach works fine, but real applications should use secure server-side storage for sensitive credentials. -Notice that you use the Web API to interact with LocalStorage, either by using `getItem()`, `setItem()`, or `removeItem()`. It's widely supported across browsers. +## Handle form submission -Before building the `displayCarbonUsage()` function called in `init()`, let's implement the functionality to handle the initial form submission. +Now we'll handle what happens when someone submits your form. By default, browsers reload the page when forms are submitted, but we'll intercept this behavior to create a smoother experience. -### Handle the form submission +This approach mirrors how mission control handles spacecraft communications - instead of resetting the entire system for each transmission, they maintain continuous operation while processing new information. -Create a function called `handleSubmit` that accepts an event argument `(e)`. Prevent the event from propagating (in this case, stop the browser from refreshing) and call a new function, `setUpUser`, passing in the arguments `apiKey.value` and `region.value`. This way, you use the two values provided via the initial form when the relevant fields are filled. +Create a function that captures the form submission event and extracts the user's input: -```JavaScript +```javascript function handleSubmit(e) { e.preventDefault(); setUpUser(apiKey.value, region.value); } ``` -✅ Refresh your memory: The HTML you created in the previous lesson includes two input fields whose `values` are captured via the `const` variables you set up at the top of the file. Both fields are marked as `required`, so the browser prevents users from submitting null values. +**In the above, we've:** +- **Prevents** the default form submission behavior that would refresh the page +- **Extracts** user input values from the API key and region fields +- **Passes** the form data to the `setUpUser()` function for processing +- **Maintains** single-page application behavior by avoiding page reloads + +✅ Remember that your HTML form fields include the `required` attribute, so the browser automatically validates that users provide both the API key and region before this function runs. -### Set up the user +## Set up user preferences -Next, move on to the `setUpUser` function, where you'll set local storage values for `apiKey` and `regionName`. Add a new function: +The `setUpUser` function is responsible for saving the user's credentials and initiating the first API call. This creates a smooth transition from setup to displaying results. -```JavaScript +```javascript function setUpUser(apiKey, regionName) { + // Save user credentials for future sessions localStorage.setItem('apiKey', apiKey); localStorage.setItem('regionName', regionName); + + // Update UI to show loading state loading.style.display = 'block'; errors.textContent = ''; clearBtn.style.display = 'block'; - //make initial call + + // Fetch carbon usage data with user's credentials displayCarbonUsage(apiKey, regionName); } ``` -This function displays a loading message while the API is being called. At this point, you've reached the most critical function of this browser extension! - -### Display Carbon Usage - -Finally, it's time to query the API! - -Before proceeding, let's discuss APIs. APIs, or [Application Programming Interfaces](https://www.webopedia.com/TERM/A/API.html), are essential tools for web developers. They provide standardized ways for programs to interact and communicate with each other. For example, if you're building a website that needs to query a database, someone might have created an API for you to use. While there are many types of APIs, one of the most popular is a [REST API](https://www.smashingmagazine.com/2018/01/understanding-using-rest-api/). - -✅ The term 'REST' stands for 'Representational State Transfer' and involves using variously-configured URLs to fetch data. Research the different types of APIs available to developers. Which format appeals to you? - -There are some key points to note about this function. First, observe the [`async` keyword](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/async_function). Writing functions to run asynchronously ensures they wait for an action, such as data being returned, to complete before continuing. +**Step by step, here's what's happening:** +- **Saves** the API key and region name to local storage for future use +- **Shows** a loading indicator to inform users that data is being fetched +- **Clears** any previous error messages from the display +- **Reveals** the clear button for users to reset their settings later +- **Initiates** the API call to fetch real carbon usage data + +This function creates a seamless user experience by managing both data persistence and user interface updates in one coordinated action. + +## Display carbon usage data + +Now we'll connect your extension to external data sources through APIs. This transforms your extension from a standalone tool into something that can access real-time information from across the internet. + +**Understanding APIs** + +[APIs](https://www.webopedia.com/TERM/A/API.html) are how different applications communicate with each other. Think of them like the telegraph system that connected distant cities in the 19th century - operators would send requests to distant stations and receive responses with the requested information. Every time you check social media, ask a voice assistant a question, or use a delivery app, APIs are facilitating these data exchanges. + +```mermaid +flowchart TD + A[Your Extension] --> B[HTTP Request] + B --> C[CO2 Signal API] + C --> D{Valid Request?} + D -->|Yes| E[Query Database] + D -->|No| F[Return Error] + E --> G[Carbon Data] + G --> H[JSON Response] + H --> I[Your Extension] + F --> I + I --> J[Update UI] + + subgraph "API Request" + K[Headers: auth-token] + L[Parameters: countryCode] + M[Method: GET] + end + + subgraph "API Response" + N[Carbon Intensity] + O[Fossil Fuel %] + P[Timestamp] + end + + style C fill:#e8f5e8 + style G fill:#fff3e0 + style I fill:#e1f5fe +``` +**Key concepts about REST APIs:** +- **REST** stands for 'Representational State Transfer' +- **Uses** standard HTTP methods (GET, POST, PUT, DELETE) to interact with data +- **Returns** data in predictable formats, typically JSON +- **Provides** consistent, URL-based endpoints for different types of requests + +✅ The [CO2 Signal API](https://www.co2signal.com/) we'll use provides real-time carbon intensity data from electrical grids worldwide. This helps users understand the environmental impact of their electricity usage! + +> 💡 **Understanding Asynchronous JavaScript**: The [`async` keyword](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/async_function) enables your code to handle multiple operations simultaneously. When you request data from a server, you don't want your entire extension to freeze - that would be like air traffic control stopping all operations while waiting for one plane to respond. +> +> **Key benefits:** +> - **Maintains** extension responsiveness while data loads +> - **Allows** other code to continue executing during network requests +> - **Improves** code readability compared to traditional callback patterns +> - **Enables** graceful error handling for network issues Here's a quick video about `async`: @@ -165,62 +369,168 @@ Here's a quick video about `async`: > 🎥 Click the image above for a video about async/await. -Create a new function to query the CO2Signal API: - -```JavaScript -import axios from '../node_modules/axios'; +### 🔄 **Pedagogical Check-in** +**Async Programming Understanding**: Before diving into the API function, verify you understand: +- ✅ Why we use `async/await` instead of blocking the entire extension +- ✅ How `try/catch` blocks handle network errors gracefully +- ✅ The difference between synchronous and asynchronous operations +- ✅ Why API calls can fail and how to handle those failures + +**Real-World Connection**: Consider these everyday async examples: +- **Ordering food**: You don't wait by the kitchen - you get a receipt and continue other activities +- **Sending emails**: Your email app doesn't freeze while sending - you can compose more emails +- **Loading web pages**: Images load progressively while you can already read the text + +**API Authentication Flow**: +```mermaid +sequenceDiagram + participant Ext as Extension + participant API as CO2 Signal API + participant DB as Database + + Ext->>API: Request with auth-token + API->>API: Validate token + API->>DB: Query carbon data + DB->>API: Return data + API->>Ext: JSON response + Ext->>Ext: Update UI +``` +Create the function to fetch and display carbon usage data: +```javascript +// Modern fetch API approach (no external dependencies needed) async function displayCarbonUsage(apiKey, region) { try { - await axios - .get('https://api.co2signal.com/v1/latest', { - params: { - countryCode: region, - }, - headers: { - 'auth-token': apiKey, - }, - }) - .then((response) => { - let CO2 = Math.floor(response.data.data.carbonIntensity); - - //calculateColor(CO2); - - loading.style.display = 'none'; - form.style.display = 'none'; - myregion.textContent = region; - usage.textContent = - Math.round(response.data.data.carbonIntensity) + ' grams (grams C02 emitted per kilowatt hour)'; - fossilfuel.textContent = - response.data.data.fossilFuelPercentage.toFixed(2) + - '% (percentage of fossil fuels used to generate electricity)'; - results.style.display = 'block'; - }); + // Fetch carbon intensity data from CO2 Signal API + const response = await fetch('https://api.co2signal.com/v1/latest', { + method: 'GET', + headers: { + 'auth-token': apiKey, + 'Content-Type': 'application/json' + }, + // Add query parameters for the specific region + ...new URLSearchParams({ countryCode: region }) && { + url: `https://api.co2signal.com/v1/latest?countryCode=${region}` + } + }); + + // Check if the API request was successful + if (!response.ok) { + throw new Error(`API request failed: ${response.status}`); + } + + const data = await response.json(); + const carbonData = data.data; + + // Calculate rounded carbon intensity value + const carbonIntensity = Math.round(carbonData.carbonIntensity); + + // Update the user interface with fetched data + loading.style.display = 'none'; + form.style.display = 'none'; + myregion.textContent = region.toUpperCase(); + usage.textContent = `${carbonIntensity} grams (grams CO₂ emitted per kilowatt hour)`; + fossilfuel.textContent = `${carbonData.fossilFuelPercentage.toFixed(2)}% (percentage of fossil fuels used to generate electricity)`; + results.style.display = 'block'; + + // TODO: calculateColor(carbonIntensity) - implement in next lesson + } catch (error) { - console.log(error); + console.error('Error fetching carbon data:', error); + + // Show user-friendly error message loading.style.display = 'none'; results.style.display = 'none'; - errors.textContent = 'Sorry, we have no data for the region you have requested.'; + errors.textContent = 'Sorry, we couldn\'t fetch data for that region. Please check your API key and region code.'; } } ``` -This is a large function. What's happening here? +**Breaking down what happens here:** +- **Uses** the modern `fetch()` API instead of external libraries like Axios for cleaner, dependency-free code +- **Implements** proper error checking with `response.ok` to catch API failures early +- **Handles** asynchronous operations with `async/await` for more readable code flow +- **Authenticates** with the CO2 Signal API using the `auth-token` header +- **Parses** JSON response data and extracts carbon intensity information +- **Updates** multiple UI elements with formatted environmental data +- **Provides** user-friendly error messages when API calls fail + +**Key modern JavaScript concepts demonstrated:** +- **Template literals** with `${}` syntax for clean string formatting +- **Error handling** with try/catch blocks for robust applications +- **Async/await** pattern for handling network requests gracefully +- **Object destructuring** to extract specific data from API responses +- **Method chaining** for multiple DOM manipulations + +✅ This function demonstrates several important web development concepts - communicating with external servers, handling authentication, processing data, updating interfaces, and managing errors gracefully. These are fundamental skills that professional developers use regularly. + +```mermaid +flowchart TD + A[Start API Call] --> B[Fetch Request] + B --> C{Network Success?} + C -->|No| D[Network Error] + C -->|Yes| E{Response OK?} + E -->|No| F[API Error] + E -->|Yes| G[Parse JSON] + G --> H{Valid Data?} + H -->|No| I[Data Error] + H -->|Yes| J[Update UI] + + D --> K[Show Error Message] + F --> K + I --> K + J --> L[Hide Loading] + K --> L + + style A fill:#e1f5fe + style J fill:#e8f5e8 + style K fill:#ffebee + style L fill:#f3e5f5 +``` +### 🔄 **Pedagogical Check-in** +**Complete System Understanding**: Verify your mastery of the entire flow: +- ✅ How DOM references enable JavaScript to control the interface +- ✅ Why local storage creates persistence between browser sessions +- ✅ How async/await makes API calls without freezing the extension +- ✅ What happens when API calls fail and how errors are handled +- ✅ Why user experience includes loading states and error messages + +🎉 **What you've accomplished:** You've created a browser extension that: +- **Connects** to the internet and retrieves real environmental data +- **Persists** user settings between sessions +- **Handles** errors gracefully instead of crashing +- **Provides** a smooth, professional user experience + +Test your work by running `npm run build` and refreshing your extension in the browser. You now have a functional carbon footprint tracker. The next lesson will add dynamic icon functionality to complete the extension. -- Following best practices, the `async` keyword is used to make the function behave asynchronously. The function includes a `try/catch` block because it will return a promise when the API provides data. Since you can't control the speed of the API's response (or whether it responds at all), you need to handle this uncertainty by calling it asynchronously. -- The function queries the CO2Signal API to retrieve data for your region using your API Key. To use the key, you need to include authentication in the header parameters. -- Once the API responds, various elements of its response data are assigned to the parts of your screen set up to display this information. -- If there's an error or no result, an error message is displayed. +--- -✅ Asynchronous programming patterns are another valuable tool in your skillset. Read [about the different ways](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/async_function) you can configure this type of code. +## GitHub Copilot Agent Challenge 🚀 -Congratulations! If you build your extension (`npm run build`) and refresh it in your extensions pane, you now have a functioning extension! The only thing left to fix is the icon, which you'll address in the next lesson. +Use the Agent mode to complete the following challenge: ---- +**Description:** Enhance the browser extension by adding error handling improvements and user experience features. This challenge will help you practice working with APIs, local storage, and DOM manipulation using modern JavaScript patterns. +**Prompt:** Create an enhanced version of the displayCarbonUsage function that includes: 1) A retry mechanism for failed API calls with exponential backoff, 2) Input validation for the region code before making the API call, 3) A loading animation with progress indicators, 4) Caching of API responses in localStorage with expiration timestamps (cache for 30 minutes), and 5) A feature to display historical data from previous API calls. Also add proper TypeScript-style JSDoc comments to document all function parameters and return types. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. ## 🚀 Challenge -We've discussed several types of APIs in these lessons. Choose a web API and research in depth what it offers. For example, explore APIs available within browsers, such as the [HTML Drag and Drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API). In your opinion, what makes an API great? +Expand your understanding of APIs by exploring the wealth of browser-based APIs available for web development. Choose one of these browser APIs and build a small demonstration: + +- [Geolocation API](https://developer.mozilla.org/docs/Web/API/Geolocation_API) - Get user's current location +- [Notification API](https://developer.mozilla.org/docs/Web/API/Notifications_API) - Send desktop notifications +- [HTML Drag and Drop API](https://developer.mozilla.org/docs/Web/API/HTML_Drag_and_Drop_API) - Create interactive drag interfaces +- [Web Storage API](https://developer.mozilla.org/docs/Web/API/Web_Storage_API) - Advanced local storage techniques +- [Fetch API](https://developer.mozilla.org/docs/Web/API/Fetch_API) - Modern alternative to XMLHttpRequest + +**Research questions to consider:** +- What real-world problems does this API solve? +- How does the API handle errors and edge cases? +- What security considerations exist when using this API? +- How widely supported is this API across different browsers? + +After your research, identify what characteristics make an API developer-friendly and reliable. ## Post-Lecture Quiz @@ -228,7 +538,109 @@ We've discussed several types of APIs in these lessons. Choose a web API and res ## Review & Self Study -In this lesson, you learned about LocalStorage and APIs, both of which are highly useful for professional web developers. Can you think about how these two concepts work together? Consider how you would design a website that stores items to be used by an API. +You learned about LocalStorage and APIs in this lesson, both very useful for the professional web developer. Can you think about how these two things work together? Think about how you would architect a web site that would store items to be used by an API. + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open DevTools Application tab and explore localStorage on any website +- [ ] Create a simple HTML form and test form validation in the browser +- [ ] Try storing and retrieving data using localStorage in the browser console +- [ ] Inspect form data being submitted using the Network tab + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand form handling concepts +- [ ] Build a browser extension form that saves user preferences +- [ ] Implement client-side form validation with helpful error messages +- [ ] Practice using the chrome.storage API for extension data persistence +- [ ] Create a user interface that responds to saved user settings + +### 📅 **Your Week-Long Extension Building** +- [ ] Complete a full-featured browser extension with form functionality +- [ ] Master different storage options: local, sync, and session storage +- [ ] Implement advanced form features like autocomplete and validation +- [ ] Add import/export functionality for user data +- [ ] Test your extension thoroughly across different browsers +- [ ] Polish your extension's user experience and error handling + +### 🌟 **Your Month-Long Web API Mastery** +- [ ] Build complex applications using various browser storage APIs +- [ ] Learn about offline-first development patterns +- [ ] Contribute to open source projects involving data persistence +- [ ] Master privacy-focused development and GDPR compliance +- [ ] Create reusable libraries for form handling and data management +- [ ] Share knowledge about web APIs and extension development + +## 🎯 Your Extension Development Mastery Timeline + +```mermaid +timeline + title API Integration & Storage Learning Progression + + section DOM Fundamentals (15 minutes) + Element References: querySelector mastery + : Event listener setup + : State management basics + + section Local Storage (20 minutes) + Data Persistence: Key-value storage + : Session management + : User preference handling + : Storage inspection tools + + section Form Handling (25 minutes) + User Input: Form validation + : Event prevention + : Data extraction + : UI state transitions + + section API Integration (35 minutes) + External Communication: HTTP requests + : Authentication patterns + : JSON data parsing + : Response handling + + section Async Programming (40 minutes) + Modern JavaScript: Promise handling + : Async/await patterns + : Error management + : Non-blocking operations + + section Error Handling (30 minutes) + Robust Applications: Try/catch blocks + : User-friendly messages + : Graceful degradation + : Debugging techniques + + section Advanced Patterns (1 week) + Professional Development: Caching strategies + : Rate limiting + : Retry mechanisms + : Performance optimization + + section Production Skills (1 month) + Enterprise Features: Security best practices + : API versioning + : Monitoring & logging + : Scalable architecture +``` +### 🛠️ Your Full-Stack Development Toolkit Summary + +After completing this lesson, you now have: +- **DOM Mastery**: Precise element targeting and manipulation +- **Storage Expertise**: Persistent data management with localStorage +- **API Integration**: Real-time data fetching and authentication +- **Async Programming**: Non-blocking operations with modern JavaScript +- **Error Handling**: Robust applications that gracefully handle failures +- **User Experience**: Loading states, validation, and smooth interactions +- **Modern Patterns**: fetch API, async/await, and ES6+ features + +**Professional Skills Gained**: You've implemented patterns used in: +- **Web Applications**: Single-page apps with external data sources +- **Mobile Development**: API-driven apps with offline capabilities +- **Desktop Software**: Electron apps with persistent storage +- **Enterprise Systems**: Authentication, caching, and error handling +- **Modern Frameworks**: React/Vue/Angular data management patterns + +**Next Level**: You're ready to explore advanced topics like caching strategies, real-time WebSocket connections, or complex state management! ## Assignment @@ -236,5 +648,7 @@ In this lesson, you learned about LocalStorage and APIs, both of which are highl --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/5-browser-extension/2-forms-browsers-local-storage/assignment.md b/translations/en/5-browser-extension/2-forms-browsers-local-storage/assignment.md index b0f626087..b75a332ed 100644 --- a/translations/en/5-browser-extension/2-forms-browsers-local-storage/assignment.md +++ b/translations/en/5-browser-extension/2-forms-browsers-local-storage/assignment.md @@ -1,25 +1,100 @@ - # Adopt an API +## Overview + +APIs open up endless possibilities for creative web development! In this assignment, you'll choose an external API and build a browser extension that solves a real problem or provides valuable functionality to users. + ## Instructions -APIs can be a lot of fun to experiment with. Here is a [list of many free ones](https://github.com/public-apis/public-apis). Choose an API and create a browser extension that addresses a problem. It could be something as small as not having enough pictures of pets (in which case, try the [dog CEO API](https://dog.ceo/dog-api/)) or something more significant—just have fun with it! +### Step 1: Choose Your API +Select an API from this curated [list of free public APIs](https://github.com/public-apis/public-apis). Consider these categories: + +**Popular options for beginners:** +- **Entertainment**: [Dog CEO API](https://dog.ceo/dog-api/) for random dog pictures +- **Weather**: [OpenWeatherMap](https://openweathermap.org/api) for current weather data +- **Quotes**: [Quotable API](https://quotable.io/) for inspirational quotes +- **News**: [NewsAPI](https://newsapi.org/) for current headlines +- **Fun Facts**: [Numbers API](http://numbersapi.com/) for interesting number facts + +### Step 2: Plan Your Extension +Before coding, answer these planning questions: +- What problem does your extension solve? +- Who is your target user? +- What data will you store in local storage? +- How will you handle API failures or rate limits? + +### Step 3: Build Your Extension +Your extension should include: + +**Required Features:** +- Form inputs for any required API parameters +- API integration with proper error handling +- Local storage for user preferences or API keys +- Clean, responsive user interface +- Loading states and user feedback + +**Code Requirements:** +- Use modern JavaScript (ES6+) features +- Implement async/await for API calls +- Include proper error handling with try/catch blocks +- Add meaningful comments explaining your code +- Follow consistent code formatting + +### Step 4: Test and Polish +- Test your extension with various inputs +- Handle edge cases (no internet, invalid API responses) +- Ensure your extension works after browser restart +- Add user-friendly error messages + +## Bonus Challenges + +Take your extension to the next level: +- Add multiple API endpoints for richer functionality +- Implement data caching to reduce API calls +- Create keyboard shortcuts for common actions +- Add data export/import features +- Implement user customization options + +## Submission Requirements + +1. **Working browser extension** that successfully integrates with your chosen API +2. **README file** explaining: + - Which API you chose and why + - How to install and use your extension + - Any API keys or setup required + - Screenshots of your extension in action +3. **Clean, commented code** following modern JavaScript practices ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | ------------------------------------------------------------------------ | ---------------------------------------- | ----------------------- | -| | A fully functional browser extension is submitted using an API from the list above | A partially functional browser extension is submitted | The submission contains errors | +| Criteria | Exemplary (90-100%) | Proficient (80-89%) | Developing (70-79%) | Beginning (60-69%) | +|----------|---------------------|---------------------|---------------------|--------------------| +| **API Integration** | Flawless API integration with comprehensive error handling and edge case management | Successful API integration with basic error handling | API works but has limited error handling | API integration has significant issues | +| **Code Quality** | Clean, well-commented modern JavaScript following best practices | Good code structure with adequate comments | Code works but needs better organization | Poor code quality with minimal comments | +| **User Experience** | Polished interface with excellent loading states and user feedback | Good interface with basic user feedback | Basic interface that functions adequately | Poor user experience with confusing interface | +| **Local Storage** | Sophisticated use of local storage with data validation and management | Proper implementation of local storage for key features | Basic local storage implementation | Minimal or incorrect use of local storage | +| **Documentation** | Comprehensive README with setup instructions and screenshots | Good documentation covering most requirements | Basic documentation missing some details | Poor or missing documentation | + +## Getting Started Tips + +1. **Start simple**: Choose an API that doesn't require complex authentication +2. **Read the docs**: Thoroughly understand your chosen API's endpoints and responses +3. **Plan your UI**: Sketch your extension's interface before coding +4. **Test frequently**: Build incrementally and test each feature as you add it +5. **Handle errors**: Always assume API calls might fail and plan accordingly + +## Resources + +- [Browser Extension Documentation](https://developer.mozilla.org/docs/Mozilla/Add-ons/WebExtensions) +- [Fetch API Guide](https://developer.mozilla.org/docs/Web/API/Fetch_API/Using_Fetch) +- [Local Storage Tutorial](https://developer.mozilla.org/docs/Web/API/Window/localStorage) +- [JSON Parsing and Handling](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/JSON) + +Have fun building something useful and creative! 🚀 --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/5-browser-extension/3-background-tasks-and-performance/README.md b/translations/en/5-browser-extension/3-background-tasks-and-performance/README.md index 30943c028..a501c4611 100644 --- a/translations/en/5-browser-extension/3-background-tasks-and-performance/README.md +++ b/translations/en/5-browser-extension/3-background-tasks-and-performance/README.md @@ -1,158 +1,450 @@ - # Browser Extension Project Part 3: Learn about Background Tasks and Performance +```mermaid +journey + title Your Performance Optimization Journey + section Foundation + Learn browser tools: 3: Student + Understand profiling: 4: Student + Identify bottlenecks: 4: Student + section Extension Features + Build color system: 4: Student + Create background tasks: 5: Student + Update icons dynamically: 5: Student + section Optimization + Monitor performance: 5: Student + Debug issues: 4: Student + Polish experience: 5: Student +``` +Ever wonder what makes some browser extensions feel snappy and responsive while others seem sluggish? The secret lies in what's happening behind the scenes. While users click around your extension's interface, there's a whole world of background processes quietly managing data fetching, icon updates, and system resources. + +This is our final lesson in the browser extension series, and we're going to make your carbon footprint tracker work smoothly. You'll add dynamic icon updates and learn how to spot performance issues before they become problems. It's like tuning a race car - small optimizations can make a huge difference in how everything runs. + +By the time we're done, you'll have a polished extension and understand the performance principles that separate good web apps from great ones. Let's dive into the world of browser optimization. + ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/27) ### Introduction -In the last two lessons of this module, you learned how to create a form and a display area for data fetched from an API. This is a very common way to establish a web presence. You even learned how to handle asynchronous data fetching. Your browser extension is almost complete. +In our previous lessons, you built a form, connected it to an API, and tackled asynchronous data fetching. Your extension is taking shape nicely. + +Now we need to add the finishing touches - like making that extension icon change colors based on the carbon data. This reminds me of how NASA had to optimize every system on the Apollo spacecraft. They couldn't afford any wasted cycles or memory because lives depended on performance. While our browser extension isn't quite that critical, the same principles apply - efficient code creates better user experiences. + +```mermaid +mindmap + root((Performance & Background Tasks)) + Browser Performance + Rendering Pipeline + Asset Optimization + DOM Manipulation + JavaScript Execution + Profiling Tools + Developer Tools + Performance Tab + Timeline Analysis + Bottleneck Detection + Extension Architecture + Background Scripts + Content Scripts + Message Passing + Icon Management + Optimization Strategies + Code Splitting + Lazy Loading + Caching + Resource Compression + Visual Feedback + Dynamic Icons + Color Coding + Real-time Updates + User Experience +``` +## Web Performance Basics -The remaining tasks involve managing background processes, such as refreshing the color of the extension's icon. This is a great opportunity to discuss how the browser handles these types of tasks. Let's consider these browser tasks in the context of optimizing the performance of your web assets as you develop them. +When your code runs efficiently, people can actually *feel* the difference. You know that moment when a page loads instantly or an animation flows smoothly? That's good performance at work. -## Web Performance Basics +Performance isn't just about speed - it's about making web experiences that feel natural instead of clunky and frustrating. Back in the early days of computing, Grace Hopper famously kept a nanosecond (a piece of wire about a foot long) on her desk to show how far light travels in one billionth of a second. It was her way of explaining why every microsecond matters in computing. Let's explore the detective tools that help you figure out what's slowing things down. > "Website performance is about two things: how fast the page loads, and how fast the code on it runs." -- [Zack Grossbart](https://www.smashingmagazine.com/2012/06/javascript-profiling-chrome-developer-tools/) -The topic of making websites lightning-fast across all devices, for all users, and in all situations is understandably vast. Here are some key points to keep in mind when building either a standard web project or a browser extension. +The topic of how to make your websites blazingly fast on all kinds of devices, for all kinds of users, in all kinds of situations, is unsurprisingly vast. Here are some points to keep in mind as you build either a standard web project or a browser extension. + +The first step in optimizing your site is understanding what's actually happening under the hood. Fortunately, your browser comes with powerful detective tools built right in. + +```mermaid +flowchart LR + A[HTML] --> B[Parse] + B --> C[DOM Tree] + D[CSS] --> E[Parse] + E --> F[CSSOM] + G[JavaScript] --> H[Execute] + + C --> I[Render Tree] + F --> I + H --> I + + I --> J[Layout] + J --> K[Paint] + K --> L[Composite] + L --> M[Display] + + subgraph "Critical Rendering Path" + N["1. Parse HTML"] + O["2. Parse CSS"] + P["3. Execute JS"] + Q["4. Build Render Tree"] + R["5. Layout Elements"] + S["6. Paint Pixels"] + T["7. Composite Layers"] + end + + style M fill:#e8f5e8 + style I fill:#fff3e0 + style H fill:#ffebee +``` +To open Developer Tools in Edge, click those three dots in the top right corner, then go to More Tools > Developer Tools. Or use the keyboard shortcut: `Ctrl` + `Shift` + `I` on Windows or `Option` + `Command` + `I` on Mac. Once you're there, click on the Performance tab - this is where you'll do your investigation. -The first step to ensuring your site runs efficiently is to gather data about its performance. The best place to start is the developer tools in your web browser. In Edge, click the "Settings and more" button (the three dots icon in the top-right corner of the browser), then navigate to More Tools > Developer Tools and open the Performance tab. You can also use the keyboard shortcuts `Ctrl` + `Shift` + `I` on Windows or `Option` + `Command` + `I` on Mac to open developer tools. +**Here's your performance detective toolkit:** +- **Open** Developer Tools (you'll use these constantly as a developer!) +- **Head** to the Performance tab - think of it as your web app's fitness tracker +- **Hit** that Record button and watch your page in action +- **Study** the results to spot what's slowing things down -The Performance tab includes a Profiling tool. Open a website (for example, [https://www.microsoft.com](https://www.microsoft.com/?WT.mc_id=academic-77807-sagibbon)) and click the 'Record' button, then refresh the site. Stop the recording at any time, and you'll see routines generated for 'script', 'render', and 'paint' processes: +Let's try this out. Open a website (Microsoft.com works well for this) and click that 'Record' button. Now refresh the page and watch the profiler capture everything that happens. When you stop recording, you'll see a detailed breakdown of how the browser 'scripts', 'renders', and 'paints' the site. It reminds me of how mission control monitors every system during a rocket launch - you get real-time data on exactly what's happening and when. -![Edge profiler](../../../../translated_images/en/profiler.5a4a62479c5df01cfec9aab74173dba13f91d2c968e1a1ae434c26165792df15.png) +![Edge profiler](../../../../translated_images/en/profiler.5a4a62479c5df01c.webp) -✅ Visit the [Microsoft Documentation](https://docs.microsoft.com/microsoft-edge/devtools-guide/performance/?WT.mc_id=academic-77807-sagibbon) on the Performance panel in Edge. +✅ The [Microsoft Documentation](https://docs.microsoft.com/microsoft-edge/devtools-guide/performance/?WT.mc_id=academic-77807-sagibbon) has tons more details if you want to dive deeper -> Tip: To get an accurate reading of your website's startup time, clear your browser's cache. +> Pro tip: Clear your browser cache before testing to see how your site performs for first-time visitors - it's usually quite different from repeat visits! -Select elements of the profile timeline to zoom in on events that occur while your page loads. +Select elements of the profile timeline to zoom in on events that happen while your page loads. -Get a snapshot of your page's performance by selecting a part of the profile timeline and reviewing the summary pane: +Get a snapshot of your page's performance by selecting a part of the profile timeline and looking at the summary pane: -![Edge profiler snapshot](../../../../translated_images/en/snapshot.97750180ebcad73794a3594b36925eb5c8dbaac9e03fec7f9b974188c9ac63c7.png) +![Edge profiler snapshot](../../../../translated_images/en/snapshot.97750180ebcad737.webp) Check the Event Log pane to see if any event took longer than 15 ms: -![Edge event log](../../../../translated_images/en/log.804026979f3707e00eebcfa028b2b5a88cec6292f858767bb6703afba65a7d9c.png) +![Edge event log](../../../../translated_images/en/log.804026979f3707e0.webp) + +✅ Get to know your profiler! Open the developer tools on this site and see if there are any bottlenecks. What's the slowest-loading asset? The fastest? + +```mermaid +flowchart TD + A[Open DevTools] --> B[Navigate to Performance Tab] + B --> C[Click Record Button] + C --> D[Perform Actions] + D --> E[Stop Recording] + E --> F{Analyze Results} + + F --> G[Check Timeline] + F --> H[Review Network] + F --> I[Examine Scripts] + F --> J[Identify Paint Events] + + G --> K{Long Tasks?} + H --> L{Large Assets?} + I --> M{Render Blocking?} + J --> N{Expensive Paints?} + + K -->|Yes| O[Optimize JavaScript] + L -->|Yes| P[Compress Assets] + M -->|Yes| Q[Add Async/Defer] + N -->|Yes| R[Simplify Styles] + + O --> S[Test Again] + P --> S + Q --> S + R --> S + + style A fill:#e1f5fe + style F fill:#fff3e0 + style S fill:#e8f5e8 +``` +## What to Look For When Profiling -✅ Familiarize yourself with the profiler! Open the developer tools on this site and check for bottlenecks. What is the slowest-loading asset? The fastest? +Running the profiler is just the beginning - the real skill is knowing what those colorful charts are actually telling you. Don't worry, you'll get the hang of reading them. Experienced developers have learned to spot the warning signs before they become full-blown problems. -## Profiling checks +Let's talk about the usual suspects - the performance troublemakers that tend to sneak into web projects. Like how Marie Curie had to carefully monitor radiation levels in her lab, we need to watch for certain patterns that indicate trouble brewing. Catching these early will save you (and your users) a lot of frustration. -In general, there are some "problem areas" every web developer should monitor when building a site to avoid unpleasant surprises during production deployment. +**Asset sizes**: Websites have been getting "heavier" over the years, and a lot of that extra weight comes from images. It's like we've been stuffing more and more into our digital suitcases. -**Asset sizes**: The web has become 'heavier' and slower over the years, partly due to the use of images. +✅ Check out the [Internet Archive](https://httparchive.org/reports/page-weight) to see how page sizes have grown over time - it's quite revealing. -✅ Explore the [Internet Archive](https://httparchive.org/reports/page-weight) for a historical view of page weight and more. +**Here's how to keep your assets optimized:** +- **Compress** those images! Modern formats like WebP can cut file sizes dramatically +- **Serve** the right image size for each device - no need to send huge desktop images to phones +- **Minify** your CSS and JavaScript - every byte counts +- **Use** lazy loading so images only download when users actually scroll to them -A good practice is to ensure your images are optimized and delivered at the appropriate size and resolution for your users. +**DOM traversals**: The browser has to build its Document Object Model based on the code you write, so it's in the interest of good page performance to keep your tags minimal, only using and styling what the page needs. To this point, excess CSS associated with a page could be optimized; styles that need to be used only on one page don't need to be included in the main style sheet, for example. -**DOM traversals**: The browser builds its Document Object Model based on the code you write, so good page performance depends on keeping your tags minimal and only using and styling what the page requires. For example, excess CSS associated with a page can be optimized; styles needed for only one page don't need to be included in the main stylesheet. +**Key strategies for DOM optimization:** +- **Minimizes** the number of HTML elements and nesting levels +- **Removes** unused CSS rules and consolidates stylesheets efficiently +- **Organizes** CSS to load only what's needed for each page +- **Structures** HTML semantically for better browser parsing -**JavaScript**: Every JavaScript developer should watch for 'render-blocking' scripts that must load before the rest of the DOM can be traversed and painted in the browser. Consider using `defer` with your inline scripts (as demonstrated in the Terrarium module). +**JavaScript**: Every JavaScript developer should watch for 'render-blocking' scripts that must be loaded before the rest of the DOM can be traversed and painted to the browser. Consider using `defer` with your inline scripts (as is done in the Terrarium module). -✅ Test some sites on a [Site Speed Test website](https://www.webpagetest.org/) to learn more about common checks for site performance. +**Modern JavaScript optimization techniques:** +- **Uses** the `defer` attribute to load scripts after DOM parsing +- **Implements** code splitting to load only necessary JavaScript +- **Applies** lazy loading for non-critical functionality +- **Minimizes** the use of heavy libraries and frameworks when possible -Now that you understand how the browser renders the assets you send to it, let's look at the final steps to complete your extension: +✅ Try some sites on a [Site Speed Test website](https://www.webpagetest.org/) to learn more about the common checks that are done to determine site performance. -### Create a function to calculate color +### 🔄 **Pedagogical Check-in** +**Performance Understanding**: Before building extension features, ensure you can: +- ✅ Explain the critical rendering path from HTML to pixels +- ✅ Identify common performance bottlenecks in web applications +- ✅ Use browser developer tools to profile page performance +- ✅ Understand how asset size and DOM complexity affect speed + +**Quick Self-Test**: What happens when you have render-blocking JavaScript? +*Answer: The browser must download and execute the script before it can continue parsing HTML and rendering the page* -In `/src/index.js`, add a function called `calculateColor()` after the series of `const` variables you set to access the DOM: +**Real-World Performance Impact**: +- **100ms delay**: Users notice the slowdown +- **1 second delay**: Users start losing focus +- **3+ seconds**: 40% of users abandon the page +- **Mobile networks**: Performance matters even more -```JavaScript +Now that you have an idea of how the browser renders the assets you send to it, let's look at the last few things you need to do to complete your extension: + +### Create a function to calculate color + +Now we'll create a function that turns numerical data into meaningful colors. Think of it like a traffic light system - green for clean energy, red for high carbon intensity. + +This function will take the CO2 data from our API and determine what color best represents the environmental impact. It's similar to how scientists use color-coding in heat maps to visualize complex data patterns - from ocean temperatures to star formation. Let's add this to `/src/index.js`, right after those `const` variables we set up earlier: + +```mermaid +flowchart LR + A[CO2 Value] --> B[Find Closest Scale Point] + B --> C[Get Scale Index] + C --> D[Map to Color] + D --> E[Send to Background] + + subgraph "Color Scale" + F["0-150: Green (Clean)"] + G["150-600: Yellow (Moderate)"] + H["600-750: Orange (High)"] + I["750+: Brown (Very High)"] + end + + subgraph "Message Passing" + J[Content Script] + K[chrome.runtime.sendMessage] + L[Background Script] + M[Icon Update] + end + + style A fill:#e1f5fe + style D fill:#e8f5e8 + style E fill:#fff3e0 +``` +```javascript function calculateColor(value) { - let co2Scale = [0, 150, 600, 750, 800]; - let colors = ['#2AA364', '#F5EB4D', '#9E4229', '#381D02', '#381D02']; + // Define CO2 intensity scale (grams per kWh) + const co2Scale = [0, 150, 600, 750, 800]; + // Corresponding colors from green (clean) to dark brown (high carbon) + const colors = ['#2AA364', '#F5EB4D', '#9E4229', '#381D02', '#381D02']; - let closestNum = co2Scale.sort((a, b) => { + // Find the closest scale value to our input + const closestNum = co2Scale.sort((a, b) => { return Math.abs(a - value) - Math.abs(b - value); })[0]; - console.log(value + ' is closest to ' + closestNum); - let num = (element) => element > closestNum; - let scaleIndex = co2Scale.findIndex(num); - - let closestColor = colors[scaleIndex]; + + console.log(`${value} is closest to ${closestNum}`); + + // Find the index for color mapping + const num = (element) => element > closestNum; + const scaleIndex = co2Scale.findIndex(num); + + const closestColor = colors[scaleIndex]; console.log(scaleIndex, closestColor); + // Send color update message to background script chrome.runtime.sendMessage({ action: 'updateIcon', value: { color: closestColor } }); } ``` -What happens here? You pass a value (the carbon intensity) from the API call you completed in the last lesson, then calculate how close its value is to the index in the colors array. You then send the closest color value to the chrome runtime. +**Let's break down this clever little function:** +- **Sets up** two arrays - one for CO2 levels, another for colors (green = clean, brown = dirty!) +- **Finds** the closest match to our actual CO2 value using some neat array sorting +- **Grabs** the matching color using the findIndex() method +- **Sends** a message to Chrome's background script with our chosen color +- **Uses** template literals (those backticks) for cleaner string formatting +- **Keeps** everything organized with const declarations -The chrome.runtime has [an API](https://developer.chrome.com/extensions/runtime) that handles various background tasks, which your extension utilizes: +The `chrome.runtime` [API](https://developer.chrome.com/extensions/runtime) is like the nervous system of your extension - it handles all the behind-the-scenes communication and tasks: > "Use the chrome.runtime API to retrieve the background page, return details about the manifest, and listen for and respond to events in the app or extension lifecycle. You can also use this API to convert the relative path of URLs to fully-qualified URLs." -✅ If you're developing this browser extension for Edge, you might be surprised to use a chrome API. The newer Edge browser versions run on the Chromium browser engine, allowing you to leverage these tools. - -> Note: If you want to profile a browser extension, launch the dev tools from within the extension itself, as it operates as a separate browser instance. +**Why the Chrome Runtime API is so handy:** +- **Lets** different parts of your extension talk to each other +- **Handles** background work without freezing the user interface +- **Manages** your extension's lifecycle events +- **Makes** message passing between scripts super easy + +✅ If you're developing this browser extension for Edge, it might surprise you that you're using a chrome API. The newer Edge browser versions run on the Chromium browser engine, so you can leverage these tools. + +```mermaid +architecture-beta + group browser(logos:chrome)[Browser] + + service popup(logos:html5)[Popup UI] in browser + service content(logos:javascript)[Content Script] in browser + service background(database)[Background Script] in browser + service api(logos:api)[External API] in browser + + popup:R -- L:content + content:R -- L:background + background:T -- B:api + content:T -- B:api + + junction junctionCenter in browser + popup:R -- L:junctionCenter + junctionCenter:R -- L:background +``` +> **Pro Tip**: If you want to profile a browser extension, launch the dev tools from within the extension itself, as it is its own separate browser instance. This gives you access to extension-specific performance metrics. ### Set a default icon color -Now, in the `init()` function, set the icon to a generic green color initially by calling chrome's `updateIcon` action: +Before we start fetching real data, let's give our extension a starting point. Nobody likes staring at a blank or broken-looking icon. We'll start with a green color so users know the extension is working from the moment they install it. + +In your `init()` function, let's set up that default green icon: -```JavaScript +```javascript chrome.runtime.sendMessage({ action: 'updateIcon', - value: { - color: 'green', - }, + value: { + color: 'green', + }, }); ``` + +**What this initialization accomplishes:** +- **Sets** a neutral green color as the default state +- **Provides** immediate visual feedback when the extension loads +- **Establishes** the communication pattern with the background script +- **Ensures** users see a functional extension before data loads ### Call the function, execute the call -Next, call the function you just created by adding it to the promise returned by the CO2Signal API: +Now let's connect everything together so that when fresh CO2 data comes in, your icon automatically updates with the right color. It's like connecting the final circuit in an electronic device - suddenly all the individual components work as one system. -```JavaScript -//let CO2... +Add this line right after you get the CO2 data from the API: + +```javascript +// After retrieving CO2 data from the API +// let CO2 = data.data[0].intensity.actual; calculateColor(CO2); ``` -Finally, in `/dist/background.js`, add the listener for these background action calls: +**This integration accomplishes:** +- **Connects** the API data flow with the visual indicator system +- **Triggers** icon updates automatically when new data arrives +- **Ensures** real-time visual feedback based on current carbon intensity +- **Maintains** the separation of concerns between data fetching and display logic + +And finally, in `/dist/background.js`, add the listener for these background action calls: -```JavaScript +```javascript +// Listen for messages from the content script chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) { if (msg.action === 'updateIcon') { chrome.action.setIcon({ imageData: drawIcon(msg.value) }); } }); -//borrowed from energy lollipop extension, nice feature! + +// Draw dynamic icon using Canvas API +// Borrowed from energy lollipop extension - nice feature! function drawIcon(value) { - let canvas = new OffscreenCanvas(200, 200); - let context = canvas.getContext('2d'); + // Create an offscreen canvas for better performance + const canvas = new OffscreenCanvas(200, 200); + const context = canvas.getContext('2d'); + // Draw a colored circle representing carbon intensity context.beginPath(); context.fillStyle = value.color; context.arc(100, 100, 50, 0, 2 * Math.PI); context.fill(); + // Return the image data for the browser icon return context.getImageData(50, 50, 100, 100); } ``` -In this code, you add a listener for any messages sent to the backend task manager. If the message is called 'updateIcon', the subsequent code runs to draw an icon of the appropriate color using the Canvas API. + +**Here's what this background script does:** +- **Listens** for messages from your main script (like a receptionist taking calls) +- **Processes** those 'updateIcon' requests to change your toolbar icon +- **Creates** new icons on the fly using the Canvas API +- **Draws** a simple colored circle that shows the current carbon intensity +- **Updates** your browser toolbar with the fresh icon +- **Uses** OffscreenCanvas for smooth performance (no UI blocking) ✅ You'll learn more about the Canvas API in the [Space Game lessons](../../6-space-game/2-drawing-to-canvas/README.md). -Now, rebuild your extension (`npm run build`), refresh and launch your extension, and watch the color change. Is it time to run an errand or wash the dishes? Now you know! +```mermaid +sequenceDiagram + participant CS as Content Script + participant BG as Background Script + participant Canvas as OffscreenCanvas + participant Browser as Browser Icon + + CS->>BG: sendMessage({action: 'updateIcon', color}) + BG->>Canvas: new OffscreenCanvas(200, 200) + Canvas->>Canvas: getContext('2d') + Canvas->>Canvas: beginPath() + fillStyle + arc() + Canvas->>Canvas: fill() + getImageData() + Canvas->>BG: Return image data + BG->>Browser: chrome.action.setIcon(imageData) + Browser->>Browser: Update toolbar icon +``` +### 🔄 **Pedagogical Check-in** +**Complete Extension Understanding**: Verify your mastery of the entire system: +- ✅ How does message passing work between different extension scripts? +- ✅ Why do we use OffscreenCanvas instead of regular Canvas for performance? +- ✅ What role does the Chrome Runtime API play in extension architecture? +- ✅ How does the color calculation algorithm map data to visual feedback? -Congratulations, you've built a functional browser extension and gained insights into how the browser works and how to profile its performance. +**Performance Considerations**: Your extension now demonstrates: +- **Efficient messaging**: Clean communication between script contexts +- **Optimized rendering**: OffscreenCanvas prevents UI blocking +- **Real-time updates**: Dynamic icon changes based on live data +- **Memory management**: Proper cleanup and resource handling ---- +**Time to test your extension:** +- **Build** everything with `npm run build` +- **Reload** your extension in the browser (don't forget this step) +- **Open** your extension and watch that icon change colors +- **Check** how it responds to real carbon data from around the world + +Now you'll know at a glance whether it's a good time for that load of laundry or if you should wait for cleaner energy. You've just built something genuinely useful and learned about browser performance along the way. + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Enhance the browser extension's performance monitoring capabilities by adding a feature that tracks and displays load times for different components of the extension. + +**Prompt:** Create a performance monitoring system for the browser extension that measures and logs the time it takes to fetch CO2 data from the API, calculate colors, and update the icon. Add a function called `performanceTracker` that uses the Performance API to measure these operations and displays the results in the browser console with timestamps and duration metrics. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. ## 🚀 Challenge -Explore some open-source websites that have been around for a long time. Based on their GitHub history, try to determine how they were optimized for performance over the years, if at all. What is the most common pain point? +Here's an interesting detective mission: pick a few open source websites that have been around for years (think Wikipedia, GitHub, or Stack Overflow) and dig into their commit history. Can you spot where they made performance improvements? What problems kept cropping up? + +**Your investigation approach:** +- **Search** commit messages for words like "optimize," "performance," or "faster" +- **Look** for patterns - do they keep fixing the same types of issues? +- **Identify** the common culprits that slow down websites +- **Share** what you discover - other developers learn from real-world examples ## Post-Lecture Quiz @@ -160,9 +452,128 @@ Explore some open-source websites that have been around for a long time. Based o ## Review & Self Study -Consider subscribing to a [performance newsletter](https://perf.email/). - -Investigate how browsers measure web performance by exploring the performance tabs in their developer tools. Do you notice any significant differences? +Consider signing up for a [performance newsletter](https://perf.email/) + +Investigate some of the ways that browsers gauge web performance by looking through the performance tabs in their web tools. Do you find any major differences? + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open browser Task Manager (Shift+Esc in Chrome) to see extension resource usage +- [ ] Use DevTools Performance tab to record and analyze webpage performance +- [ ] Check the browser's Extensions page to see which extensions impact startup time +- [ ] Try disabling extensions temporarily to see performance differences + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand performance concepts +- [ ] Implement a background script for your browser extension +- [ ] Learn to use browser.alarms for efficient background tasks +- [ ] Practice message passing between content scripts and background scripts +- [ ] Measure and optimize your extension's resource usage + +### 📅 **Your Week-Long Performance Journey** +- [ ] Complete a high-performance browser extension with background functionality +- [ ] Master service workers and modern extension architecture +- [ ] Implement efficient data synchronization and caching strategies +- [ ] Learn advanced debugging techniques for extension performance +- [ ] Optimize your extension for both functionality and resource efficiency +- [ ] Create comprehensive tests for extension performance scenarios + +### 🌟 **Your Month-Long Optimization Mastery** +- [ ] Build enterprise-grade browser extensions with optimal performance +- [ ] Learn about Web Workers, Service Workers, and modern web performance +- [ ] Contribute to open source projects focused on performance optimization +- [ ] Master browser internals and advanced debugging techniques +- [ ] Create performance monitoring tools and best practices guides +- [ ] Become a performance expert who helps optimize web applications + +## 🎯 Your Browser Extension Mastery Timeline + +```mermaid +timeline + title Complete Extension Development Progression + + section Performance Fundamentals (20 minutes) + Browser Profiling: DevTools mastery + : Timeline analysis + : Bottleneck identification + : Critical rendering path + + section Background Tasks (25 minutes) + Extension Architecture: Message passing + : Background scripts + : Runtime API usage + : Cross-context communication + + section Visual Feedback (30 minutes) + Dynamic UI: Color calculation algorithms + : Canvas API integration + : Icon generation + : Real-time updates + + section Performance Optimization (35 minutes) + Efficient Code: Async operations + : Memory management + : Resource cleanup + : Performance monitoring + + section Production Ready (45 minutes) + Polish & Testing: Cross-browser compatibility + : Error handling + : User experience + : Performance validation + + section Advanced Features (1 week) + Extension Ecosystem: Chrome Web Store + : User feedback + : Analytics integration + : Update management + + section Professional Development (2 weeks) + Enterprise Extensions: Team collaboration + : Code reviews + : CI/CD pipelines + : Security audits + + section Expert Mastery (1 month) + Platform Expertise: Advanced Chrome APIs + : Performance optimization + : Architecture patterns + : Open source contribution +``` +### 🛠️ Your Complete Extension Development Toolkit + +After completing this trilogy, you now have mastered: +- **Browser Architecture**: Deep understanding of how extensions integrate with browser systems +- **Performance Profiling**: Ability to identify and fix bottlenecks using developer tools +- **Async Programming**: Modern JavaScript patterns for responsive, non-blocking operations +- **API Integration**: External data fetching with authentication and error handling +- **Visual Design**: Dynamic UI updates and Canvas-based graphics generation +- **Message Passing**: Inter-script communication in extension architectures +- **User Experience**: Loading states, error handling, and intuitive interactions +- **Production Skills**: Testing, debugging, and optimization for real-world deployment + +**Real-World Applications**: Your extension development skills apply directly to: +- **Progressive Web Apps**: Similar architecture and performance patterns +- **Electron Desktop Apps**: Cross-platform applications using web technologies +- **Mobile Hybrid Apps**: Cordova/PhoneGap development using web APIs +- **Enterprise Web Applications**: Complex dashboard and productivity tools +- **Chrome DevTools Extensions**: Advanced developer tooling and debugging +- **Web API Integration**: Any application that communicates with external services + +**Professional Impact**: You can now: +- **Build** production-ready browser extensions from concept to deployment +- **Optimize** web application performance using industry-standard profiling tools +- **Architect** scalable systems with proper separation of concerns +- **Debug** complex async operations and cross-context communication +- **Contribute** to open source extension projects and browser standards + +**Next Level Opportunities**: +- **Chrome Web Store Developer**: Publish extensions for millions of users +- **Web Performance Engineer**: Specialize in optimization and user experience +- **Browser Platform Developer**: Contribute to browser engine development +- **Extension Framework Creator**: Build tools that help other developers +- **Developer Relations**: Share knowledge through teaching and content creation + +🌟 **Achievement Unlocked**: You've built a complete, functional browser extension that demonstrates professional development practices and modern web standards! ## Assignment @@ -170,5 +581,7 @@ Investigate how browsers measure web performance by exploring the performance ta --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/5-browser-extension/3-background-tasks-and-performance/assignment.md b/translations/en/5-browser-extension/3-background-tasks-and-performance/assignment.md index 395340cfd..ecf96fd16 100644 --- a/translations/en/5-browser-extension/3-background-tasks-and-performance/assignment.md +++ b/translations/en/5-browser-extension/3-background-tasks-and-performance/assignment.md @@ -1,23 +1,100 @@ - # Analyze a site for performance -Provide a detailed report of a website, highlighting areas where performance issues exist. Examine why the site is slow and suggest ways to improve its speed. Don't rely solely on browser tools; research additional tools that can enhance your report. +## Assignment Overview + +Performance analysis is a critical skill for modern web developers. In this assignment, you'll conduct a comprehensive performance audit of a real website, using both browser-based tools and third-party services to identify bottlenecks and propose optimization strategies. + +Your task is to provide a detailed performance report that demonstrates your understanding of web performance principles and your ability to use professional analysis tools effectively. + +## Assignment Instructions + +**Choose a website** for analysis - select one of the following options: +- A popular website you use frequently (news site, social media, e-commerce) +- An open-source project website (GitHub pages, documentation sites) +- A local business website or portfolio site +- Your own project or previous coursework + +**Conduct multi-tool analysis** using at least three different approaches: +- **Browser DevTools** - Use Chrome/Edge Performance tab for detailed profiling +- **Online auditing tools** - Try Lighthouse, GTmetrix, or WebPageTest +- **Network analysis** - Examine resource loading, file sizes, and request patterns + +**Document your findings** in a comprehensive report that includes: + +### Performance Metrics Analysis +- **Load time measurements** from multiple tools and perspectives +- **Core Web Vitals** scores (LCP, FID, CLS) and their implications +- **Resource breakdown** showing which assets contribute most to load time +- **Network waterfall analysis** identifying blocking resources + +### Problem Identification +- **Specific performance bottlenecks** with supporting data +- **Root cause analysis** explaining why each issue occurs +- **User impact assessment** describing how problems affect real users +- **Priority ranking** of issues based on severity and fixing difficulty + +### Optimization Recommendations +- **Specific, actionable improvements** with expected impact +- **Implementation strategies** for each recommended change +- **Modern best practices** that could be applied (lazy loading, compression, etc.) +- **Tools and techniques** for ongoing performance monitoring + +## Research Requirements + +**Don't rely only on browser tools** - expand your analysis using: + +**Third-party auditing services:** +- [Google Lighthouse](https://developers.google.com/web/tools/lighthouse) - Comprehensive audits +- [GTmetrix](https://gtmetrix.com/) - Performance and optimization insights +- [WebPageTest](https://www.webpagetest.org/) - Real-world testing conditions +- [Pingdom](https://tools.pingdom.com/) - Global performance monitoring + +**Specialized analysis tools:** +- [Bundle Analyzer](https://bundlephobia.com/) - JavaScript bundle size analysis +- [Image optimization tools](https://squoosh.app/) - Asset optimization opportunities +- [Security headers analysis](https://securityheaders.com/) - Security performance impact + +## Deliverables Format + +Create a professional report (2-3 pages) that includes: + +1. **Executive Summary** - Key findings and recommendations overview +2. **Methodology** - Tools used and testing approach +3. **Current Performance Assessment** - Baseline metrics and measurements +4. **Issues Identified** - Detailed problem analysis with supporting data +5. **Recommendations** - Prioritized improvement strategies +6. **Implementation Roadmap** - Step-by-step optimization plan + +**Include visual evidence:** +- Screenshots of performance tools and metrics +- Charts or graphs showing performance data +- Before/after comparisons where possible +- Network waterfall charts and resource breakdowns ## Rubric -| Criteria | Exemplary | Adequate | Needs Improvement | -| -------- | ---------------------------------------------------------------------------------------------------------- | --------------------------- | ----------------------------- | -| | A report is presented with details drawn not only from browser tools but from 3rd party tools if available | A basic report is presented | A minimal report is presented | +| Criteria | Exemplary (90-100%) | Adequate (70-89%) | Needs Improvement (50-69%) | +| -------- | ------------------- | ----------------- | -------------------------- | +| **Analysis Depth** | Comprehensive analysis using 4+ tools with detailed metrics, root cause analysis, and user impact assessment | Good analysis using 3 tools with clear metrics and basic problem identification | Basic analysis using 2 tools with limited depth and minimal problem identification | +| **Tool Diversity** | Uses browser tools + 3+ third-party services with comparative analysis and insights from each | Uses browser tools + 2 third-party services with some comparative analysis | Uses browser tools + 1 third-party service with limited comparison | +| **Problem Identification** | Identifies 5+ specific performance issues with detailed root cause analysis and quantified impact | Identifies 3-4 performance issues with good analysis and some impact measurement | Identifies 1-2 performance issues with basic analysis | +| **Recommendations** | Provides specific, actionable recommendations with implementation details, expected impact, and modern best practices | Provides good recommendations with some implementation guidance and expected outcomes | Provides basic recommendations with limited implementation details | +| **Professional Presentation** | Well-organized report with clear structure, visual evidence, executive summary, and professional formatting | Good organization with some visual evidence and clear structure | Basic organization with minimal visual evidence | + +## Learning Outcomes + +By completing this assignment, you will demonstrate your ability to: +- **Apply** professional performance analysis tools and methodologies +- **Identify** performance bottlenecks using data-driven analysis +- **Analyze** the relationship between code quality and user experience +- **Recommend** specific, actionable optimization strategies +- **Communicate** technical findings in a professional format + +This assignment reinforces the performance concepts learned in the lesson while building practical skills you'll use throughout your web development career. --- + **Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the definitive source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/5-browser-extension/README.md b/translations/en/5-browser-extension/README.md index aa01000d7..c26263f27 100644 --- a/translations/en/5-browser-extension/README.md +++ b/translations/en/5-browser-extension/README.md @@ -1,12 +1,3 @@ - # Building a browser extension Creating browser extensions is an enjoyable and engaging way to explore app performance while developing a unique type of web asset. This module includes lessons on how browsers function, how to deploy a browser extension, how to create a form, interact with an API, utilize local storage, and assess and enhance your website's performance. @@ -23,7 +14,7 @@ Users can manually activate this extension by entering an API key and region cod ### Credits -![a green browser extension](../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![a green browser extension](../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Credits diff --git a/translations/en/5-browser-extension/solution/README.md b/translations/en/5-browser-extension/solution/README.md index 188ce0728..a4a73ca0c 100644 --- a/translations/en/5-browser-extension/solution/README.md +++ b/translations/en/5-browser-extension/solution/README.md @@ -1,17 +1,8 @@ - # Carbon Trigger Browser Extension: Completed Code Using tmrow's CO2 Signal API to monitor electricity consumption, create a browser extension that provides a reminder directly in your browser about the intensity of electricity usage in your region. Using this extension on the fly can help you make informed decisions about your activities based on this data. -![extension screenshot](../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![extension screenshot](../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Getting Started @@ -31,7 +22,7 @@ npm run build To install on Edge, open the 'three dot' menu in the top right corner of the browser to access the Extensions panel. From there, select 'Load Unpacked' to add a new extension. When prompted, open the 'dist' folder, and the extension will load. To use it, you will need an API key for CO2 Signal's API ([get one here via email](https://www.co2signal.com/) - enter your email in the box on this page) and the [code for your region](http://api.electricitymap.org/v3/zones) corresponding to the [Electricity Map](https://www.electricitymap.org/map) (for example, in Boston, I use 'US-NEISO'). -![installing](../../../../translated_images/en/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.png) +![installing](../../../../translated_images/en/install-on-edge.78634f02842c4828.webp) Once you input the API key and region into the extension interface, the colored dot in the browser extension bar will update to reflect your region's energy usage. It will also provide guidance on which energy-intensive activities might be suitable for you to undertake. The idea for this 'dot' system was inspired by the [Energy Lollipop extension](https://energylollipop.com/) for California emissions. diff --git a/translations/en/5-browser-extension/solution/translation/README.es.md b/translations/en/5-browser-extension/solution/translation/README.es.md index cbd3d98a6..ebaaaf6b7 100644 --- a/translations/en/5-browser-extension/solution/translation/README.es.md +++ b/translations/en/5-browser-extension/solution/translation/README.es.md @@ -1,12 +1,3 @@ - # Carbon Trigger Browser Extension: Complete Code Using tmrow's CO2 signal API to track electricity usage, create a browser extension so you can have a direct reminder in your browser about your region's electricity consumption. Using this ad hoc extension will help you make decisions about your activities based on this information. diff --git a/translations/en/5-browser-extension/solution/translation/README.fr.md b/translations/en/5-browser-extension/solution/translation/README.fr.md index c6f3aaea1..fff037d4f 100644 --- a/translations/en/5-browser-extension/solution/translation/README.fr.md +++ b/translations/en/5-browser-extension/solution/translation/README.fr.md @@ -1,17 +1,8 @@ - # Carbon Trigger Browser Extension: Completed Code Using the CO2 Signal API from tmrow to monitor electricity consumption, create a browser extension so you can get a direct reminder in your browser about the electricity usage in your region. Using this ad hoc extension will help you make informed decisions about your activities based on this information. -![extension screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![extension screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Getting Started @@ -31,7 +22,7 @@ npm run build To install on Edge, use the 'three dots' menu in the top-right corner of the browser to find the Extensions panel. From there, select 'Load unpacked extension' to load a new extension. Open the 'dist' folder when prompted, and the extension will load. To use it, you will need an API key for the CO2 Signal API ([get one here via email](https://www.co2signal.com/) - enter your email in the box on this page) and the [code for your region](http://api.electricitymap.org/v3/zones) corresponding to the [Electricity Map](https://www.electricitymap.org/map) (for Boston, for example, I use 'US-NEISO'). -![installation](../../../../../translated_images/en/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.png) +![installation](../../../../../translated_images/en/install-on-edge.78634f02842c4828.webp) Once the API key and region are entered in the extension interface, the colored dot in the browser's extension bar should change to reflect your region's energy consumption and give you an indicator of energy-intensive activities that might be appropriate to perform. The concept behind this 'dot' system was inspired by the [Energy Lollipop extension](https://energylollipop.com/) for California emissions. diff --git a/translations/en/5-browser-extension/solution/translation/README.hi.md b/translations/en/5-browser-extension/solution/translation/README.hi.md index d3d669f08..eabc3599f 100644 --- a/translations/en/5-browser-extension/solution/translation/README.hi.md +++ b/translations/en/5-browser-extension/solution/translation/README.hi.md @@ -1,17 +1,8 @@ - # Carbon Trigger Browser Extension: Completed Code Using tmrow's CO2 Signal API to track electricity usage, this browser extension provides a reminder about how carbon-intensive the electricity in your area is while you're browsing. By using this extension, you can make informed decisions about your activities based on this information. -![Extension Screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![Extension Screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Getting Started @@ -31,7 +22,7 @@ npm run build To install on Edge, use the 'three dots' menu in the top-right corner of the browser to find the Extensions panel. From there, select 'Load unpacked' to load a new extension. When prompted, open the 'dist' folder, and the extension will load. To use it, you will need an API key for CO2 Signal ([get it here via email](https://www.co2signal.com/) by entering your email in the box on that page) and [the code for your region](http://api.electricitymap.org/v3/zones) from [Electricity Map](https://www.electricitymap.org/map) (for example, in Boston, I use 'US-NEISO'). -![Installing](../../../../../translated_images/en/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.png) +![Installing](../../../../../translated_images/en/install-on-edge.78634f02842c4828.webp) Once the API key and region are entered into the extension interface, the colored dot in the browser extension bar should change to reflect the energy usage in your area and provide an indicator of whether energy-intensive activities are appropriate for your performance. The concept behind this 'dot' system was inspired by the [Energy Lollipop Extension](https://energylollipop.com/) for California emissions. diff --git a/translations/en/5-browser-extension/solution/translation/README.it.md b/translations/en/5-browser-extension/solution/translation/README.it.md index c2123fb9a..a0a06a408 100644 --- a/translations/en/5-browser-extension/solution/translation/README.it.md +++ b/translations/en/5-browser-extension/solution/translation/README.it.md @@ -1,17 +1,8 @@ - # Carbon Trigger Browser Extension: Code to Get Started We will use tmrow's CO2 Signal API to monitor electricity usage and create a browser extension that provides a direct reminder in your browser about the electricity intensity in your region. Using this custom extension will help you evaluate your activities based on this information. -![screenshot of the extension](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![screenshot of the extension](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Getting Started @@ -31,7 +22,7 @@ npm run build To install on Edge, use the "three dots" menu in the top-right corner of the browser to find the Extensions panel. If not already enabled, turn on Developer Mode (bottom left). Select "Load unpacked" to load a new extension. Open the "dist" folder when prompted, and the extension will be loaded. To use it, you will need an API key for the CO2 Signal API (you can [get one here via email](https://www.co2signal.com/) - enter your email in the box on this page) and the [code for your region](http://api.electricitymap.org/v3/zones) corresponding to the [electricity map](https://www.electricitymap.org/map) (for example, in Boston, "US-NEISO"). -![installation](../../../../../translated_images/en/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.png) +![installation](../../../../../translated_images/en/install-on-edge.78634f02842c4828.webp) Once the API key and region are entered in the extension interface, the colored dot in the browser's extension bar should change to reflect your region's energy usage and provide a pointer on which high-energy activities would be appropriate to perform. The concept behind this "dot" system was inspired by the [Energy Lollipop extension](https://energylollipop.com/) for California emissions. diff --git a/translations/en/5-browser-extension/solution/translation/README.ja.md b/translations/en/5-browser-extension/solution/translation/README.ja.md index d1544e973..23c1e1c80 100644 --- a/translations/en/5-browser-extension/solution/translation/README.ja.md +++ b/translations/en/5-browser-extension/solution/translation/README.ja.md @@ -1,17 +1,8 @@ - # Carbon Trigger Browser Extension: Completed Code Using tmrow's CO2 Signal API, this browser extension tracks electricity usage in your area and displays it as a reminder directly in your browser. By using this extension on an ad hoc basis, you can make decisions about your activities based on this information. -![extension screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![extension screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Getting Started @@ -31,7 +22,7 @@ npm run build To install it on Edge, find the "Extensions" panel from the "three dots" menu in the top-right corner of the browser. From there, select "Load Unpacked" to load the new extension. When prompted, open the "dist" folder, and the extension will be loaded. To use it, you'll need an API key for the CO2 Signal API ([get one here via email](https://www.co2signal.com/) - enter your email in the box on this page) and the [code for your region](http://api.electricitymap.org/v3/zones) corresponding to the [Electricity Map](https://www.electricitymap.org/map) (for example, in Boston, you would use 'US-NEISO'). -![installing](../../../../../translated_images/en/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.png) +![installing](../../../../../translated_images/en/install-on-edge.78634f02842c4828.webp) Once you input the API key and region into the extension interface, the colored dot displayed in your browser's extension bar will change to reflect your area's energy usage. This helps indicate whether it's a good time to engage in activities that require energy. The concept for this "dot" system was inspired by the [Energy Lollipop extension](https://energylollipop.com/) for California emissions. diff --git a/translations/en/5-browser-extension/solution/translation/README.ms.md b/translations/en/5-browser-extension/solution/translation/README.ms.md index 4cab9010b..934bcbc7c 100644 --- a/translations/en/5-browser-extension/solution/translation/README.ms.md +++ b/translations/en/5-browser-extension/solution/translation/README.ms.md @@ -1,17 +1,8 @@ - # Carbon Trigger Browser Extension: Complete Code Using the CO2 Signal API from tmrow to monitor electricity usage, build a browser extension that alerts you in your browser about the intensity of electricity consumption in your region. This extension can help you make informed decisions about your activities based on this information. -![browser extension screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![browser extension screenshot](../../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Getting Started @@ -31,7 +22,7 @@ npm run build To install it on Edge, use the 'three dots' menu in the top-right corner of the browser to find the Extensions panel. From there, select 'Load Unpacked' to load a new extension. Open the 'dist' folder when prompted, and the extension will be loaded. To use it, you’ll need an API key for the CO2 Signal API ([get one here via email](https://www.co2signal.com/) - enter your email in the box on this page) and [the code for your region](http://api.electricitymap.org/v3/zones) corresponding to the [Electricity Map](https://www.electricitymap.org/map) (in Boston, for example, I use 'US-NEISO'). -![downloading](../../../../../translated_images/en/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.png) +![downloading](../../../../../translated_images/en/install-on-edge.78634f02842c4828.webp) Once the API key and region are entered into the extension interface, the colored dot in the browser extension bar will change to reflect your region's energy usage and provide guidance on heavy activities that are appropriate for you to undertake. The concept behind this 'dot' system was inspired by [the Energy Lollipop browser extension](https://energylollipop.com/) for California emissions. diff --git a/translations/en/5-browser-extension/start/README.md b/translations/en/5-browser-extension/start/README.md index 63eeb8a42..00bb41c4a 100644 --- a/translations/en/5-browser-extension/start/README.md +++ b/translations/en/5-browser-extension/start/README.md @@ -1,17 +1,8 @@ - # Carbon Trigger Browser Extension: Starter Code Using tmrow's CO2 Signal API to monitor electricity usage, create a browser extension that provides a reminder directly in your browser about the intensity of electricity usage in your region. Using this extension on the fly can help you make informed decisions about your activities based on this data. -![extension screenshot](../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3875e1bc9405edd45a3d2e02963e48900adb91926a62a5807.png) +![extension screenshot](../../../../translated_images/en/extension-screenshot.0e7f5bfa110e92e3.webp) ## Getting Started @@ -31,7 +22,7 @@ npm run build To install on Edge, open the 'three dot' menu in the top right corner of the browser to access the Extensions panel. From there, select 'Load Unpacked' to add a new extension. When prompted, open the 'dist' folder, and the extension will load. To use it, you’ll need an API key for CO2 Signal's API ([request one here via email](https://www.co2signal.com/) - enter your email in the box on this page) and the [region code](http://api.electricitymap.org/v3/zones) corresponding to the [Electricity Map](https://www.electricitymap.org/map) (for example, in Boston, I use 'US-NEISO'). -![installing](../../../../translated_images/en/install-on-edge.78634f02842c48283726c531998679a6f03a45556b2ee99d8ff231fe41446324.png) +![installing](../../../../translated_images/en/install-on-edge.78634f02842c4828.webp) Once you input the API key and region into the extension interface, the colored dot in the browser extension bar will update to reflect your region's energy usage. It will also provide guidance on which energy-intensive activities might be suitable for you to undertake. The idea for this 'dot' system was inspired by the [Energy Lollipop extension](https://energylollipop.com/) for California emissions. diff --git a/translations/en/6-space-game/1-introduction/README.md b/translations/en/6-space-game/1-introduction/README.md index 54e75fdc2..e965583f8 100644 --- a/translations/en/6-space-game/1-introduction/README.md +++ b/translations/en/6-space-game/1-introduction/README.md @@ -1,50 +1,133 @@ - # Build a Space Game Part 1: Introduction -![video](../../../../6-space-game/images/pewpew.gif) - +```mermaid +journey + title Your Game Development Journey + section Foundation + Learn game architecture: 3: Student + Understand inheritance: 4: Student + Explore composition: 4: Student + section Communication + Build pub/sub system: 4: Student + Design event flow: 5: Student + Connect components: 5: Student + section Application + Create game objects: 5: Student + Implement patterns: 5: Student + Plan game structure: 5: Student +``` +![Space game animation showing gameplay](../../../../6-space-game/images/pewpew.gif) + +Just like NASA's mission control coordinates multiple systems during a space launch, we're going to build a space game that demonstrates how different parts of a program can work together seamlessly. While creating something you can actually play, you'll learn essential programming concepts that apply to any software project. + +We'll explore two fundamental approaches to organizing code: inheritance and composition. These aren't just academic concepts – they're the same patterns that power everything from video games to banking systems. We'll also implement a communication system called pub/sub that works like the communication networks used in spacecraft, allowing different components to share information without creating dependencies. + +By the end of this series, you'll understand how to build applications that can scale and evolve – whether you're developing games, web applications, or any other software system. + +```mermaid +mindmap + root((Game Architecture)) + Object Organization + Inheritance + Composition + Class Hierarchies + Behavior Mixing + Communication Patterns + Pub/Sub System + Event Emitters + Message Passing + Loose Coupling + Game Objects + Properties (x, y) + Behaviors (move, collide) + Lifecycle Management + State Management + Design Patterns + Factory Functions + Observer Pattern + Component System + Event-Driven Architecture + Scalability + Modular Design + Maintainable Code + Testing Strategies + Performance Optimization +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/29) -### Inheritance and Composition in game development +## Inheritance and Composition in Game Development -In earlier lessons, you didn’t need to worry much about the design architecture of the apps you built, as the projects were small in scope. However, as your applications grow in size and complexity, architectural decisions become more important. There are two major approaches to building larger applications in JavaScript: *composition* and *inheritance*. Both have their advantages and disadvantages, but let’s explore them in the context of a game. +As projects grow in complexity, code organization becomes critical. What begins as a simple script can become difficult to maintain without proper structure – much like how the Apollo missions required careful coordination between thousands of components. -✅ One of the most famous programming books ever written is about [design patterns](https://en.wikipedia.org/wiki/Design_Patterns). +We'll explore two fundamental approaches for organizing code: inheritance and composition. Each has distinct advantages, and understanding both helps you choose the right approach for different situations. We'll demonstrate these concepts through our space game, where heroes, enemies, power-ups, and other objects must interact efficiently. -In a game, you have `game objects`, which are objects that exist on the screen. This means they have a location on a Cartesian coordinate system, defined by `x` and `y` coordinates. As you develop a game, you’ll notice that all your game objects share some standard properties, common to every game you create. These include: +✅ One of the most famous programming books ever written has to do with [design patterns](https://en.wikipedia.org/wiki/Design_Patterns). -- **location-based**: Most, if not all, game elements are location-based. This means they have an `x` and `y` coordinate. -- **movable**: These are objects that can move to a new location. Typically, this includes heroes, monsters, or NPCs (non-player characters), but not static objects like trees. -- **self-destructing**: These objects exist for a limited time before marking themselves for deletion. This is often represented by a `dead` or `destroyed` boolean that signals to the game engine that the object should no longer be rendered. -- **cool-down**: 'Cool-down' is a common property for short-lived objects. For example, a piece of text or a graphical effect like an explosion that should only appear for a few milliseconds. +In any game, you have `game objects` – the interactive elements that populate your game world. Heroes, enemies, power-ups, and visual effects are all game objects. Each exists at specific screen coordinates using `x` and `y` values, similar to plotting points on a coordinate plane. + +Despite their visual differences, these objects often share fundamental behaviors: + +- **They exist somewhere** – Every object has x and y coordinates so the game knows where to draw it +- **Many can move around** – Heroes run, enemies chase, bullets fly across the screen +- **They have a lifespan** – Some stick around forever, others (like explosions) appear briefly and vanish +- **They react to stuff** – When things collide, power-ups get collected, health bars update ✅ Think about a game like Pac-Man. Can you identify the four object types listed above in this game? -### Expressing behavior +```mermaid +classDiagram + class GameObject { + +x: number + +y: number + +type: string + +exists_somewhere() + } + + class MovableObject { + +moveTo(x, y) + +can_move_around() + } + + class TemporaryObject { + +lifespan: number + +has_lifespan() + } + + class InteractiveObject { + +onCollision() + +reacts_to_stuff() + } + + GameObject <|-- MovableObject + GameObject <|-- TemporaryObject + GameObject <|-- InteractiveObject + + MovableObject <|-- Hero + MovableObject <|-- Enemy + MovableObject <|-- Bullet + + TemporaryObject <|-- PowerUp + TemporaryObject <|-- Explosion + + InteractiveObject <|-- Collectible + InteractiveObject <|-- Obstacle +``` +### Expressing Behavior Through Code -The properties described above represent behaviors that game objects can have. So how do we encode these behaviors? We can express them as methods associated with either classes or objects. +Now that you understand the common behaviors game objects share, let's explore how to implement these behaviors in JavaScript. You can express object behavior through methods attached to either classes or individual objects, and there are several approaches to choose from. -**Classes** +**The Class-Based Approach** -One approach is to use `classes` along with `inheritance` to add specific behaviors to a class. +Classes and inheritance provide a structured approach to organizing game objects. Like the taxonomic classification system developed by Carl Linnaeus, you start with a base class containing common properties, then create specialized classes that inherit these fundamentals while adding specific capabilities. -✅ Inheritance is an important concept to understand. Learn more in [MDN's article about inheritance](https://developer.mozilla.org/docs/Web/JavaScript/Inheritance_and_the_prototype_chain). +✅ Inheritance is an important concept to understand. Learn more on [MDN's article about inheritance](https://developer.mozilla.org/docs/Web/JavaScript/Inheritance_and_the_prototype_chain). -In code, a game object might look like this: +Here's how you can implement game objects using classes and inheritance: ```javascript - -//set up the class GameObject +// Step 1: Create the base GameObject class class GameObject { constructor(x, y, type) { this.x = x; @@ -52,173 +135,390 @@ class GameObject { this.type = type; } } +``` + +**Let's break this down step by step:** +- We're creating a basic template that every game object can use +- The constructor saves where the object is (`x`, `y`) and what kind of thing it is +- This becomes the foundation that all your game objects will build on -//this class will extend the GameObject's inherent class properties +```javascript +// Step 2: Add movement capability through inheritance class Movable extends GameObject { - constructor(x,y, type) { - super(x,y, type) + constructor(x, y, type) { + super(x, y, type); // Call parent constructor } -//this movable object can be moved on the screen + // Add the ability to move to a new position moveTo(x, y) { this.x = x; this.y = y; } } +``` + +**In the above, we've:** +- **Extended** the GameObject class to add movement functionality +- **Called** the parent constructor using `super()` to initialize inherited properties +- **Added** a `moveTo()` method that updates the object's position -//this is a specific class that extends the Movable class, so it can take advantage of all the properties that it inherits +```javascript +// Step 3: Create specific game object types class Hero extends Movable { - constructor(x,y) { - super(x,y, 'Hero') + constructor(x, y) { + super(x, y, 'Hero'); // Set type automatically } } -//this class, on the other hand, only inherits the GameObject properties class Tree extends GameObject { - constructor(x,y) { - super(x,y, 'Tree') + constructor(x, y) { + super(x, y, 'Tree'); // Trees don't need movement } } -//a hero can move... -const hero = new Hero(); -hero.moveTo(5,5); +// Step 4: Use your game objects +const hero = new Hero(0, 0); +hero.moveTo(5, 5); // Hero can move! -//but a tree cannot -const tree = new Tree(); +const tree = new Tree(10, 15); +// tree.moveTo() would cause an error - trees can't move ``` -✅ Take a few minutes to imagine how a Pac-Man character (like Inky, Pinky, or Blinky) could be written in JavaScript. +**Understanding these concepts:** +- **Creates** specialized object types that inherit appropriate behaviors +- **Demonstrates** how inheritance allows selective feature inclusion +- **Shows** that heroes can move while trees remain stationary +- **Illustrates** how the class hierarchy prevents inappropriate actions + +✅ Take a few minutes to re-envision a Pac-Man hero (Inky, Pinky or Blinky, for example) and how it would be written in JavaScript. -**Composition** +**The Composition Approach** -Another way to handle object inheritance is through *Composition*. In this approach, objects express their behavior like this: +Composition follows a modular design philosophy, similar to how engineers design spacecraft with interchangeable components. Instead of inheriting from a parent class, you combine specific behaviors to create objects with exactly the functionality they need. This approach offers flexibility without rigid hierarchical constraints. ```javascript -//create a constant gameObject +// Step 1: Create base behavior objects const gameObject = { x: 0, y: 0, type: '' }; -//...and a constant movable const movable = { moveTo(x, y) { this.x = x; this.y = y; } -} -//then the constant movableObject is composed of the gameObject and movable constants -const movableObject = {...gameObject, ...movable}; +}; +``` -//then create a function to create a new Hero who inherits the movableObject properties +**Here's what this code does:** +- **Defines** a base `gameObject` with position and type properties +- **Creates** a separate `movable` behavior object with movement functionality +- **Separates** concerns by keeping position data and movement logic independent + +```javascript +// Step 2: Compose objects by combining behaviors +const movableObject = { ...gameObject, ...movable }; + +// Step 3: Create factory functions for different object types function createHero(x, y) { return { ...movableObject, x, y, type: 'Hero' - } + }; } -//...and a static object that inherits only the gameObject properties + function createStatic(x, y, type) { return { - ...gameObject + ...gameObject, x, y, type - } + }; } -//create the hero and move it -const hero = createHero(10,10); -hero.moveTo(5,5); -//and create a static tree which only stands around -const tree = createStatic(0,0, 'Tree'); ``` -**Which pattern should I use?** +**In the above, we've:** +- **Combined** base object properties with movement behavior using spread syntax +- **Created** factory functions that return customized objects +- **Enabled** flexible object creation without rigid class hierarchies +- **Allowed** objects to have exactly the behaviors they need -The choice is yours. JavaScript supports both paradigms. +```javascript +// Step 4: Create and use your composed objects +const hero = createHero(10, 10); +hero.moveTo(5, 5); // Works perfectly! --- +const tree = createStatic(0, 0, 'Tree'); +// tree.moveTo() is undefined - no movement behavior was composed +``` -Another common pattern in game development addresses the challenge of managing the game’s user experience and performance. +**Key points to remember:** +- **Composes** objects by mixing behaviors rather than inheriting them +- **Provides** more flexibility than rigid inheritance hierarchies +- **Allows** objects to have exactly the features they need +- **Uses** modern JavaScript spread syntax for clean object combination +``` -## Pub/sub pattern +**Which Pattern Should You Choose?** + +**Which Pattern Should You Choose?** + +```mermaid +quadrantChart + title Code Organization Patterns + x-axis Simple --> Complex + y-axis Rigid --> Flexible + quadrant-1 Advanced Composition + quadrant-2 Hybrid Approaches + quadrant-3 Basic Inheritance + quadrant-4 Modern Composition + + Class Inheritance: [0.3, 0.2] + Interface Implementation: [0.6, 0.4] + Mixin Patterns: [0.7, 0.7] + Pure Composition: [0.8, 0.9] + Factory Functions: [0.5, 0.8] + Prototype Chain: [0.4, 0.3] +``` + +> 💡 **Pro Tip**: Both patterns have their place in modern JavaScript development. Classes work well for clearly defined hierarchies, while composition shines when you need maximum flexibility. +> +**Here's when to use each approach:** +- **Choose** inheritance when you have clear "is-a" relationships (a Hero *is-a* Movable object) +- **Select** composition when you need "has-a" relationships (a Hero *has* movement abilities) +- **Consider** your team's preferences and project requirements +- **Remember** that you can mix both approaches in the same application + +### 🔄 **Pedagogical Check-in** +**Object Organization Understanding**: Before moving to communication patterns, ensure you can: +- ✅ Explain the difference between inheritance and composition +- ✅ Identify when to use classes vs factory functions +- ✅ Understand how the `super()` keyword works in inheritance +- ✅ Recognize the benefits of each approach for game development + +**Quick Self-Test**: How would you create a Flying Enemy that can both move and fly? +- **Inheritance approach**: `class FlyingEnemy extends Movable` +- **Composition approach**: `{ ...movable, ...flyable, ...gameObject }` + +**Real-World Connection**: These patterns appear everywhere: +- **React Components**: Props (composition) vs class inheritance +- **Game Engines**: Entity-component systems use composition +- **Mobile Apps**: UI frameworks often use inheritance hierarchies + +## Communication Patterns: The Pub/Sub System + +As applications grow complex, managing communication between components becomes challenging. The publish-subscribe pattern (pub/sub) solves this problem using principles similar to radio broadcasting – one transmitter can reach multiple receivers without knowing who's listening. + +Consider what happens when a hero takes damage: the health bar updates, sound effects play, visual feedback appears. Rather than coupling the hero object directly to these systems, pub/sub allows the hero to broadcast a "damage taken" message. Any system that needs to respond can subscribe to this message type and react accordingly. + +✅ **Pub/Sub** stands for 'publish-subscribe' + +```mermaid +flowchart TD + A[Hero Takes Damage] --> B[Publish: HERO_DAMAGED] + B --> C[Event System] + + C --> D[Health Bar Subscriber] + C --> E[Sound System Subscriber] + C --> F[Visual Effects Subscriber] + C --> G[Achievement System Subscriber] + + D --> H[Update Health Display] + E --> I[Play Damage Sound] + F --> J[Show Red Flash] + G --> K[Check Survival Achievements] + + style A fill:#ffebee + style B fill:#e1f5fe + style C fill:#e8f5e8 + style H fill:#fff3e0 + style I fill:#fff3e0 + style J fill:#fff3e0 + style K fill:#fff3e0 +``` +### Understanding the Pub/Sub Architecture -✅ Pub/Sub stands for 'publish-subscribe' +The pub/sub pattern keeps different parts of your application loosely coupled, meaning they can work together without being directly dependent on each other. This separation makes your code more maintainable, testable, and flexible to changes. -This pattern is based on the idea that different parts of your application shouldn’t need to know about each other. Why is this important? It makes it easier to understand the overall system and simplifies making changes to behavior when needed. Here’s how it works: +**The key players in pub/sub:** +- **Messages** – Simple text labels like `'PLAYER_SCORED'` that describe what happened (plus any extra info) +- **Publishers** – The objects that shout out "Something happened!" to anyone who's listening +- **Subscribers** – The objects that say "I care about that event" and react when it happens +- **Event System** – The middleman that makes sure messages get to the right listeners -- **message**: A message is typically a text string, sometimes accompanied by an optional payload (data that provides additional context about the message). For example, a common message in a game might be `KEY_PRESSED_ENTER`. -- **publisher**: This component *publishes* a message and sends it to all subscribers. -- **subscriber**: This component *listens* for specific messages and performs a task in response, such as firing a laser. +### Building an Event System -The implementation is relatively small but incredibly powerful. Here’s an example: +Let's create a simple but powerful event system that demonstrates these concepts: ```javascript -//set up an EventEmitter class that contains listeners +// Step 1: Create the EventEmitter class class EventEmitter { constructor() { - this.listeners = {}; + this.listeners = {}; // Store all event listeners } -//when a message is received, let the listener to handle its payload + + // Register a listener for a specific message type on(message, listener) { if (!this.listeners[message]) { this.listeners[message] = []; } this.listeners[message].push(listener); } -//when a message is sent, send it to a listener with some payload + + // Send a message to all registered listeners emit(message, payload = null) { if (this.listeners[message]) { - this.listeners[message].forEach(l => l(message, payload)) + this.listeners[message].forEach(listener => { + listener(message, payload); + }); } } } - ``` -To use the code above, we can create a simple implementation: +**Breaking down what happens here:** +- **Creates** a central event management system using a simple class +- **Stores** listeners in an object organized by message type +- **Registers** new listeners using the `on()` method +- **Broadcasts** messages to all interested listeners using `emit()` +- **Supports** optional data payloads for passing relevant information + +### Putting It All Together: A Practical Example + +Alright, let's see this in action! We'll build a simple movement system that shows how clean and flexible pub/sub can be: ```javascript -//set up a message structure +// Step 1: Define your message types const Messages = { - HERO_MOVE_LEFT: 'HERO_MOVE_LEFT' + HERO_MOVE_LEFT: 'HERO_MOVE_LEFT', + HERO_MOVE_RIGHT: 'HERO_MOVE_RIGHT', + ENEMY_SPOTTED: 'ENEMY_SPOTTED' }; -//invoke the eventEmitter you set up above + +// Step 2: Create your event system and game objects const eventEmitter = new EventEmitter(); -//set up a hero -const hero = createHero(0,0); -//let the eventEmitter know to watch for messages pertaining to the hero moving left, and act on it +const hero = createHero(0, 0); +``` + +**Here's what this code does:** +- **Defines** a constants object to prevent typos in message names +- **Creates** an event emitter instance to handle all communication +- **Initializes** a hero object at the starting position + +```javascript +// Step 3: Set up event listeners (subscribers) eventEmitter.on(Messages.HERO_MOVE_LEFT, () => { - hero.move(5,0); + hero.moveTo(hero.x - 5, hero.y); + console.log(`Hero moved to position: ${hero.x}, ${hero.y}`); }); -//set up the window to listen for the keyup event, specifically if the left arrow is hit, emit a message to move the hero left -window.addEventListener('keyup', (evt) => { - if (evt.key === 'ArrowLeft') { - eventEmitter.emit(Messages.HERO_MOVE_LEFT) - } +eventEmitter.on(Messages.HERO_MOVE_RIGHT, () => { + hero.moveTo(hero.x + 5, hero.y); + console.log(`Hero moved to position: ${hero.x}, ${hero.y}`); }); ``` -In this example, we connect a keyboard event, `ArrowLeft`, to send the `HERO_MOVE_LEFT` message. We then listen for that message and move the `hero` accordingly. The strength of this pattern lies in the fact that the event listener and the hero don’t need to know about each other. You could remap `ArrowLeft` to the `A` key, or even assign a completely different action to `ArrowLeft` by making a few changes to the eventEmitter’s `on` function: +**In the above, we've:** +- **Registered** event listeners that respond to movement messages +- **Updated** the hero's position based on the movement direction +- **Added** console logging to track the hero's position changes +- **Separated** the movement logic from the input handling ```javascript -eventEmitter.on(Messages.HERO_MOVE_LEFT, () => { - hero.move(5,0); +// Step 4: Connect keyboard input to events (publishers) +window.addEventListener('keydown', (event) => { + switch(event.key) { + case 'ArrowLeft': + eventEmitter.emit(Messages.HERO_MOVE_LEFT); + break; + case 'ArrowRight': + eventEmitter.emit(Messages.HERO_MOVE_RIGHT); + break; + } }); ``` -As your game grows in complexity, this pattern remains consistent, keeping your code clean and manageable. It’s highly recommended to adopt this approach. +**Understanding these concepts:** +- **Connects** keyboard input to game events without tight coupling +- **Enables** the input system to communicate with game objects indirectly +- **Allows** multiple systems to respond to the same keyboard events +- **Makes** it easy to change key bindings or add new input methods + +```mermaid +sequenceDiagram + participant User + participant Keyboard + participant EventEmitter + participant Hero + participant SoundSystem + participant Camera + + User->>Keyboard: Presses ArrowLeft + Keyboard->>EventEmitter: emit('HERO_MOVE_LEFT') + EventEmitter->>Hero: Move left 5 pixels + EventEmitter->>SoundSystem: Play footstep sound + EventEmitter->>Camera: Follow hero + + Hero->>Hero: Update position + SoundSystem->>SoundSystem: Play audio + Camera->>Camera: Adjust viewport +``` +> 💡 **Pro Tip**: The beauty of this pattern is flexibility! You can easily add sound effects, screen shake, or particle effects by simply adding more event listeners – no need to modify the existing keyboard or movement code. +> +**Here's why you'll love this approach:** +- Adding new features becomes super easy – just listen for the events you care about +- Multiple things can react to the same event without stepping on each other +- Testing gets way simpler because each piece works independently +- When something breaks, you know exactly where to look + +### Why Pub/Sub Scales Effectively + +The pub/sub pattern maintains simplicity as applications grow in complexity. Whether managing dozens of enemies, dynamic UI updates, or sound systems, the pattern handles increased scale without architectural changes. New features integrate into the existing event system without affecting established functionality. + +> ⚠️ **Common Mistake**: Don't create too many specific message types early on. Start with broad categories and refine them as your game's needs become clearer. +> +**Best practices to follow:** +- **Groups** related messages into logical categories +- **Uses** descriptive names that clearly indicate what happened +- **Keeps** message payloads simple and focused +- **Documents** your message types for team collaboration + +### 🔄 **Pedagogical Check-in** +**Event-Driven Architecture Understanding**: Verify your grasp of the complete system: +- ✅ How does the pub/sub pattern prevent tight coupling between components? +- ✅ Why is it easier to add new features with event-driven architecture? +- ✅ What role does the EventEmitter play in the communication flow? +- ✅ How do message constants prevent bugs and improve maintainability? + +**Design Challenge**: How would you handle these game scenarios with pub/sub? +1. **Enemy dies**: Update score, play sound, spawn power-up, remove from screen +2. **Level complete**: Stop music, show UI, save progress, load next level +3. **Power-up collected**: Enhance abilities, update UI, play effect, start timer + +**Professional Connection**: This pattern appears in: +- **Frontend Frameworks**: React/Vue event systems +- **Backend Services**: Microservice communication +- **Game Engines**: Unity's event system +- **Mobile Development**: iOS/Android notification systems --- -## 🚀 Challenge +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: -Think about how the pub-sub pattern could improve a game. Which parts of the game should emit events, and how should the game respond to them? Use your creativity to imagine a new game and how its components might interact. +**Description:** Create a simple game object system using both inheritance and the pub/sub pattern. You'll implement a basic game where different objects can communicate through events without directly knowing about each other. + +**Prompt:** Create a JavaScript game system with the following requirements: 1) Create a base GameObject class with x, y coordinates and a type property. 2) Create a Hero class that extends GameObject and can move. 3) Create an Enemy class that extends GameObject and can chase the hero. 4) Implement an EventEmitter class for the pub/sub pattern. 5) Set up event listeners so when the hero moves, nearby enemies receive a 'HERO_MOVED' event and update their position to move toward the hero. Include console.log statements to show the communication between objects. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + +## 🚀 Challenge +Consider how the pub-sub pattern can enhance game architecture. Identify which components should emit events and how the system should respond. Design a game concept and map out the communication patterns between its components. ## Post-Lecture Quiz @@ -228,11 +528,126 @@ Think about how the pub-sub pattern could improve a game. Which parts of the gam Learn more about Pub/Sub by [reading about it](https://docs.microsoft.com/azure/architecture/patterns/publisher-subscriber/?WT.mc_id=academic-77807-sagibbon). +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open any HTML5 game online and inspect its code using DevTools +- [ ] Create a simple HTML5 Canvas element and draw a basic shape +- [ ] Try using `setInterval` to create a simple animation loop +- [ ] Explore the Canvas API documentation and try a drawing method + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand game development concepts +- [ ] Set up your game project structure with HTML, CSS, and JavaScript files +- [ ] Create a basic game loop that updates and renders continuously +- [ ] Draw your first game sprites on the canvas +- [ ] Implement basic asset loading for images and sounds + +### 📅 **Your Week-Long Game Creation** +- [ ] Complete the full space game with all planned features +- [ ] Add polished graphics, sound effects, and smooth animations +- [ ] Implement game states (start screen, gameplay, game over) +- [ ] Create a scoring system and player progress tracking +- [ ] Make your game responsive and accessible across devices +- [ ] Share your game online and gather feedback from players + +### 🌟 **Your Month-Long Game Development** +- [ ] Build multiple games exploring different genres and mechanics +- [ ] Learn a game development framework like Phaser or Three.js +- [ ] Contribute to open source game development projects +- [ ] Master advanced game programming patterns and optimization +- [ ] Create a portfolio showcasing your game development skills +- [ ] Mentor others interested in game development and interactive media + +## 🎯 Your Game Development Mastery Timeline + +```mermaid +timeline + title Game Architecture Learning Progression + + section Object Patterns (20 minutes) + Code Organization: Class inheritance + : Composition patterns + : Factory functions + : Behavior mixing + + section Communication Systems (25 minutes) + Event Architecture: Pub/Sub implementation + : Message design + : Event emitters + : Loose coupling + + section Game Object Design (30 minutes) + Entity Systems: Property management + : Behavior composition + : State handling + : Lifecycle management + + section Architecture Patterns (35 minutes) + System Design: Component systems + : Observer pattern + : Command pattern + : State machines + + section Advanced Concepts (45 minutes) + Scalable Architecture: Performance optimization + : Memory management + : Modular design + : Testing strategies + + section Game Engine Concepts (1 week) + Professional Development: Scene graphs + : Asset management + : Rendering pipelines + : Physics integration + + section Framework Mastery (2 weeks) + Modern Game Development: React game patterns + : Canvas optimization + : WebGL basics + : PWA games + + section Industry Practices (1 month) + Professional Skills: Team collaboration + : Code reviews + : Game design patterns + : Performance profiling +``` +### 🛠️ Your Game Architecture Toolkit Summary + +After completing this lesson, you now have: +- **Design Pattern Mastery**: Understanding of inheritance vs composition trade-offs +- **Event-Driven Architecture**: Pub/sub implementation for scalable communication +- **Object-Oriented Design**: Class hierarchies and behavior composition +- **Modern JavaScript**: Factory functions, spread syntax, and ES6+ patterns +- **Scalable Architecture**: Loose coupling and modular design principles +- **Game Development Foundation**: Entity systems and component patterns +- **Professional Patterns**: Industry-standard approaches to code organization + +**Real-World Applications**: These patterns directly apply to: +- **Frontend Frameworks**: React/Vue component architecture and state management +- **Backend Services**: Microservice communication and event-driven systems +- **Mobile Development**: iOS/Android app architecture and notification systems +- **Game Engines**: Unity, Unreal, and web-based game development +- **Enterprise Software**: Event sourcing and distributed system design +- **API Design**: RESTful services and real-time communication + +**Professional Skills Gained**: You can now: +- **Design** scalable software architectures using proven patterns +- **Implement** event-driven systems that handle complex interactions +- **Choose** appropriate code organization strategies for different scenarios +- **Debug** and maintain loosely coupled systems effectively +- **Communicate** technical decisions using industry-standard terminology + +**Next Level**: You're ready to implement these patterns in a real game, explore advanced game development topics, or apply these architectural concepts to web applications! + +🌟 **Achievement Unlocked**: You've mastered fundamental software architecture patterns that power everything from simple games to complex enterprise systems! + ## Assignment [Mock up a game](assignment.md) --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/1-introduction/assignment.md b/translations/en/6-space-game/1-introduction/assignment.md index e298b1861..c9a975e41 100644 --- a/translations/en/6-space-game/1-introduction/assignment.md +++ b/translations/en/6-space-game/1-introduction/assignment.md @@ -1,25 +1,93 @@ - -# Mock up a game +# Mock up a Game: Apply Design Patterns + +## Assignment Overview + +Put your newfound knowledge of design patterns to work by creating a simple game prototype! This assignment will help you practice both architectural patterns (inheritance or composition) and the pub/sub communication system you learned about in the lesson. ## Instructions -Using the code examples from the lesson, create a representation of a game you enjoy. It should be a simple game, but the goal is to use either the class or composition pattern along with the pub/sub pattern to demonstrate how a game might start. Be creative! +Create a simple game representation that demonstrates the design patterns from this lesson. Your game should be functional but doesn't need complex graphics – focus on the underlying architecture and communication patterns. + +### Requirements + +**Choose Your Architecture Pattern:** +- **Option A**: Use class-based inheritance (like the `GameObject` → `Movable` → `Hero` example) +- **Option B**: Use composition (like the factory function approach with mixed behaviors) + +**Implement Communication:** +- **Include** an `EventEmitter` class for pub/sub messaging +- **Set up** at least 2-3 different message types (like `PLAYER_MOVE`, `ENEMY_SPAWN`, `SCORE_UPDATE`) +- **Connect** user input (keyboard/mouse) to game events through the event system + +**Game Elements to Include:** +- At least one player-controlled character +- At least one other game object (enemy, collectible, or environmental element) +- Basic interaction between objects (collision, collection, or communication) + +### Suggested Game Ideas + +**Simple Games to Consider:** +- **Snake Game** – Snake segments follow the head, food spawns randomly +- **Pong Variation** – Paddle responds to input, ball bounces off walls +- **Collector Game** – Player moves around collecting items while avoiding obstacles +- **Tower Defense Basics** – Towers detect and shoot at moving enemies + +### Code Structure Guidelines + +```javascript +// Example starting structure +const Messages = { + // Define your game messages here +}; + +class EventEmitter { + // Your event system implementation +} + +// Choose either class-based OR composition approach +// Class-based example: +class GameObject { /* base properties */ } +class Player extends GameObject { /* player-specific behavior */ } + +// OR Composition example: +const gameObject = { /* base properties */ }; +const movable = { /* movement behavior */ }; +function createPlayer() { /* combine behaviors */ } +``` + +### Testing Your Implementation + +**Verify your code works by:** +- **Testing** that objects move or change when events are triggered +- **Confirming** that multiple objects can respond to the same event +- **Checking** that you can add new behaviors without modifying existing code +- **Ensuring** keyboard/mouse input properly triggers game events + +## Submission Guidelines + +**Your submission should include:** +1. **JavaScript file(s)** with your game implementation +2. **HTML file** to run and test your game (can be simple) +3. **Comments** explaining which pattern you chose and why +4. **Brief documentation** of your message types and what they do ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | ------------------------------------------------------- | ----------------------------------------------------- | --------------------------------------------------- | -| | Three elements are displayed on the screen and interact | Two elements are displayed on the screen and interact | One element is displayed on the screen and interacts | +| Criteria | Exemplary (3 points) | Adequate (2 points) | Needs Improvement (1 point) | +|----------|---------------------|---------------------|------------------------------| +| **Architecture Pattern** | Correctly implements either inheritance OR composition with clear class/object hierarchy | Uses chosen pattern with minor issues or inconsistencies | Attempts to use pattern but implementation has significant problems | +| **Pub/Sub Implementation** | EventEmitter works correctly with multiple message types and proper event flow | Basic pub/sub system works with some event handling | Event system present but doesn't work reliably | +| **Game Functionality** | Three or more interactive elements that communicate through events | Two interactive elements with basic event communication | One element responds to events or basic interaction | +| **Code Quality** | Clean, well-commented code with logical organization and modern JavaScript | Generally well-organized code with adequate comments | Code works but lacks organization or clear commenting | + +**Bonus Points:** +- **Creative game mechanics** that showcase interesting uses of the patterns +- **Multiple input methods** (keyboard AND mouse events) +- **Scalable architecture** that would be easy to extend with new features --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/2-drawing-to-canvas/README.md b/translations/en/6-space-game/2-drawing-to-canvas/README.md index d8b0d81d8..123ec4870 100644 --- a/translations/en/6-space-game/2-drawing-to-canvas/README.md +++ b/translations/en/6-space-game/2-drawing-to-canvas/README.md @@ -1,216 +1,480 @@ - # Build a Space Game Part 2: Draw Hero and Monsters to Canvas +```mermaid +journey + title Your Canvas Graphics Journey + section Foundation + Understand Canvas API: 3: Student + Learn coordinate system: 4: Student + Draw basic shapes: 4: Student + section Image Handling + Load game assets: 4: Student + Handle async loading: 5: Student + Position sprites: 5: Student + section Game Rendering + Create game screen: 5: Student + Build formations: 5: Student + Optimize performance: 4: Student +``` +The Canvas API is one of web development's most powerful features for creating dynamic, interactive graphics right in your browser. In this lesson, we'll transform that blank HTML `` element into a game world filled with heroes and monsters. Think of the canvas as your digital art board where code becomes visual. + +We're building on what you learned in the previous lesson, and now we'll dive into the visual aspects. You'll learn how to load and display game sprites, position elements precisely, and create the visual foundation for your space game. This bridges the gap between static web pages and dynamic, interactive experiences. + +By the end of this lesson, you'll have a complete game scene with your hero ship positioned correctly and enemy formations ready for battle. You'll understand how modern games render graphics in browsers and gain skills to create your own interactive visual experiences. Let's explore canvas graphics and bring your space game to life! + +```mermaid +mindmap + root((Canvas Graphics)) + Canvas Element + HTML5 Feature + 2D Context + Coordinate System + Pixel Control + Drawing Operations + Basic Shapes + Text Rendering + Image Display + Path Drawing + Asset Management + Image Loading + Async Operations + Error Handling + Performance + Game Rendering + Sprite Positioning + Formation Layout + Scene Composition + Frame Updates + Visual Effects + Colors & Styles + Transformations + Animations + Layering +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/31) ## The Canvas -The canvas is an HTML element that starts off empty; it's like a blank sheet of paper. You can add content to it by drawing on it. +So what exactly is this `` element? It's HTML5's solution for creating dynamic graphics and animations in web browsers. Unlike regular images or videos that are static, the canvas gives you pixel-level control over everything that appears on screen. This makes it perfect for games, data visualizations, and interactive art. Think of it as a programmable drawing surface where JavaScript becomes your paintbrush. + +By default, a canvas element looks like a blank, transparent rectangle on your page. But that's where the potential lies! Its real power emerges when you use JavaScript to draw shapes, load images, create animations, and make things respond to user interactions. It's similar to how early computer graphics pioneers at Bell Labs in the 1960s had to program every pixel to create the first digital animations. ✅ Read [more about the Canvas API](https://developer.mozilla.org/docs/Web/API/Canvas_API) on MDN. -Here's how it's typically defined as part of the page's body: +Here's how it's typically declared, as part of the page's body: ```html ``` -In the code above, we are setting the `id`, `width`, and `height`. - -- `id`: This allows you to reference the canvas when you need to interact with it. -- `width`: This defines the width of the canvas. -- `height`: This defines the height of the canvas. - -## Drawing simple geometry - -The canvas uses a Cartesian coordinate system to draw shapes. This means it uses an x-axis and y-axis to determine where things are placed. The position `0,0` is the top-left corner, and the bottom-right corner corresponds to the `width` and `height` of the canvas. - -![the canvas's grid](../../../../translated_images/en/canvas_grid.5f209da785ded492a01ece440e3032afe51efa500cc2308e5ea4252487ceaf0b.png) +**Here's what this code does:** +- **Sets** the `id` attribute so you can reference this specific canvas element in JavaScript +- **Defines** the `width` in pixels to control the canvas's horizontal size +- **Establishes** the `height` in pixels to determine the canvas's vertical dimensions + +## Drawing Simple Geometry + +Now that you know what the canvas element is, let's explore actually drawing on it! The canvas uses a coordinate system that might feel familiar from math class, but there's one important twist specific to computer graphics. + +The canvas uses Cartesian coordinates with an x-axis (horizontal) and y-axis (vertical) to position everything you draw. But here's the key difference: unlike the coordinate system from math class, the origin point `(0,0)` starts at the top-left corner, with x-values increasing as you move right and y-values increasing as you move down. This approach dates back to early computer displays where electron beams scanned from top to bottom, making top-left the natural starting point. + +```mermaid +quadrantChart + title Canvas Coordinate System + x-axis Left --> Right + y-axis Top --> Bottom + quadrant-1 Quadrant 1 + quadrant-2 Quadrant 2 + quadrant-3 Quadrant 3 + quadrant-4 Quadrant 4 + + Origin Point: [0.1, 0.1] + Hero Center: [0.5, 0.8] + Enemy Formation: [0.3, 0.2] + Power-up: [0.7, 0.6] + UI Elements: [0.9, 0.1] +``` +![the canvas's grid](../../../../translated_images/en/canvas_grid.5f209da785ded492.webp) > Image from [MDN](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes) -To draw on the canvas, follow these steps: - -1. **Get a reference** to the canvas element. -2. **Get a reference** to the context object associated with the canvas. -3. **Perform a drawing operation** using the context object. +To draw on the canvas element, you'll follow the same three-step process that forms the foundation of all canvas graphics. Once you do this a few times, it becomes second nature: + +```mermaid +flowchart LR + A[HTML Canvas Element] --> B[Get Canvas Reference] + B --> C[Get 2D Context] + C --> D[Drawing Operations] + + D --> E[Draw Shapes] + D --> F[Draw Text] + D --> G[Draw Images] + D --> H[Apply Styles] + + E --> I[Render to Screen] + F --> I + G --> I + H --> I + + style A fill:#e1f5fe + style C fill:#e8f5e8 + style I fill:#fff3e0 +``` +1. **Get a reference** to your Canvas element from the DOM (just like any other HTML element) +2. **Get the 2D rendering context** – this provides all the drawing methods +3. **Start drawing!** Use the context's built-in methods to create your graphics -The code for these steps typically looks like this: +Here's how this looks in code: ```javascript -// draws a red rectangle -//1. get the canvas reference -canvas = document.getElementById("myCanvas"); +// Step 1: Get the canvas element +const canvas = document.getElementById("myCanvas"); -//2. set the context to 2D to draw basic shapes -ctx = canvas.getContext("2d"); +// Step 2: Get the 2D rendering context +const ctx = canvas.getContext("2d"); -//3. fill it with the color red +// Step 3: Set fill color and draw a rectangle ctx.fillStyle = 'red'; - -//4. and draw a rectangle with these parameters, setting location and size -ctx.fillRect(0,0, 200, 200) // x,y,width, height +ctx.fillRect(0, 0, 200, 200); // x, y, width, height ``` -✅ The Canvas API is primarily designed for 2D graphics, but you can also create 3D graphics on a webpage using the [WebGL API](https://developer.mozilla.org/docs/Web/API/WebGL_API). +**Let's break this down step by step:** +- We **grab** our canvas element using its ID and store it in a variable +- We **get** the 2D rendering context – this is our toolkit full of drawing methods +- We **tell** the canvas we want to fill things with red using the `fillStyle` property +- We **draw** a rectangle starting at the top-left corner (0,0) that's 200 pixels wide and tall -With the Canvas API, you can draw a variety of things, such as: +✅ The Canvas API mostly focuses on 2D shapes, but you can also draw 3D elements to a web site; for this, you might use the [WebGL API](https://developer.mozilla.org/docs/Web/API/WebGL_API). -- **Geometric shapes**: We've already shown how to draw a rectangle, but there are many other shapes you can create. -- **Text**: You can draw text in any font and color you like. -- **Images**: You can display images from assets like `.jpg` or `.png` files. +You can draw all sorts of things with the Canvas API like: -✅ Try it! Now that you know how to draw a rectangle, can you draw a circle on the page? Check out some creative Canvas drawings on CodePen. Here's a [particularly impressive example](https://codepen.io/dissimulate/pen/KrAwx). +- **Geometrical shapes**, we've already showed how to draw a rectangle, but there is much more you can draw. +- **Text**, you can draw a text with any font and color you wish. +- **Images**, you can draw an image based off of an image asset like a .jpg or .png for example. -## Load and draw an image asset +✅ Try it! You know how to draw a rectangle, can you draw a circle to a page? Take a look at some interesting Canvas drawings on CodePen. Here's a [particularly impressive example](https://codepen.io/dissimulate/pen/KrAwx). -To load an image asset, create an `Image` object and set its `src` property. Then, listen for the `load` event to know when the image is ready to use. The code looks like this: +### 🔄 **Pedagogical Check-in** +**Canvas Fundamentals Understanding**: Before moving to image loading, ensure you can: +- ✅ Explain how the canvas coordinate system differs from mathematical coordinates +- ✅ Understand the three-step process for canvas drawing operations +- ✅ Identify what the 2D rendering context provides +- ✅ Describe how fillStyle and fillRect work together -### Load asset +**Quick Self-Test**: How would you draw a blue circle at position (100, 50) with radius 25? +```javascript +ctx.fillStyle = 'blue'; +ctx.beginPath(); +ctx.arc(100, 50, 25, 0, 2 * Math.PI); +ctx.fill(); +``` + +**Canvas Drawing Methods You Now Know**: +- **fillRect()**: Draws filled rectangles +- **fillStyle**: Sets colors and patterns +- **beginPath()**: Starts new drawing paths +- **arc()**: Creates circles and curves + +## Load and Draw an Image Asset + +Drawing basic shapes is useful for getting started, but most games need actual images! Sprites, backgrounds, and textures are what give games their visual appeal. Loading and displaying images on the canvas works differently than drawing geometric shapes, but it's straightforward once you understand the process. + +We need to create an `Image` object, load our image file (this happens asynchronously, meaning "in the background"), and then draw it to the canvas once it's ready. This approach ensures your images display properly without blocking your application while they load. + +```mermaid +sequenceDiagram + participant JS as JavaScript + participant Img as Image Object + participant Server as File Server + participant Canvas as Canvas Context + + JS->>Img: new Image() + JS->>Img: Set src property + Img->>Server: Request image file + Server->>Img: Return image data + Img->>JS: Trigger onload event + JS->>Canvas: drawImage(img, x, y) + Canvas->>Canvas: Render to screen + + Note over JS,Canvas: Async loading prevents UI blocking +``` +### Basic Image Loading ```javascript const img = new Image(); img.src = 'path/to/my/image.png'; img.onload = () => { - // image loaded and ready to be used -} + // Imagen cargada y lista para ser usada + console.log('Image loaded successfully!'); +}; ``` -### Load asset pattern +**Here's what's happening in this code:** +- We **create** a brand new Image object to hold our sprite or texture +- We **tell** it which image file to load by setting the source path +- We **listen** for the load event so we know exactly when the image is ready to use + +### A Better Way to Load Images -It's a good idea to wrap the code above in a reusable structure, so you can easily use it and ensure the image is fully loaded before manipulating it: +Here's a more robust way to handle image loading that professional developers commonly use. We'll wrap the image loading in a Promise-based function – this approach, popularized when JavaScript Promises became standard in ES6, makes your code more organized and handles errors gracefully: ```javascript function loadAsset(path) { - return new Promise((resolve) => { + return new Promise((resolve, reject) => { const img = new Image(); img.src = path; img.onload = () => { - // image loaded and ready to be used resolve(img); - } - }) + }; + img.onerror = () => { + reject(new Error(`Failed to load image: ${path}`)); + }; + }); } -// use like so - -async function run() { - const heroImg = await loadAsset('hero.png') - const monsterImg = await loadAsset('monster.png') +// Modern usage with async/await +async function initializeGame() { + try { + const heroImg = await loadAsset('hero.png'); + const monsterImg = await loadAsset('monster.png'); + // Images are now ready to use + } catch (error) { + console.error('Failed to load game assets:', error); + } } - ``` -To draw game assets on the screen, your code might look like this: +**What we've done here:** +- **Wrapped** all that image loading logic in a Promise so we can handle it better +- **Added** error handling that actually tells us when something goes wrong +- **Used** modern async/await syntax because it's so much cleaner to read +- **Included** try/catch blocks to gracefully handle any loading hiccups + +Once your images are loaded, drawing them to the canvas is actually pretty straightforward: ```javascript -async function run() { - const heroImg = await loadAsset('hero.png') - const monsterImg = await loadAsset('monster.png') - - canvas = document.getElementById("myCanvas"); - ctx = canvas.getContext("2d"); - ctx.drawImage(heroImg, canvas.width/2,canvas.height/2); - ctx.drawImage(monsterImg, 0,0); +async function renderGameScreen() { + try { + // Load game assets + const heroImg = await loadAsset('hero.png'); + const monsterImg = await loadAsset('monster.png'); + + // Get canvas and context + const canvas = document.getElementById("myCanvas"); + const ctx = canvas.getContext("2d"); + + // Draw images to specific positions + ctx.drawImage(heroImg, canvas.width / 2, canvas.height / 2); + ctx.drawImage(monsterImg, 0, 0); + } catch (error) { + console.error('Failed to render game screen:', error); + } } ``` -## Now it's time to start building your game +**Let's walk through this step by step:** +- We **load** both our hero and monster images in the background using await +- We **grab** our canvas element and get that 2D rendering context we need +- We **position** the hero image right in the center using some quick coordinate math +- We **plop** the monster image at the top-left corner to start our enemy formation +- We **catch** any errors that might happen during loading or rendering + +```mermaid +flowchart TD + A[Load Assets] --> B{All Images Loaded?} + B -->|No| C[Show Loading] + B -->|Yes| D[Get Canvas Context] + C --> B + D --> E[Clear Screen] + E --> F[Draw Background] + F --> G[Draw Enemy Formation] + G --> H[Draw Hero Ship] + H --> I[Apply Visual Effects] + I --> J[Render Frame] + + subgraph "Rendering Pipeline" + K[Asset Management] + L[Scene Composition] + M[Drawing Operations] + N[Frame Output] + end + + style A fill:#e1f5fe + style J fill:#e8f5e8 + style I fill:#fff3e0 +``` +## Now It's Time to Start Building Your Game + +Now we'll put everything together to create the visual foundation of your space game. You have a solid understanding of canvas fundamentals and image loading techniques, so this hands-on section will guide you through building a complete game screen with properly positioned sprites. -### What to build +### What to Build -You will create a webpage with a canvas element. The canvas should display a black screen with dimensions `1024x768`. We've provided two images for you: +You will build a web page with a Canvas element. It should render a black screen `1024*768`. We've provided you with two images: -- Hero ship: +- Hero ship - ![Hero ship](../../../../translated_images/en/player.dd24c1afa8c71e9b82b2958946d4bad13308681392d4b5ddcc61a0e818ef8088.png) + ![Hero ship](../../../../translated_images/en/player.dd24c1afa8c71e9b.webp) -- 5x5 monster grid: +- 5*5 monster - ![Monster ship](../../../../translated_images/en/enemyShip.5df2a822c16650c2fb3c06652e8ec8120cdb9122a6de46b9a1a56d54db22657f.png) + ![Monster ship](../../../../translated_images/en/enemyShip.5df2a822c16650c2.webp) ### Recommended steps to start development -Locate the files provided in the `your-work` subfolder. It should contain the following: +Locate the starter files that have been created for you in the `your-work` sub folder. Your project structure should contain: ```bash --| assets - -| enemyShip.png - -| player.png --| index.html --| app.js --| package.json +your-work/ +├── assets/ +│ ├── enemyShip.png +│ └── player.png +├── index.html +├── app.js +└── package.json ``` -Open this folder in Visual Studio Code. Make sure you have a local development environment set up, preferably with Visual Studio Code, NPM, and Node installed. If you don't have `npm` installed, [here's how to set it up](https://www.npmjs.com/get-npm). +**Here's what you're working with:** +- **Game sprites** live in the `assets/` folder so everything stays organized +- **Your main HTML file** sets up the canvas element and gets everything ready +- **A JavaScript file** where you'll write all your game rendering magic +- **A package.json** that sets up a development server so you can test locally + +Open this folder in Visual Studio Code to begin development. You'll need a local development environment with Visual Studio Code, NPM, and Node.js installed. If you don't have `npm` set up on your computer, [here's how to install it](https://www.npmjs.com/get-npm). -Start your project by navigating to the `your_work` folder: +Start your development server by navigating to the `your-work` folder: ```bash cd your-work npm start ``` -This will start an HTTP server at `http://localhost:5000`. Open a browser and go to that address. The page will be blank for now, but that will change soon. +**This command does some pretty cool stuff:** +- **Starts up** a local server at `http://localhost:5000` so you can test your game +- **Serves** all your files properly so your browser can load them correctly +- **Watches** your files for changes so you can develop smoothly +- **Gives you** a professional development environment to test everything -> Note: To see updates on your screen, refresh your browser. +> 💡 **Note**: Your browser will show a blank page initially – that's expected! As you add code, refresh your browser to see your changes. This iterative development approach is similar to how NASA built the Apollo guidance computer – testing each component before integrating it into the larger system. ### Add code -Add the necessary code to `your-work/app.js` to complete the following tasks: +Add the required code to `your-work/app.js` to complete the following tasks: + +1. **Draw a canvas with black background** + > 💡 **Here's how**: Find the TODO in `/app.js` and add just two lines. Set `ctx.fillStyle` to black, then use `ctx.fillRect()` starting at (0,0) with your canvas dimensions. Easy! + +2. **Load game textures** + > 💡 **Here's how**: Use `await loadAsset()` to load your player and enemy images. Store them in variables so you can use them later. Remember – they won't show up until you actually draw them! -1. **Draw** a canvas with a black background. - > Tip: Add two lines of code under the appropriate TODO in `/app.js` to set the `ctx` element's background to black. Set the top-left coordinates to `0,0` and the height and width to match the canvas dimensions. -2. **Load** textures. - > Tip: Use `await loadTexture` to load the player and enemy images by passing their file paths. You won't see them on the screen just yet! -3. **Draw** the hero in the center of the screen, near the bottom. - > Tip: Use the `drawImage` API to draw `heroImg` on the screen. Set the coordinates to `canvas.width / 2 - 45` and `canvas.height - canvas.height / 4`. -4. **Draw** a 5x5 grid of monsters. - > Tip: Uncomment the code to draw enemies on the screen. Then, go to the `createEnemies` function and complete it. +3. **Draw hero ship in the center-bottom position** + > 💡 **Here's how**: Use `ctx.drawImage()` to position your hero. For the x-coordinate, try `canvas.width / 2 - 45` to center it, and for y-coordinate use `canvas.height - canvas.height / 4` to put it in the bottom area. - Start by defining some constants: +4. **Draw a 5×5 formation of enemy ships** + > 💡 **Here's how**: Find the `createEnemies` function and set up a nested loop. You'll need to do some math for spacing and positioning, but don't worry – I'll show you exactly how! - ```javascript - const MONSTER_TOTAL = 5; - const MONSTER_WIDTH = MONSTER_TOTAL * 98; - const START_X = (canvas.width - MONSTER_WIDTH) / 2; - const STOP_X = START_X + MONSTER_WIDTH; - ``` +First, establish constants for proper enemy formation layout: + +```javascript +const ENEMY_TOTAL = 5; +const ENEMY_SPACING = 98; +const FORMATION_WIDTH = ENEMY_TOTAL * ENEMY_SPACING; +const START_X = (canvas.width - FORMATION_WIDTH) / 2; +const STOP_X = START_X + FORMATION_WIDTH; +``` + +**Let's break down what these constants do:** +- We **set** 5 enemies per row and column (a nice 5×5 grid) +- We **define** how much space to put between enemies so they don't look cramped +- We **calculate** how wide our whole formation will be +- We **figure out** where to start and stop so the formation looks centered + +```mermaid +flowchart LR + A["Canvas Width: 1024px"] --> B["Formation Width: 490px"] + B --> C["Start X: 267px"] + C --> D["Enemy Spacing: 98px"] + + subgraph "5x5 Enemy Formation" + E["Row 1: Y=0"] + F["Row 2: Y=50"] + G["Row 3: Y=100"] + H["Row 4: Y=150"] + I["Row 5: Y=200"] + end + + subgraph "Column Spacing" + J["Col 1: X=267"] + K["Col 2: X=365"] + L["Col 3: X=463"] + M["Col 4: X=561"] + N["Col 5: X=659"] + end + + style A fill:#e1f5fe + style B fill:#e8f5e8 + style C fill:#fff3e0 +``` +Then, create nested loops to draw the enemy formation: - Next, create a loop to draw the array of monsters on the screen: +```javascript +for (let x = START_X; x < STOP_X; x += ENEMY_SPACING) { + for (let y = 0; y < 50 * 5; y += 50) { + ctx.drawImage(enemyImg, x, y); + } +} +``` - ```javascript - for (let x = START_X; x < STOP_X; x += 98) { - for (let y = 0; y < 50 * 5; y += 50) { - ctx.drawImage(enemyImg, x, y); - } - } - ``` +**Here's what this nested loop does:** +- The outer loop **moves** from left to right across our formation +- The inner loop **goes** from top to bottom to create neat rows +- We **draw** each enemy sprite at the exact x,y coordinates we calculated +- Everything stays **evenly spaced** so it looks professional and organized + +### 🔄 **Pedagogical Check-in** +**Game Rendering Mastery**: Verify your understanding of the complete rendering system: +- ✅ How does async image loading prevent UI blocking during game startup? +- ✅ Why do we calculate enemy formation positions using constants instead of hardcoding? +- ✅ What role does the 2D rendering context play in drawing operations? +- ✅ How do nested loops create organized sprite formations? + +**Performance Considerations**: Your game now demonstrates: +- **Efficient asset loading**: Promise-based image management +- **Organized rendering**: Structured drawing operations +- **Mathematical positioning**: Calculated sprite placement +- **Error handling**: Graceful failure management + +**Visual Programming Concepts**: You've learned: +- **Coordinate systems**: Translating math to screen positions +- **Sprite management**: Loading and displaying game graphics +- **Formation algorithms**: Mathematical patterns for organized layouts +- **Async operations**: Modern JavaScript for smooth user experience ## Result -The final result should look like this: +The finished result should look like so: -![Black screen with a hero and 5x5 monsters](../../../../translated_images/en/partI-solution.36c53b48c9ffae2a5e15496b23b604ba5393433e4bf91608a7a0a020eb7a2691.png) +![Black screen with a hero and 5*5 monsters](../../../../translated_images/en/partI-solution.36c53b48c9ffae2a.webp) ## Solution -Try solving this on your own first, but if you get stuck, you can check out the [solution](../../../../6-space-game/2-drawing-to-canvas/solution/app.js). +Please try solving it yourself first but if you get stuck, have a look at a [solution](../../../../6-space-game/2-drawing-to-canvas/solution/app.js) --- +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Enhance your space game canvas by adding visual effects and interactive elements using the Canvas API techniques you've learned. + +**Prompt:** Create a new file called `enhanced-canvas.html` with a canvas that displays animated stars in the background, a pulsing health bar for the hero ship, and enemy ships that slowly move downward. Include JavaScript code that draws twinkling stars using random positions and opacity, implements a health bar that changes color based on health level (green > yellow > red), and animates the enemy ships to move down the screen at different speeds. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + ## 🚀 Challenge -Now that you've learned how to draw with the 2D-focused Canvas API, explore the [WebGL API](https://developer.mozilla.org/docs/Web/API/WebGL_API) and try creating a 3D object. +You've learned about drawing with the 2D-focused Canvas API; take a look at the [WebGL API](https://developer.mozilla.org/docs/Web/API/WebGL_API), and try to draw a 3D object. ## Post-Lecture Quiz @@ -220,11 +484,132 @@ Now that you've learned how to draw with the 2D-focused Canvas API, explore the Learn more about the Canvas API by [reading about it](https://developer.mozilla.org/docs/Web/API/Canvas_API). +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open the browser console and create a canvas element with `document.createElement('canvas')` +- [ ] Try drawing a rectangle using `fillRect()` on a canvas context +- [ ] Experiment with different colors using `fillStyle` property +- [ ] Draw a simple circle using the `arc()` method + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand canvas fundamentals +- [ ] Create a canvas drawing application with multiple shapes and colors +- [ ] Implement image loading and sprite rendering for your game +- [ ] Build a simple animation that moves objects across the canvas +- [ ] Practice canvas transformations like scaling, rotation, and translation + +### 📅 **Your Week-Long Canvas Journey** +- [ ] Complete the space game with polished graphics and sprite animations +- [ ] Master advanced canvas techniques like gradients, patterns, and compositing +- [ ] Create interactive visualizations using canvas for data representation +- [ ] Learn about canvas optimization techniques for smooth performance +- [ ] Build a drawing or painting application with various tools +- [ ] Explore creative coding patterns and generative art with canvas + +### 🌟 **Your Month-Long Graphics Mastery** +- [ ] Build complex visual applications using Canvas 2D and WebGL +- [ ] Learn graphics programming concepts and shader basics +- [ ] Contribute to open source graphics libraries and visualization tools +- [ ] Master performance optimization for graphics-intensive applications +- [ ] Create educational content about canvas programming and computer graphics +- [ ] Become a graphics programming expert who helps others create visual experiences + +## 🎯 Your Canvas Graphics Mastery Timeline + +```mermaid +timeline + title Canvas API Learning Progression + + section Canvas Fundamentals (15 minutes) + Basic Operations: Element reference + : 2D context access + : Coordinate system + : Simple shape drawing + + section Drawing Techniques (20 minutes) + Graphics Primitives: Rectangles and circles + : Colors and styles + : Text rendering + : Path operations + + section Image Handling (25 minutes) + Asset Management: Image object creation + : Async loading patterns + : Error handling + : Performance optimization + + section Game Graphics (30 minutes) + Sprite Rendering: Positioning algorithms + : Formation calculations + : Scene composition + : Frame rendering + + section Advanced Techniques (40 minutes) + Visual Effects: Transformations + : Animations + : Layering + : State management + + section Performance (35 minutes) + Optimization: Efficient drawing + : Memory management + : Frame rate control + : Asset caching + + section Professional Skills (1 week) + Production Graphics: WebGL integration + : Canvas libraries + : Game engines + : Cross-platform considerations + + section Advanced Graphics (1 month) + Specialized Applications: Data visualization + : Interactive art + : Real-time effects + : 3D graphics +``` +### 🛠️ Your Canvas Graphics Toolkit Summary + +After completing this lesson, you now have: +- **Canvas API Mastery**: Complete understanding of 2D graphics programming +- **Coordinate Mathematics**: Precise positioning and layout algorithms +- **Asset Management**: Professional image loading and error handling +- **Rendering Pipeline**: Structured approach to scene composition +- **Game Graphics**: Sprite positioning and formation calculations +- **Async Programming**: Modern JavaScript patterns for smooth performance +- **Visual Programming**: Translating mathematical concepts to screen graphics + +**Real-World Applications**: Your Canvas skills directly apply to: +- **Data Visualization**: Charts, graphs, and interactive dashboards +- **Game Development**: 2D games, simulations, and interactive experiences +- **Digital Art**: Creative coding and generative art projects +- **UI/UX Design**: Custom graphics and interactive elements +- **Educational Software**: Visual learning tools and simulations +- **Web Applications**: Dynamic graphics and real-time visualizations + +**Professional Skills Gained**: You can now: +- **Build** custom graphics solutions without external libraries +- **Optimize** rendering performance for smooth user experiences +- **Debug** complex visual problems using browser developer tools +- **Design** scalable graphics systems using mathematical principles +- **Integrate** Canvas graphics with modern web application frameworks + +**Canvas API Methods You've Mastered**: +- **Element Management**: getElementById, getContext +- **Drawing Operations**: fillRect, drawImage, fillStyle +- **Asset Loading**: Image objects, Promise patterns +- **Mathematical Positioning**: Coordinate calculations, formation algorithms + +**Next Level**: You're ready to add animation, user interaction, collision detection, or explore WebGL for 3D graphics! + +🌟 **Achievement Unlocked**: You've built a complete game rendering system using fundamental Canvas API techniques! + ## Assignment [Play with the Canvas API](assignment.md) --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/2-drawing-to-canvas/assignment.md b/translations/en/6-space-game/2-drawing-to-canvas/assignment.md index 93da6b51f..74bdf69c2 100644 --- a/translations/en/6-space-game/2-drawing-to-canvas/assignment.md +++ b/translations/en/6-space-game/2-drawing-to-canvas/assignment.md @@ -1,25 +1,74 @@ - -# Experiment with the Canvas API +# Assignment: Explore the Canvas API + +## Learning Objectives + +By completing this assignment, you will demonstrate your understanding of Canvas API fundamentals and apply creative problem-solving to build visual elements using JavaScript and HTML5 canvas. ## Instructions -Choose one feature of the Canvas API and build something creative with it. Can you design a small galaxy of repeated stars? Or perhaps an intriguing texture made of colorful lines? Feel free to browse CodePen for ideas (but avoid copying). +Choose one aspect of the Canvas API that interests you and create an engaging visual project around it. This assignment encourages you to experiment with the drawing capabilities you've learned while building something uniquely yours. + +### Project Ideas to Inspire You + +**Geometric Patterns:** +- **Create** a galaxy of animated twinkling stars using random positioning +- **Design** an interesting texture using repeated geometric shapes +- **Build** a kaleidoscope effect with rotating, colorful patterns + +**Interactive Elements:** +- **Develop** a drawing tool that responds to mouse movements +- **Implement** shapes that change color when clicked +- **Design** a simple animation loop with moving elements + +**Game-Related Graphics:** +- **Craft** a scrolling background for a space game +- **Build** particle effects like explosions or magic spells +- **Create** animated sprites with multiple frames + +### Development Guidelines + +**Research and Inspiration:** +- **Browse** CodePen for creative canvas examples (for inspiration, not copying) +- **Study** the [Canvas API documentation](https://developer.mozilla.org/docs/Web/API/Canvas_API) for additional methods +- **Experiment** with different drawing functions, colors, and animations + +**Technical Requirements:** +- **Use** proper canvas setup with `getContext('2d')` +- **Include** meaningful comments explaining your approach +- **Test** your code thoroughly to ensure it runs without errors +- **Apply** modern JavaScript syntax (const/let, arrow functions) + +**Creative Expression:** +- **Focus** on one Canvas API feature but explore it deeply +- **Add** your own creative twist to make the project personal +- **Consider** how your creation could be part of a larger application + +### Submission Guidelines + +Submit your completed project as a single HTML file with embedded CSS and JavaScript, or as separate files in a folder. Include a brief comment explaining your creative choices and the Canvas API features you explored. ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | --------------------------------------------------------- | ----------------------------------- | --------------------- | -| | Code is submitted showcasing an engaging texture or shape | Code is submitted, but it doesn't work | Code is not submitted | +| Criteria | Exemplary | Adequate | Needs Improvement | +|----------|-----------|----------|-------------------| +| **Technical Implementation** | Canvas API used creatively with multiple features, code runs flawlessly, modern JavaScript syntax applied | Canvas API used correctly, code runs with minor issues, basic implementation | Canvas API attempted but code has errors or doesn't execute | +| **Creativity and Design** | Highly original concept with polished visual appeal, demonstrates deep exploration of chosen Canvas feature | Good use of Canvas features with some creative elements, solid visual result | Basic implementation with minimal creativity or visual appeal | +| **Code Quality** | Well-organized, commented code following best practices, efficient algorithms | Clean code with some comments, follows basic coding standards | Code lacks organization, minimal comments, inefficient implementation | + +## Reflection Questions + +After completing your project, consider these questions: + +1. **What Canvas API feature did you choose and why?** +2. **What challenges did you encounter while building your project?** +3. **How could you extend this project into a larger application or game?** +4. **What other Canvas API features would you like to explore next?** + +> 💡 **Pro Tip**: Start simple and gradually add complexity. A well-executed simple project is better than an overly ambitious project that doesn't work properly! --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/3-moving-elements-around/README.md b/translations/en/6-space-game/3-moving-elements-around/README.md index 5ab5cb26f..41344e5ce 100644 --- a/translations/en/6-space-game/3-moving-elements-around/README.md +++ b/translations/en/6-space-game/3-moving-elements-around/README.md @@ -1,76 +1,180 @@ - # Build a Space Game Part 3: Adding Motion +```mermaid +journey + title Your Game Animation Journey + section Movement Basics + Understand motion principles: 3: Student + Learn coordinate updates: 4: Student + Implement basic movement: 4: Student + section Player Controls + Handle keyboard events: 4: Student + Prevent default behaviors: 5: Student + Create responsive controls: 5: Student + section Game Systems + Build game loop: 5: Student + Manage object lifecycle: 5: Student + Implement pub/sub pattern: 5: Student +``` +Think about your favorite games – what makes them captivating isn't just pretty graphics, it's the way everything moves and responds to your actions. Right now, your space game is like a beautiful painting, but we're about to add movement that brings it to life. + +When NASA's engineers programmed the guidance computer for the Apollo missions, they faced a similar challenge: how do you make a spacecraft respond to pilot input while automatically maintaining course corrections? The principles we'll learn today echo those same concepts – managing player-controlled movement alongside automatic system behaviors. + +In this lesson, you'll learn how to make spaceships glide across the screen, respond to player commands, and create smooth movement patterns. We'll break everything down into manageable concepts that build on each other naturally. + +By the end, you'll have players flying their hero ship around the screen while enemy vessels patrol overhead. More importantly, you'll understand the core principles that power game movement systems. + +```mermaid +mindmap + root((Game Animation)) + Movement Types + Player Controlled + Automatic Motion + Physics Based + Scripted Paths + Event Handling + Keyboard Input + Mouse Events + Touch Controls + Default Prevention + Game Loop + Update Logic + Render Frame + Clear Canvas + Frame Rate Control + Object Management + Position Updates + Collision Detection + Lifecycle Management + State Tracking + Communication + Pub/Sub Pattern + Event Emitters + Message Passing + Loose Coupling +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/33) -Games become much more engaging when you have aliens moving around on the screen! In this lesson, we’ll explore two types of movement: +## Understanding Game Movement + +Games come alive when things start moving around, and there are fundamentally two ways this happens: + +- **Player-controlled movement**: When you press a key or click your mouse, something moves. This is the direct connection between you and your game world. +- **Automatic movement**: When the game itself decides to move things – like those enemy ships that need to patrol the screen whether you're doing anything or not. -- **Keyboard/Mouse movement**: When the user interacts with the keyboard or mouse to move an object on the screen. -- **Game-induced movement**: When the game itself moves an object at specific time intervals. +Making objects move on a computer screen is simpler than you might think. Remember those x and y coordinates from math class? That's exactly what we're working with here. When Galileo tracked Jupiter's moons in 1610, he was essentially doing the same thing – plotting positions over time to understand motion patterns. -So, how do we make objects move on the screen? It all comes down to cartesian coordinates: we change the object's location (x, y) and then redraw the screen. +Moving things on screen is like creating a flipbook animation – you need to follow these three simple steps: -To achieve *movement* on the screen, you typically follow these steps: +```mermaid +flowchart LR + A["Frame N"] --> B["Update Positions"] + B --> C["Clear Canvas"] + C --> D["Draw Objects"] + D --> E["Frame N+1"] + E --> F{Continue?} + F -->|Yes| B + F -->|No| G["Game Over"] + + subgraph "Animation Cycle" + H["1. Calculate new positions"] + I["2. Erase previous frame"] + J["3. Render new frame"] + end + + style B fill:#e1f5fe + style C fill:#ffebee + style D fill:#e8f5e8 +``` +1. **Update the position** – Change where your object should be (maybe move it 5 pixels to the right) +2. **Erase the old frame** – Clear the screen so you don't see ghostly trails everywhere +3. **Draw the new frame** – Put your object in its new spot -1. **Set a new location** for the object. This is necessary to make it appear as though the object has moved. -2. **Clear the screen**. The screen must be cleared between draws. This can be done by drawing a rectangle filled with the background color. -3. **Redraw the object** at its new location. This step completes the process of moving the object from one position to another. +Do this fast enough, and boom! You've got smooth movement that feels natural to players. -Here’s an example of what this might look like in code: +Here's what it can look like in code: ```javascript -//set the hero's location +// Set the hero's location hero.x += 5; -// clear the rectangle that hosts the hero +// Clear the rectangle that hosts the hero ctx.clearRect(0, 0, canvas.width, canvas.height); -// redraw the game background and hero -ctx.fillRect(0, 0, canvas.width, canvas.height) +// Redraw the game background and hero +ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = "black"; ctx.drawImage(heroImg, hero.x, hero.y); ``` -✅ Can you think of why redrawing your hero many times per second might lead to performance issues? Check out [alternatives to this pattern](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas). +**Here's what this code does:** +- **Updates** the hero's x-coordinate by 5 pixels to move it horizontally +- **Clears** the entire canvas area to remove the previous frame +- **Fills** the canvas with a black background color +- **Redraws** the hero image at its new position + +✅ Can you think of a reason why redrawing your hero many frames per second might accrue performance costs? Read about [alternatives to this pattern](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API/Tutorial/Optimizing_canvas). ## Handle keyboard events -You can handle events by attaching specific events to your code. Keyboard events are triggered on the entire window, while mouse events like `click` can be tied to specific elements. In this project, we’ll use keyboard events. +This is where we connect player input to game action. When someone hits the spacebar to fire a laser or taps an arrow key to dodge an asteroid, your game needs to detect and respond to that input. -To handle an event, you use the window's `addEventListener()` method, which takes two input parameters. The first parameter is the event name, such as `keyup`. The second parameter is the function to be executed when the event occurs. +Keyboard events happen at the window level, meaning your entire browser window is listening for those keypresses. Mouse clicks, on the other hand, can be tied to specific elements (like clicking a button). For our space game, we'll focus on keyboard controls since that's what gives players that classic arcade feel. -Here’s an example: +This reminds me of how telegraph operators in the 1800s had to translate morse code input into meaningful messages – we're doing something similar, translating keypresses into game commands. + +To handle an event you need to use the window's `addEventListener()` method and provide it with two input parameters. The first parameter is the name of the event, for example `keyup`. The second parameter is the function that should be invoked as a result of the event taking place. + +Here's an example: ```javascript window.addEventListener('keyup', (evt) => { - // `evt.key` = string representation of the key + // evt.key = string representation of the key if (evt.key === 'ArrowUp') { // do something } -}) +}); ``` -For key events, you can use two properties on the event object to determine which key was pressed: +**Breaking down what happens here:** +- **Listens** for keyboard events on the entire window +- **Captures** the event object which contains information about which key was pressed +- **Checks** if the pressed key matches a specific key (in this case, the up arrow) +- **Executes** code when the condition is met + +For key events there are two properties on the event you can use to see what key was pressed: + +- `key` - this is a string representation of the pressed key, for example `'ArrowUp'` +- `keyCode` - this is a number representation, for example `37`, corresponds to `ArrowLeft` -- `key`: A string representation of the pressed key, such as `ArrowUp`. -- `keyCode`: A numeric representation, such as `37`, which corresponds to `ArrowLeft`. +✅ Key event manipulation is useful outside of game development. What other uses can you think of for this technique? -✅ Key event handling is useful beyond game development. Can you think of other applications for this technique? +```mermaid +sequenceDiagram + participant User + participant Browser + participant EventSystem + participant GameLogic + participant Hero + + User->>Browser: Presses ArrowUp key + Browser->>EventSystem: keydown event + EventSystem->>EventSystem: preventDefault() + EventSystem->>GameLogic: emit('KEY_EVENT_UP') + GameLogic->>Hero: hero.y -= 5 + Hero->>Hero: Update position + + Note over Browser,GameLogic: Event flow prevents browser defaults + Note over GameLogic,Hero: Pub/sub pattern enables clean communication +``` +### Special keys: a heads up! -### Special keys: a caveat +Some keys have built-in browser behaviors that can interfere with your game. Arrow keys scroll the page and spacebar jumps down – behaviors you don't want when someone is trying to pilot their spaceship. -Some *special* keys affect the browser window. For example, if you’re listening for a `keyup` event and use these special keys to move your hero, the browser might also perform horizontal scrolling. To prevent this, you can disable the browser's default behavior with the following code: +We can prevent these default behaviors and let our game handle the input instead. This is similar to how early computer programmers had to override system interrupts to create custom behaviors – we're just doing it at the browser level. Here's how: ```javascript -let onKeyDown = function (e) { +const onKeyDown = function (e) { console.log(e.keyCode); switch (e.keyCode) { case 37: @@ -88,27 +192,83 @@ let onKeyDown = function (e) { window.addEventListener('keydown', onKeyDown); ``` -This code ensures that the arrow keys and the spacebar have their *default* behavior disabled. The disabling happens when we call `e.preventDefault()`. +**Understanding this prevention code:** +- **Checks** for specific key codes that might cause unwanted browser behavior +- **Prevents** the default browser action for arrow keys and spacebar +- **Allows** other keys to function normally +- **Uses** `e.preventDefault()` to stop the browser's built-in behavior + +### 🔄 **Pedagogical Check-in** +**Event Handling Understanding**: Before moving to automatic movement, ensure you can: +- ✅ Explain the difference between `keydown` and `keyup` events +- ✅ Understand why we prevent default browser behaviors +- ✅ Describe how event listeners connect user input to game logic +- ✅ Identify which keys might interfere with game controls -## Game-induced movement +**Quick Self-Test**: What would happen if you didn't prevent default behavior for arrow keys? +*Answer: The browser would scroll the page, interfering with game movement* -Objects can move on their own using timers like `setTimeout()` or `setInterval()`. These functions update the object's location at regular intervals. Here’s an example: +**Event System Architecture**: You now understand: +- **Window-level listening**: Capturing events at the browser level +- **Event object properties**: `key` strings vs `keyCode` numbers +- **Default prevention**: Stopping unwanted browser behaviors +- **Conditional logic**: Responding to specific key combinations + +## Game induced movement + +Now let's talk about objects that move without player input. Think about enemy ships cruising across the screen, bullets flying in straight lines, or clouds drifting in the background. This autonomous movement makes your game world feel alive even when nobody's touching the controls. + +We use JavaScript's built-in timers to update positions at regular intervals. This concept is similar to how pendulum clocks work – a regular mechanism that triggers consistent, timed actions. Here's how simple it can be: ```javascript -let id = setInterval(() => { - //move the enemy on the y axis +const id = setInterval(() => { + // Move the enemy on the y axis enemy.y += 10; -}) +}, 100); ``` +**Here's what this movement code does:** +- **Creates** a timer that runs every 100 milliseconds +- **Updates** the enemy's y-coordinate by 10 pixels each time +- **Stores** the interval ID so we can stop it later if needed +- **Moves** the enemy downward on the screen automatically + ## The game loop -The game loop is a fundamental concept in game development. It’s essentially a function that runs at regular intervals, drawing everything that should be visible to the player. The game loop processes all game objects, drawing them unless they’re no longer part of the game (e.g., an enemy destroyed by a laser). +Here's the concept that ties everything together – the game loop. If your game were a movie, the game loop would be the film projector, showing frame after frame so fast that everything appears to move smoothly. -Here’s an example of a typical game loop in code: +Every game has one of these loops running behind the scenes. It's a function that updates all game objects, redraws the screen, and repeats this process continuously. This keeps track of your hero, all the enemies, any lasers flying around – the entire game state. +This concept reminds me of how early film animators like Walt Disney had to redraw characters frame by frame to create the illusion of movement. We're doing the same thing, just with code instead of pencils. + +Here's what a game loop can typically look like, expressed in code: + +```mermaid +flowchart TD + A["Start Game Loop"] --> B["Clear Canvas"] + B --> C["Fill Background"] + C --> D["Update Game Objects"] + D --> E["Draw Hero"] + E --> F["Draw Enemies"] + F --> G["Draw UI Elements"] + G --> H["Wait for Next Frame"] + H --> I{Game Running?} + I -->|Yes| B + I -->|No| J["End Game"] + + subgraph "Frame Rate Control" + K["60 FPS = 16.67ms"] + L["30 FPS = 33.33ms"] + M["10 FPS = 100ms"] + end + + style B fill:#ffebee + style D fill:#e1f5fe + style E fill:#e8f5e8 + style F fill:#e8f5e8 +``` ```javascript -let gameLoopId = setInterval(() => +const gameLoopId = setInterval(() => { function gameLoop() { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = "black"; @@ -116,21 +276,33 @@ let gameLoopId = setInterval(() => drawHero(); drawEnemies(); drawStaticObjects(); + } + gameLoop(); }, 200); ``` -This loop runs every `200` milliseconds to redraw the canvas. You can adjust the interval to suit your game’s needs. +**Understanding the game loop structure:** +- **Clears** the entire canvas to remove the previous frame +- **Fills** the background with a solid color +- **Draws** all game objects in their current positions +- **Repeats** this process every 200 milliseconds to create smooth animation +- **Manages** the frame rate by controlling the interval timing ## Continuing the Space Game -You’ll build on the existing code. Start with the code you completed in Part I, or use the code provided in [Part II - starter](../../../../6-space-game/3-moving-elements-around/your-work). +Now we'll add movement to the static scene you built previously. We're going to transform it from a screenshot into an interactive experience. We'll work through this step by step to ensure each piece builds on the last. + +Grab the code from where we left off in the previous lesson (or start with the code in the [Part II- starter](../../../../6-space-game/3-moving-elements-around/your-work) folder if you need a fresh start). + +**Here's what we're building today:** +- **Hero controls**: Arrow keys will pilot your spaceship around the screen +- **Enemy movement**: Those alien ships will start their advance -- **Move the hero**: Add code to allow the hero to move using the arrow keys. -- **Move enemies**: Add code to make the enemies move from top to bottom at a set speed. +Let's begin implementing these features. ## Recommended steps -Locate the files in the `your-work` folder. It should contain the following: +Locate the files that have been created for you in the `your-work` sub folder. It should contain the following: ```bash -| assets @@ -141,25 +313,29 @@ Locate the files in the `your-work` folder. It should contain the following: -| package.json ``` -Start your project by navigating to the `your_work` folder and typing: +You start your project in the `your-work` folder by typing: ```bash cd your-work npm start ``` -This will start an HTTP server at `http://localhost:5000`. Open a browser and navigate to that address. At this point, you should see the hero and enemies on the screen, but nothing is moving—yet! +**What this command does:** +- **Navigates** to your project directory +- **Starts** a HTTP Server on address `http://localhost:5000` +- **Serves** your game files so you can test them in a browser + +The above will start a HTTP Server on address `http://localhost:5000`. Open up a browser and input that address, right now it should render the hero and all the enemies; nothing is moving - yet! ### Add code -1. **Create dedicated objects** for `hero`, `enemy`, and `game object`. These should have `x` and `y` properties. (Refer to the section on [Inheritance or composition](../README.md)). +1. **Add dedicated objects** for `hero` and `enemy` and `game object`, they should have `x` and `y` properties. (Remember the portion on [Inheritance or composition](../README.md)). - *HINT*: The `game object` should include `x` and `y` properties and the ability to draw itself on the canvas. + *HINT* `game object` should be the one with `x` and `y` and the ability to draw itself to a canvas. - > Tip: Start by creating a `GameObject` class with the following constructor, and then draw it on the canvas: + > **Tip**: Start by adding a new `GameObject` class with its constructor delineated as below, and then draw it to the canvas: - ```javascript - + ```javascript class GameObject { constructor(x, y) { this.x = x; @@ -177,145 +353,234 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na } ``` - Next, extend the `GameObject` class to create the `Hero` and `Enemy` classes: + **Understanding this base class:** + - **Defines** common properties that all game objects share (position, size, image) + - **Includes** a `dead` flag to track whether the object should be removed + - **Provides** a `draw()` method that renders the object on the canvas + - **Sets** default values for all properties that child classes can override - ```javascript +```mermaid +classDiagram + class GameObject { + +x: number + +y: number + +dead: boolean + +type: string + +width: number + +height: number + +img: Image + +draw(ctx) + } + + class Hero { + +speed: number + +type: "Hero" + +width: 98 + +height: 75 + } + + class Enemy { + +type: "Enemy" + +width: 98 + +height: 50 + +setInterval() + } + + GameObject <|-- Hero + GameObject <|-- Enemy + + class EventEmitter { + +listeners: object + +on(message, listener) + +emit(message, payload) + } +``` + Now, extend this `GameObject` to create the `Hero` and `Enemy`: + + ```javascript class Hero extends GameObject { constructor(x, y) { - ...it needs an x, y, type, and speed + super(x, y); + this.width = 98; + this.height = 75; + this.type = "Hero"; + this.speed = 5; } } ``` - ```javascript + ```javascript class Enemy extends GameObject { constructor(x, y) { super(x, y); - (this.width = 98), (this.height = 50); + this.width = 98; + this.height = 50; this.type = "Enemy"; - let id = setInterval(() => { + const id = setInterval(() => { if (this.y < canvas.height - this.height) { this.y += 5; } else { - console.log('Stopped at', this.y) + console.log('Stopped at', this.y); clearInterval(id); } - }, 300) + }, 300); } } ``` -2. **Add key-event handlers** to handle navigation (move the hero up, down, left, and right). + **Key concepts in these classes:** + - **Inherits** from `GameObject` using the `extends` keyword + - **Calls** the parent constructor with `super(x, y)` + - **Sets** specific dimensions and properties for each object type + - **Implements** automatic movement for enemies using `setInterval()` - *REMEMBER*: The coordinate system starts at the top-left corner, which is `(0, 0)`. Also, don’t forget to disable the default browser behavior. +2. **Add key-event handlers** to handle key navigation (move hero up/down left/right) - > Tip: Create an `onKeyDown` function and attach it to the window: + *REMEMBER* it's a cartesian system, top-left is `0,0`. Also remember to add code to stop *default behavior* - ```javascript - let onKeyDown = function (e) { - console.log(e.keyCode); - ...add the code from the lesson above to stop default behavior - } - }; + > **Tip**: Create your `onKeyDown` function and attach it to the window: - window.addEventListener("keydown", onKeyDown); + ```javascript + const onKeyDown = function (e) { + console.log(e.keyCode); + // Add the code from the lesson above to stop default behavior + switch (e.keyCode) { + case 37: + case 39: + case 38: + case 40: // Arrow keys + case 32: + e.preventDefault(); + break; // Space + default: + break; // do not block other keys + } + }; + + window.addEventListener("keydown", onKeyDown); ``` + + **What this event handler does:** + - **Listens** for keydown events on the entire window + - **Logs** the key code to help you debug which keys are being pressed + - **Prevents** default browser behavior for arrow keys and spacebar + - **Allows** other keys to function normally + + Check your browser console at this point, and watch the keystrokes being logged. - Check your browser console to see the keystrokes being logged. +3. **Implement** the [Pub sub pattern](../README.md), this will keep your code clean as you follow the remaining parts. -3. **Implement** the [Pub-Sub pattern](../README.md) to keep your code clean as you continue building the game. + The Publish-Subscribe pattern helps organize your code by separating event detection from event handling. This makes your code more modular and easier to maintain. - To do this, follow these steps: + To do this last part, you can: - 1. **Add an event listener** to the window: + 1. **Add an event listener** on the window: ```javascript - window.addEventListener("keyup", (evt) => { - if (evt.key === "ArrowUp") { - eventEmitter.emit(Messages.KEY_EVENT_UP); - } else if (evt.key === "ArrowDown") { - eventEmitter.emit(Messages.KEY_EVENT_DOWN); - } else if (evt.key === "ArrowLeft") { - eventEmitter.emit(Messages.KEY_EVENT_LEFT); - } else if (evt.key === "ArrowRight") { - eventEmitter.emit(Messages.KEY_EVENT_RIGHT); - } - }); - ``` - - 2. **Create an EventEmitter class** to manage publishing and subscribing to messages: + window.addEventListener("keyup", (evt) => { + if (evt.key === "ArrowUp") { + eventEmitter.emit(Messages.KEY_EVENT_UP); + } else if (evt.key === "ArrowDown") { + eventEmitter.emit(Messages.KEY_EVENT_DOWN); + } else if (evt.key === "ArrowLeft") { + eventEmitter.emit(Messages.KEY_EVENT_LEFT); + } else if (evt.key === "ArrowRight") { + eventEmitter.emit(Messages.KEY_EVENT_RIGHT); + } + }); + ``` + + **What this event system does:** + - **Detects** keyboard input and converts it to custom game events + - **Separates** input detection from game logic + - **Makes** it easy to change controls later without affecting game code + - **Allows** multiple systems to respond to the same input + +```mermaid +flowchart TD + A["Keyboard Input"] --> B["Window Event Listener"] + B --> C["Event Emitter"] + C --> D["KEY_EVENT_UP"] + C --> E["KEY_EVENT_DOWN"] + C --> F["KEY_EVENT_LEFT"] + C --> G["KEY_EVENT_RIGHT"] + + D --> H["Hero Movement"] + D --> I["Sound System"] + D --> J["Visual Effects"] + + E --> H + F --> H + G --> H + + style A fill:#e1f5fe + style C fill:#e8f5e8 + style H fill:#fff3e0 +``` + 2. **Create an EventEmitter class** to publish and subscribe to messages: ```javascript - class EventEmitter { - constructor() { - this.listeners = {}; - } - - on(message, listener) { - if (!this.listeners[message]) { - this.listeners[message] = []; - } - this.listeners[message].push(listener); - } - - emit(message, payload = null) { - if (this.listeners[message]) { - this.listeners[message].forEach((l) => l(message, payload)); - } - } - } - ``` - + class EventEmitter { + constructor() { + this.listeners = {}; + } + + on(message, listener) { + if (!this.listeners[message]) { + this.listeners[message] = []; + } + this.listeners[message].push(listener); + } + 3. **Add constants** and set up the EventEmitter: ```javascript - const Messages = { - KEY_EVENT_UP: "KEY_EVENT_UP", - KEY_EVENT_DOWN: "KEY_EVENT_DOWN", - KEY_EVENT_LEFT: "KEY_EVENT_LEFT", - KEY_EVENT_RIGHT: "KEY_EVENT_RIGHT", - }; - - let heroImg, - enemyImg, - laserImg, - canvas, ctx, - gameObjects = [], - hero, - eventEmitter = new EventEmitter(); - ``` - - 4. **Initialize the game**: - + const Messages = { + KEY_EVENT_UP: "KEY_EVENT_UP", + KEY_EVENT_DOWN: "KEY_EVENT_DOWN", + KEY_EVENT_LEFT: "KEY_EVENT_LEFT", + KEY_EVENT_RIGHT: "KEY_EVENT_RIGHT", + }; + + let heroImg, + enemyImg, + laserImg, + canvas, ctx, + gameObjects = [], + hero, + eventEmitter = new EventEmitter(); + ``` + + **Understanding the setup:** + - **Defines** message constants to avoid typos and make refactoring easier + - **Declares** variables for images, canvas context, and game state + - **Creates** a global event emitter for the pub-sub system + - **Initializes** an array to hold all game objects + + 4. **Initialize the game** ```javascript - function initGame() { - gameObjects = []; - createEnemies(); - createHero(); - - eventEmitter.on(Messages.KEY_EVENT_UP, () => { - hero.y -=5 ; - }) - - eventEmitter.on(Messages.KEY_EVENT_DOWN, () => { - hero.y += 5; - }); - - eventEmitter.on(Messages.KEY_EVENT_LEFT, () => { - hero.x -= 5; - }); - - eventEmitter.on(Messages.KEY_EVENT_RIGHT, () => { - hero.x += 5; - }); - } - ``` - -4. **Set up the game loop** - - Refactor the `window.onload` function to initialize the game and set up a game loop with an appropriate interval. Add a laser beam as well: - - ```javascript + function initGame() { + gameObjects = []; + createEnemies(); + createHero(); + + eventEmitter.on(Messages.KEY_EVENT_UP, () => { + hero.y -= 5; + }); + + eventEmitter.on(Messages.KEY_EVENT_DOWN, () => { + hero.y += 5; + }); + + eventEmitter.on(Messages.KEY_EVENT_LEFT, () => { + hero.x -= 5; + }); + +4. **Setup the game loop** + + Refactor the `window.onload` function to initialize the game and set up a game loop on a good interval. You'll also add a laser beam: + + ```javascript window.onload = async () => { canvas = document.getElementById("canvas"); ctx = canvas.getContext("2d"); @@ -324,21 +589,27 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na laserImg = await loadTexture("assets/laserRed.png"); initGame(); - let gameLoopId = setInterval(() => { + const gameLoopId = setInterval(() => { ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.fillStyle = "black"; ctx.fillRect(0, 0, canvas.width, canvas.height); drawGameObjects(ctx); - }, 100) - + }, 100); }; ``` -5. **Move enemies at intervals** + **Understanding the game setup:** + - **Waits** for the page to load completely before starting + - **Gets** the canvas element and its 2D rendering context + - **Loads** all image assets asynchronously using `await` + - **Starts** the game loop running at 100ms intervals (10 FPS) + - **Clears** and redraws the entire screen each frame - Refactor the `createEnemies()` function to generate enemies and add them to the new `gameObjects` class: +5. **Add code** to move enemies at a certain interval - ```javascript + Refactor the `createEnemies()` function to create the enemies and push them into the new gameObjects class: + + ```javascript function createEnemies() { const MONSTER_TOTAL = 5; const MONSTER_WIDTH = MONSTER_TOTAL * 98; @@ -355,9 +626,71 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na } ``` - Create a `createHero()` function to do the same for the hero: + **What the enemy creation does:** + - **Calculates** positions to center enemies on the screen + - **Creates** a grid of enemies using nested loops + - **Assigns** the enemy image to each enemy object + - **Adds** each enemy to the global game objects array + + and add a `createHero()` function to do a similar process for the hero. + + ```javascript + function createHero() { + hero = new Hero( + canvas.width / 2 - 45, + canvas.height - canvas.height / 4 + ); + hero.img = heroImg; + gameObjects.push(hero); + } + ``` - ```javascript + **What the hero creation does:** + - **Positions** the hero at the bottom center of the screen + - **Assigns** the hero image to the hero object + - **Adds** the hero to the game objects array for rendering + + and finally, add a `drawGameObjects()` function to start the drawing: + + ```javascript + function drawGameObjects(ctx) { + gameObjects.forEach(go => go.draw(ctx)); + } + ``` + + **Understanding the drawing function:** + - **Iterates** through all game objects in the array + - **Calls** the `draw()` method on each object + - **Passes** the canvas context so objects can render themselves + + ### 🔄 **Pedagogical Check-in** + **Complete Game System Understanding**: Verify your mastery of the entire architecture: + - ✅ How does inheritance allow Hero and Enemy to share common GameObject properties? + - ✅ Why does the pub/sub pattern make your code more maintainable? + - ✅ What role does the game loop play in creating smooth animation? + - ✅ How do event listeners connect user input to game object behavior? + + **System Integration**: Your game now demonstrates: + - **Object-Oriented Design**: Base classes with specialized inheritance + - **Event-Driven Architecture**: Pub/sub pattern for loose coupling + - **Animation Framework**: Game loop with consistent frame updates + - **Input Handling**: Keyboard events with default prevention + - **Asset Management**: Image loading and sprite rendering + + **Professional Patterns**: You've implemented: + - **Separation of Concerns**: Input, logic, and rendering separated + - **Polymorphism**: All game objects share common drawing interface + - **Message Passing**: Clean communication between components + - **Resource Management**: Efficient sprite and animation handling + + Your enemies should start advancing on your hero spaceship! + } + } + ``` + + and add a `createHero()` function to do a similar process for the hero. + + ```javascript function createHero() { hero = new Hero( canvas.width / 2 - 45, @@ -368,21 +701,45 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na } ``` - Finally, add a `drawGameObjects()` function to start drawing: + and finally, add a `drawGameObjects()` function to start the drawing: - ```javascript + ```javascript function drawGameObjects(ctx) { gameObjects.forEach(go => go.draw(ctx)); } ``` - Your enemies should now begin advancing toward your hero spaceship! + Your enemies should start advancing on your hero spaceship! --- +## GitHub Copilot Agent Challenge 🚀 + +Here's a challenge that will improve your game's polish: adding boundaries and smooth controls. Currently, your hero can fly off the screen, and the movement might feel choppy. + +**Your Mission:** Make your spaceship feel more realistic by implementing screen boundaries and fluid movement. This is similar to how NASA's flight control systems prevent spacecraft from exceeding safe operational parameters. + +**Here's what to build:** Create a system that keeps your hero spaceship on screen, and make the controls feel smooth. When players hold down an arrow key, the ship should glide continuously rather than moving in discrete steps. Consider adding visual feedback when the ship reaches screen boundaries – perhaps a subtle effect to indicate the edge of the play area. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + ## 🚀 Challenge -As you’ve seen, adding more functions, variables, and classes can lead to 'spaghetti code.' How can you better organize your code to make it more readable? Sketch out a system for organizing your code, even if it’s still in a single file. +Code organization becomes increasingly important as projects grow. You might have noticed your file getting crowded with functions, variables, and classes all mixed together. This reminds me of how the engineers organizing the Apollo mission code had to create clear, maintainable systems that multiple teams could work on simultaneously. + +**Your mission:** +Think like a software architect. How would you organize your code so that six months from now, you (or a teammate) could understand what's happening? Even if everything stays in one file for now, you can create better organization: + +- **Grouping related functions** together with clear comment headers +- **Separating concerns** - keep game logic separate from rendering +- **Using consistent naming** conventions for variables and functions +- **Creating modules** or namespaces to organize different aspects of your game +- **Adding documentation** that explains the purpose of each major section + +**Reflection questions:** +- Which parts of your code are hardest to understand when you come back to them? +- How could you organize your code to make it easier for someone else to contribute? +- What would happen if you wanted to add new features like power-ups or different enemy types? ## Post-Lecture Quiz @@ -390,7 +747,135 @@ As you’ve seen, adding more functions, variables, and classes can lead to 'spa ## Review & Self Study -While we’re building this game without frameworks, there are many JavaScript-based canvas frameworks for game development. Take some time to [read about these](https://github.com/collections/javascript-game-engines). +We've been building everything from scratch, which is fantastic for learning, but here's a little secret – there are some amazing JavaScript frameworks out there that can handle a lot of the heavy lifting for you. Once you feel comfortable with the fundamentals we've covered, it's worth [exploring what's available](https://github.com/collections/javascript-game-engines). + +Think of frameworks like having a well-stocked toolbox instead of making every tool by hand. They can solve many of those code organization challenges we talked about, plus offer features that would take weeks to build yourself. + +**Things worth exploring:** +- How game engines organize code – you'll be amazed at the clever patterns they use +- Performance tricks for making canvas games run butter-smooth +- Modern JavaScript features that can make your code cleaner and more maintainable +- Different approaches to managing game objects and their relationships + +## 🎯 Your Game Animation Mastery Timeline + +```mermaid +timeline + title Game Animation & Interaction Learning Progression + + section Movement Fundamentals (20 minutes) + Animation Principles: Frame-based animation + : Position updates + : Coordinate systems + : Smooth movement + + section Event Systems (25 minutes) + User Input: Keyboard event handling + : Default behavior prevention + : Event object properties + : Window-level listening + + section Game Architecture (30 minutes) + Object Design: Inheritance patterns + : Base class creation + : Specialized behaviors + : Polymorphic interfaces + + section Communication Patterns (35 minutes) + Pub/Sub Implementation: Event emitters + : Message constants + : Loose coupling + : System integration + + section Game Loop Mastery (40 minutes) + Real-time Systems: Frame rate control + : Update/render cycle + : State management + : Performance optimization + + section Advanced Techniques (45 minutes) + Professional Features: Collision detection + : Physics simulation + : State machines + : Component systems + + section Game Engine Concepts (1 week) + Framework Understanding: Entity-component systems + : Scene graphs + : Asset pipelines + : Performance profiling + + section Production Skills (1 month) + Professional Development: Code organization + : Team collaboration + : Testing strategies + : Deployment optimization +``` +### 🛠️ Your Game Development Toolkit Summary + +After completing this lesson, you now have mastered: +- **Animation Principles**: Frame-based movement and smooth transitions +- **Event-Driven Programming**: Keyboard input handling with proper event management +- **Object-Oriented Design**: Inheritance hierarchies and polymorphic interfaces +- **Communication Patterns**: Pub/sub architecture for maintainable code +- **Game Loop Architecture**: Real-time update and rendering cycles +- **Input Systems**: User control mapping with default behavior prevention +- **Asset Management**: Sprite loading and efficient rendering techniques + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open the browser console and try `addEventListener('keydown', console.log)` to see keyboard events +- [ ] Create a simple div element and move it around using arrow keys +- [ ] Experiment with `setInterval` to create continuous movement +- [ ] Try preventing default behavior with `event.preventDefault()` + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand event-driven programming +- [ ] Build the moving hero spaceship with full keyboard controls +- [ ] Implement smooth enemy movement patterns +- [ ] Add boundaries to prevent game objects from leaving the screen +- [ ] Create basic collision detection between game objects + +### 📅 **Your Week-Long Animation Journey** +- [ ] Complete the full space game with polished movement and interactions +- [ ] Add advanced movement patterns like curves, acceleration, and physics +- [ ] Implement smooth transitions and easing functions +- [ ] Create particle effects and visual feedback systems +- [ ] Optimize game performance for smooth 60fps gameplay +- [ ] Add mobile touch controls and responsive design + +### 🌟 **Your Month-Long Interactive Development** +- [ ] Build complex interactive applications with advanced animation systems +- [ ] Learn animation libraries like GSAP or create your own animation engine +- [ ] Contribute to open source game development and animation projects +- [ ] Master performance optimization for graphics-intensive applications +- [ ] Create educational content about game development and animation +- [ ] Build a portfolio showcasing advanced interactive programming skills + +**Real-World Applications**: Your game animation skills apply directly to: +- **Interactive Web Applications**: Dynamic dashboards and real-time interfaces +- **Data Visualization**: Animated charts and interactive graphics +- **Educational Software**: Interactive simulations and learning tools +- **Mobile Development**: Touch-based games and gesture handling +- **Desktop Applications**: Electron apps with smooth animations +- **Web Animations**: CSS and JavaScript animation libraries + +**Professional Skills Gained**: You can now: +- **Architect** event-driven systems that scale with complexity +- **Implement** smooth animations using mathematical principles +- **Debug** complex interaction systems using browser developer tools +- **Optimize** game performance for different devices and browsers +- **Design** maintainable code structures using proven patterns + +**Game Development Concepts Mastered**: +- **Frame Rate Management**: Understanding FPS and timing controls +- **Input Handling**: Cross-platform keyboard and event systems +- **Object Lifecycle**: Creation, update, and destruction patterns +- **State Synchronization**: Keeping game state consistent across frames +- **Event Architecture**: Decoupled communication between game systems + +**Next Level**: You're ready to add collision detection, scoring systems, sound effects, or explore modern game frameworks like Phaser or Three.js! + +🌟 **Achievement Unlocked**: You've built a complete interactive game system with professional architecture patterns! ## Assignment @@ -398,5 +883,7 @@ While we’re building this game without frameworks, there are many JavaScript-b --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, a professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/3-moving-elements-around/assignment.md b/translations/en/6-space-game/3-moving-elements-around/assignment.md index 3070d5991..7593b86d8 100644 --- a/translations/en/6-space-game/3-moving-elements-around/assignment.md +++ b/translations/en/6-space-game/3-moving-elements-around/assignment.md @@ -1,25 +1,29 @@ - # Comment Your Code ## Instructions -Review your current /app.js file in your game folder and look for ways to add comments and organize it better. Code can easily become messy, so this is a great opportunity to add comments to make it more readable and easier to work with in the future. +Clean, well-documented code is essential for maintaining and sharing your projects. In this assignment, you'll practice one of the most important habits of professional developers: writing clear, helpful comments that explain your code's purpose and functionality. + +Go over your current `app.js` file in your game folder, and find ways to comment it and tidy it up. It's very easy for code to get out of control, and now's a good chance to add comments to ensure that you have readable code so that you can use it later. + +**Your task includes:** +- **Add comments** explaining what each major section of code does +- **Document functions** with clear descriptions of their purpose and parameters +- **Organize code** into logical blocks with section headers +- **Remove** any unused or redundant code +- **Use consistent** naming conventions for variables and functions ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | ----------------------------------------------------------------- | ------------------------------------ | -------------------------------------------------------------- | -| | `app.js` code is thoroughly commented and structured into clear sections | `app.js` code has sufficient comments | `app.js` code is somewhat unorganized and lacks meaningful comments | +| Criteria | Exemplary | Adequate | Needs Improvement | +| -------- | --------- | -------- | ----------------- | +| **Code Documentation** | `app.js` code is fully commented with clear, helpful explanations for all major sections and functions | `app.js` code is adequately commented with basic explanations for most sections | `app.js` code has minimal comments and lacks clear explanations | +| **Code Organization** | Code is organized into logical blocks with clear section headers and consistent structure | Code has some organization with basic grouping of related functionality | Code is somewhat disorganized and difficult to follow | +| **Code Quality** | All variables and functions use descriptive names, no unused code, follows consistent conventions | Most code follows good naming practices with minimal unused code | Variable names are unclear, contains unused code, inconsistent style | --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/4-collision-detection/README.md b/translations/en/6-space-game/4-collision-detection/README.md index 435cdec6f..45e16dfad 100644 --- a/translations/en/6-space-game/4-collision-detection/README.md +++ b/translations/en/6-space-game/4-collision-detection/README.md @@ -1,131 +1,316 @@ - # Build a Space Game Part 4: Adding A Laser and Detect Collisions +```mermaid +journey + title Your Collision Detection Journey + section Physics Foundation + Understand rectangles: 3: Student + Learn intersection math: 4: Student + Grasp coordinate systems: 4: Student + section Game Mechanics + Implement laser firing: 4: Student + Add object lifecycle: 5: Student + Create collision rules: 5: Student + section System Integration + Build collision detection: 5: Student + Optimize performance: 5: Student + Test interaction systems: 5: Student +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/35) -In this lesson, you'll learn how to shoot lasers using JavaScript! We'll add two features to our game: +Think about the moment in Star Wars when Luke's proton torpedoes hit the Death Star's exhaust port. That precise collision detection changed the fate of the galaxy! In games, collision detection works the same way - it determines when objects interact and what happens next. + +In this lesson, you'll add laser weapons to your space game and implement collision detection. Just like NASA's mission planners calculate spacecraft trajectories to avoid debris, you'll learn to detect when game objects intersect. We'll break this down into manageable steps that build on each other. + +By the end, you'll have a functioning combat system where lasers destroy enemies and collisions trigger game events. These same collision principles are used in everything from physics simulations to interactive web interfaces. + +```mermaid +mindmap + root((Collision Detection)) + Physics Concepts + Rectangle Boundaries + Intersection Testing + Coordinate Systems + Separation Logic + Game Objects + Laser Projectiles + Enemy Ships + Hero Character + Collision Zones + Lifecycle Management + Object Creation + Movement Updates + Destruction Marking + Memory Cleanup + Event Systems + Keyboard Input + Collision Events + Game State Changes + Audio/Visual Effects + Performance + Efficient Algorithms + Frame Rate Optimization + Memory Management + Spatial Partitioning +``` +✅ Do a little research on the very first computer game ever written. What was its functionality? -- **A laser**: This laser will be fired from your hero's ship and move vertically upward. -- **Collision detection**: As part of implementing the ability to *shoot*, we'll also introduce some exciting game rules: - - **Laser hits enemy**: The enemy is destroyed if hit by a laser. - - **Laser hits top of the screen**: The laser is removed if it reaches the top of the screen. - - **Enemy and hero collision**: Both the enemy and the hero are destroyed if they collide. - - **Enemy reaches the bottom of the screen**: Both the enemy and the hero are destroyed if the enemy reaches the bottom of the screen. +## Collision detection -In short, you -- *the hero* -- must destroy all enemies with your laser before they reach the bottom of the screen. +Collision detection works like the proximity sensors on the Apollo lunar module - it constantly checks distances and triggers alerts when objects get too close. In games, this system determines when objects interact and what should happen next. -✅ Do a little research on the very first computer game ever created. What was its functionality? +The approach we'll use treats every game object as a rectangle, similar to how air traffic control systems use simplified geometric shapes to track aircraft. This rectangular method might seem basic, but it's computationally efficient and works well for most game scenarios. -Let's be heroic together! +### Rectangle representation -## Collision detection +Every game object needs coordinate boundaries, similar to how the Mars Pathfinder rover mapped its location on the Martian surface. Here's how we define these boundary coordinates: + +```mermaid +flowchart TD + A["🎯 Game Object"] --> B["📍 Position (x, y)"] + A --> C["📏 Dimensions (width, height)"] + + B --> D["Top: y"] + B --> E["Left: x"] + + C --> F["Bottom: y + height"] + C --> G["Right: x + width"] + + D --> H["🔲 Rectangle Bounds"] + E --> H + F --> H + G --> H + + H --> I["Collision Detection Ready"] + + style A fill:#e3f2fd + style H fill:#e8f5e8 + style I fill:#fff3e0 +``` +```javascript +rectFromGameObject() { + return { + top: this.y, + left: this.x, + bottom: this.y + this.height, + right: this.x + this.width + } +} +``` + +**Let's break this down:** +- **Top edge**: That's just where your object starts vertically (its y position) +- **Left edge**: Where it starts horizontally (its x position) +- **Bottom edge**: Add the height to the y position - now you know where it ends! +- **Right edge**: Add the width to the x position - and you've got the complete boundary -How do we detect collisions? We need to think of our game objects as rectangles moving around. Why rectangles, you ask? Because the image used to represent a game object is essentially a rectangle: it has an `x`, `y`, `width`, and `height`. +### Intersection algorithm -If two rectangles, such as the hero and an enemy, *intersect*, a collision occurs. What happens next depends on the rules of the game. To implement collision detection, you'll need the following: +Detecting rectangle intersections uses logic similar to how the Hubble Space Telescope determines if celestial objects are overlapping in its field of view. The algorithm checks for separation: -1. A way to represent a game object as a rectangle, like this: +```mermaid +flowchart LR + A["Rectangle 1"] --> B{"Separation Tests"} + C["Rectangle 2"] --> B + + B --> D["R2 left > R1 right?"] + B --> E["R2 right < R1 left?"] + B --> F["R2 top > R1 bottom?"] + B --> G["R2 bottom < R1 top?"] + + D --> H{"Any True?"} + E --> H + F --> H + G --> H + + H -->|Yes| I["❌ No Collision"] + H -->|No| J["✅ Collision Detected"] + + style B fill:#e3f2fd + style I fill:#ffebee + style J fill:#e8f5e8 +``` +```javascript +function intersectRect(r1, r2) { + return !(r2.left > r1.right || + r2.right < r1.left || + r2.top > r1.bottom || + r2.bottom < r1.top); +} +``` - ```javascript - rectFromGameObject() { - return { - top: this.y, - left: this.x, - bottom: this.y + this.height, - right: this.x + this.width - } - } - ``` +**The separation test works like radar systems:** +- Is rectangle 2 completely to the right of rectangle 1? +- Is rectangle 2 completely to the left of rectangle 1? +- Is rectangle 2 completely below rectangle 1? +- Is rectangle 2 completely above rectangle 1? -2. A function to compare rectangles, which might look like this: +If none of these conditions are true, the rectangles must be overlapping. This approach mirrors how radar operators determine if two aircraft are at safe distances. - ```javascript - function intersectRect(r1, r2) { - return !(r2.left > r1.right || - r2.right < r1.left || - r2.top > r1.bottom || - r2.bottom < r1.top); - } - ``` +## Managing object lifecycles -## How do we destroy things +When a laser hits an enemy, both objects need to be removed from the game. However, deleting objects mid-loop can cause crashes - a lesson learned the hard way in early computer systems like the Apollo Guidance Computer. Instead, we use a "mark for deletion" approach that safely removes objects between frames. -To destroy objects in a game, you need to tell the game not to render them anymore during the game loop that runs at regular intervals. One way to do this is to mark a game object as *dead* when something happens, like this: +```mermaid +stateDiagram-v2 + [*] --> Active: Object Created + Active --> Collided: Collision Detected + Collided --> MarkedDead: Set dead = true + MarkedDead --> Filtered: Next Frame + Filtered --> [*]: Object Removed + + Active --> OutOfBounds: Leaves Screen + OutOfBounds --> MarkedDead + + note right of MarkedDead + Safe to continue + current frame + end note + + note right of Filtered + Objects removed + between frames + end note +``` +Here's how we mark something for removal: ```javascript -// collision happened -enemy.dead = true +// Mark object for removal +enemy.dead = true; ``` -Then, you can filter out *dead* objects before repainting the screen, like this: +**Why this approach works:** +- We mark the object as "dead" but don't delete it right away +- This lets the current game frame finish safely +- No crashes from trying to use something that's already gone! + +Then filter out marked objects before the next render cycle: ```javascript -gameObjects = gameObject.filter(go => !go.dead); +gameObjects = gameObjects.filter(go => !go.dead); ``` -## How do we fire a laser +**What this filtering does:** +- Creates a fresh list with only the "living" objects +- Tosses out anything marked as dead +- Keeps your game running smoothly +- Prevents memory bloat from accumulating destroyed objects -Firing a laser involves responding to a key event and creating an object that moves in a specific direction. Here's what you'll need to do: +## Implementing laser mechanics -1. **Create a laser object**: The laser will originate from the top of the hero's ship and start moving upward toward the top of the screen. -2. **Attach code to a key event**: Choose a key on the keyboard (e.g., the space bar) to represent firing the laser. -3. **Create a game object that looks like a laser** when the key is pressed. +Laser projectiles in games work on the same principle as photon torpedoes in Star Trek - they're discrete objects that travel in straight lines until they hit something. Each spacebar press creates a new laser object that moves across the screen. -## Cooldown on our laser +To make this work, we need to coordinate a few different pieces: -The laser should fire every time you press a key, such as the space bar. To prevent the game from generating too many lasers in a short period, we need to implement a *cooldown*. A cooldown is essentially a timer that ensures the laser can only be fired at specific intervals. You can implement it like this: +**Key components to implement:** +- **Create** laser objects that spawn from the hero's position +- **Handle** keyboard input to trigger laser creation +- **Manage** laser movement and lifecycle +- **Implement** visual representation for the laser projectiles +## Implementing firing rate control + +Unlimited firing rates would overwhelm the game engine and make gameplay too easy. Real weapon systems face similar constraints - even the USS Enterprise's phasers needed time to recharge between shots. + +We'll implement a cooldown system that prevents rapid-fire spamming while maintaining responsive controls: + +```mermaid +sequenceDiagram + participant Player + participant Weapon + participant Cooldown + participant Game + + Player->>Weapon: Press Spacebar + Weapon->>Cooldown: Check if cool + + alt Weapon is Ready + Cooldown->>Weapon: cool = true + Weapon->>Game: Create Laser + Weapon->>Cooldown: Start new cooldown + Cooldown->>Cooldown: cool = false + + Note over Cooldown: Wait 500ms + + Cooldown->>Cooldown: cool = true + else Weapon is Cooling + Cooldown->>Weapon: cool = false + Weapon->>Player: No action + end +``` ```javascript class Cooldown { constructor(time) { this.cool = false; setTimeout(() => { this.cool = true; - }, time) + }, time); } } class Weapon { - constructor { + constructor() { + this.cooldown = null; } + fire() { if (!this.cooldown || this.cooldown.cool) { - // produce a laser + // Create laser projectile this.cooldown = new Cooldown(500); } else { - // do nothing - it hasn't cooled down yet. + // Weapon is still cooling down } } } ``` -✅ Refer to lesson 1 in the space game series to refresh your memory about *cooldowns*. +**How the cooldown works:** +- When created, the weapon starts "hot" (can't fire yet) +- After the timeout period, it becomes "cool" (ready to fire) +- Before firing, we check: "Is the weapon cool?" +- This prevents spam-clicking while keeping controls responsive + +✅ Refer to lesson 1 in the space game series to remind yourself about cooldowns. + +## Building the collision system + +You'll extend your existing space game code to create a collision detection system. Like the International Space Station's automated collision avoidance system, your game will continuously monitor object positions and respond to intersections. + +Starting from your previous lesson's code, you'll add collision detection with specific rules that govern object interactions. + +> 💡 **Pro Tip**: The laser sprite is already included in your assets folder and referenced in your code, ready for implementation. + +### Collision rules to implement + +**Game mechanics to add:** +1. **Laser hits enemy**: Enemy object is destroyed when struck by a laser projectile +2. **Laser hits screen boundary**: Laser is removed when reaching the top edge of the screen +3. **Enemy and hero collision**: Both objects are destroyed when they intersect +4. **Enemy reaches bottom**: Game over condition when enemies reach the screen bottom -## What to build +### 🔄 **Pedagogical Check-in** +**Collision Detection Foundation**: Before implementing, ensure you understand: +- ✅ How rectangle boundaries define collision zones +- ✅ Why separation testing is more efficient than intersection calculation +- ✅ The importance of object lifecycle management in game loops +- ✅ How event-driven systems coordinate collision responses -You'll extend the existing code (which you should have cleaned up and refactored) from the previous lesson. You can either start with the code from part II or use the code from [Part III - starter](../../../../../../../../../your-work). +**Quick Self-Test**: What would happen if you deleted objects immediately instead of marking them? +*Answer: Mid-loop deletion could cause crashes or skip objects in iteration* -> tip: The laser you'll work with is already in your assets folder and referenced in your code. +**Physics Understanding**: You now grasp: +- **Coordinate Systems**: How position and dimensions create boundaries +- **Intersection Logic**: Mathematical principles behind collision detection +- **Performance Optimization**: Why efficient algorithms matter in real-time systems +- **Memory Management**: Safe object lifecycle patterns for stability -- **Add collision detection**: When a laser collides with something, the following rules should apply: - 1. **Laser hits enemy**: The enemy is destroyed if hit by a laser. - 2. **Laser hits top of the screen**: The laser is removed if it reaches the top of the screen. - 3. **Enemy and hero collision**: Both the enemy and the hero are destroyed if they collide. - 4. **Enemy reaches the bottom of the screen**: Both the enemy and the hero are destroyed if the enemy reaches the bottom of the screen. +## Setting up your development environment -## Recommended steps +Good news - we've already set up most of the groundwork for you! All your game assets and basic structure are waiting in the `your-work` subfolder, ready for you to add the cool collision features. -Locate the files created for you in the `your-work` subfolder. It should contain the following: +### Project structure ```bash -| assets @@ -137,161 +322,430 @@ Locate the files created for you in the `your-work` subfolder. It should contain -| package.json ``` -Start your project in the `your_work` folder by typing: +**Understanding the file structure:** +- **Contains** all sprite images needed for the game objects +- **Includes** the main HTML document and JavaScript application file +- **Provides** package configuration for local development server + +### Starting the development server + +Navigate to your project folder and start the local server: ```bash cd your-work npm start ``` -This will start an HTTP server at `http://localhost:5000`. Open a browser and navigate to that address. At this point, it should display the hero and all the enemies, but nothing is moving yet. +**This command sequence:** +- **Changes** directory to your working project folder +- **Starts** a local HTTP server on `http://localhost:5000` +- **Serves** your game files for testing and development +- **Enables** live development with automatic reloading + +Open your browser and navigate to `http://localhost:5000` to see your current game state with the hero and enemies rendered on screen. + +### Step-by-step implementation + +Like the systematic approach NASA used to program the Voyager spacecraft, we'll implement collision detection methodically, building each component step by step. + +```mermaid +flowchart TD + A["1. Rectangle Bounds"] --> B["2. Intersection Detection"] + B --> C["3. Laser System"] + C --> D["4. Event Handling"] + D --> E["5. Collision Rules"] + E --> F["6. Cooldown System"] + + G["Object Boundaries"] --> A + H["Physics Algorithm"] --> B + I["Projectile Creation"] --> C + J["Keyboard Input"] --> D + K["Game Logic"] --> E + L["Rate Limiting"] --> F + + F --> M["🎮 Complete Game"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec + style M fill:#e1f5fe +``` +#### 1. Add rectangle collision bounds + +First, let's teach our game objects how to describe their boundaries. Add this method to your `GameObject` class: + +```javascript +rectFromGameObject() { + return { + top: this.y, + left: this.x, + bottom: this.y + this.height, + right: this.x + this.width, + }; + } +``` + +**This method accomplishes:** +- **Creates** a rectangle object with precise boundary coordinates +- **Calculates** bottom and right edges using position plus dimensions +- **Returns** an object ready for collision detection algorithms +- **Provides** a standardized interface for all game objects + +#### 2. Implement intersection detection + +Now let's create our collision detective - a function that can tell when two rectangles are overlapping: + +```javascript +function intersectRect(r1, r2) { + return !( + r2.left > r1.right || + r2.right < r1.left || + r2.top > r1.bottom || + r2.bottom < r1.top + ); +} +``` + +**This algorithm works by:** +- **Tests** four separation conditions between rectangles +- **Returns** `false` if any separation condition is true +- **Indicates** collision when no separation exists +- **Uses** negation logic for efficient intersection testing + +#### 3. Implement laser firing system -### Add code +Here's where things get exciting! Let's set up the laser firing system. -1. **Set up a rectangle representation for your game objects to handle collisions**: The following code allows you to represent a `GameObject` as a rectangle. Edit your GameObject class to include this: +##### Message constants - ```javascript - rectFromGameObject() { - return { - top: this.y, - left: this.x, - bottom: this.y + this.height, - right: this.x + this.width, - }; +First, let's define some message types so different parts of our game can talk to each other: + +```javascript +KEY_EVENT_SPACE: "KEY_EVENT_SPACE", +COLLISION_ENEMY_LASER: "COLLISION_ENEMY_LASER", +COLLISION_ENEMY_HERO: "COLLISION_ENEMY_HERO", +``` + +**These constants provide:** +- **Standardizes** event names throughout the application +- **Enables** consistent communication between game systems +- **Prevents** typos in event handler registration + +##### Keyboard input handling + +Add space key detection to your key event listener: + +```javascript +} else if(evt.keyCode === 32) { + eventEmitter.emit(Messages.KEY_EVENT_SPACE); +} +``` + +**This input handler:** +- **Detects** space key presses using keyCode 32 +- **Emits** a standardized event message +- **Enables** decoupled firing logic + +##### Event listener setup + +Register firing behavior in your `initGame()` function: + +```javascript +eventEmitter.on(Messages.KEY_EVENT_SPACE, () => { + if (hero.canFire()) { + hero.fire(); + } +}); +``` + +**This event listener:** +- **Responds** to space key events +- **Checks** firing cooldown status +- **Triggers** laser creation when allowed + +Add collision handling for laser-enemy interactions: + +```javascript +eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => { + first.dead = true; + second.dead = true; +}); +``` + +**This collision handler:** +- **Receives** collision event data with both objects +- **Marks** both objects for removal +- **Ensures** proper cleanup after collision + +#### 4. Create the Laser class + +Implement a laser projectile that moves upward and manages its own lifecycle: + +```javascript +class Laser extends GameObject { + constructor(x, y) { + super(x, y); + this.width = 9; + this.height = 33; + this.type = 'Laser'; + this.img = laserImg; + + let id = setInterval(() => { + if (this.y > 0) { + this.y -= 15; + } else { + this.dead = true; + clearInterval(id); } - ``` - -2. **Add code to check for collisions**: Create a new function to test whether two rectangles intersect: - - ```javascript - function intersectRect(r1, r2) { - return !( - r2.left > r1.right || - r2.right < r1.left || - r2.top > r1.bottom || - r2.bottom < r1.top - ); - } - ``` - -3. **Add laser firing capability**: - 1. **Add a key-event message**: The space bar should create a laser just above the hero's ship. Add three constants to the Messages object: - - ```javascript - KEY_EVENT_SPACE: "KEY_EVENT_SPACE", - COLLISION_ENEMY_LASER: "COLLISION_ENEMY_LASER", - COLLISION_ENEMY_HERO: "COLLISION_ENEMY_HERO", - ``` - - 2. **Handle the space bar key**: Edit the `window.addEventListener` keyup function to handle the space bar: - - ```javascript - } else if(evt.keyCode === 32) { - eventEmitter.emit(Messages.KEY_EVENT_SPACE); - } - ``` - - 3. **Add listeners**: Edit the `initGame()` function to ensure the hero can fire when the space bar is pressed: - - ```javascript - eventEmitter.on(Messages.KEY_EVENT_SPACE, () => { - if (hero.canFire()) { - hero.fire(); - } - ``` - - Add a new `eventEmitter.on()` function to define behavior when an enemy collides with a laser: - - ```javascript - eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => { - first.dead = true; - second.dead = true; - }) - ``` - - 4. **Move the laser object**: Ensure the laser moves gradually toward the top of the screen. Create a new Laser class that extends `GameObject`, as you've done before: - - ```javascript - class Laser extends GameObject { - constructor(x, y) { - super(x,y); - (this.width = 9), (this.height = 33); - this.type = 'Laser'; - this.img = laserImg; - let id = setInterval(() => { - if (this.y > 0) { - this.y -= 15; - } else { - this.dead = true; - clearInterval(id); - } - }, 100) - } + }, 100); + } +} +``` + +**This class implementation:** +- **Extends** GameObject to inherit basic functionality +- **Sets** appropriate dimensions for the laser sprite +- **Creates** automatic upward movement using `setInterval()` +- **Handles** self-destruction when reaching screen top +- **Manages** its own animation timing and cleanup + +#### 5. Implement collision detection system + +Create a comprehensive collision detection function: + +```javascript +function updateGameObjects() { + const enemies = gameObjects.filter(go => go.type === 'Enemy'); + const lasers = gameObjects.filter(go => go.type === "Laser"); + + // Test laser-enemy collisions + lasers.forEach((laser) => { + enemies.forEach((enemy) => { + if (intersectRect(laser.rectFromGameObject(), enemy.rectFromGameObject())) { + eventEmitter.emit(Messages.COLLISION_ENEMY_LASER, { + first: laser, + second: enemy, + }); } - ``` - - 5. **Handle collisions**: Implement collision rules for the laser. Add an `updateGameObjects()` function to test for collisions between objects: - - ```javascript - function updateGameObjects() { - const enemies = gameObjects.filter(go => go.type === 'Enemy'); - const lasers = gameObjects.filter((go) => go.type === "Laser"); - // laser hit something - lasers.forEach((l) => { - enemies.forEach((m) => { - if (intersectRect(l.rectFromGameObject(), m.rectFromGameObject())) { - eventEmitter.emit(Messages.COLLISION_ENEMY_LASER, { - first: l, - second: m, - }); - } - }); - }); - - gameObjects = gameObjects.filter(go => !go.dead); - } - ``` - - Make sure to include `updateGameObjects()` in your game loop in `window.onload`. - - 6. **Implement cooldown** for the laser so it can only be fired at specific intervals. - - Finally, edit the Hero class to include a cooldown mechanism: - - ```javascript - class Hero extends GameObject { - constructor(x, y) { - super(x, y); - (this.width = 99), (this.height = 75); - this.type = "Hero"; - this.speed = { x: 0, y: 0 }; - this.cooldown = 0; - } - fire() { - gameObjects.push(new Laser(this.x + 45, this.y - 10)); - this.cooldown = 500; - - let id = setInterval(() => { - if (this.cooldown > 0) { - this.cooldown -= 100; - } else { - clearInterval(id); - } - }, 200); - } - canFire() { - return this.cooldown === 0; - } + }); + }); + + // Remove destroyed objects + gameObjects = gameObjects.filter(go => !go.dead); +} +``` + +**This collision system:** +- **Filters** game objects by type for efficient testing +- **Tests** every laser against every enemy for intersections +- **Emits** collision events when intersections are detected +- **Cleans** up destroyed objects after collision processing + +> ⚠️ **Important**: Add `updateGameObjects()` to your main game loop in `window.onload` to enable collision detection. + +#### 6. Add cooldown system to Hero class + +Enhance the Hero class with firing mechanics and rate limiting: + +```javascript +class Hero extends GameObject { + constructor(x, y) { + super(x, y); + this.width = 99; + this.height = 75; + this.type = "Hero"; + this.speed = { x: 0, y: 0 }; + this.cooldown = 0; + } + + fire() { + gameObjects.push(new Laser(this.x + 45, this.y - 10)); + this.cooldown = 500; + + let id = setInterval(() => { + if (this.cooldown > 0) { + this.cooldown -= 100; + } else { + clearInterval(id); } - ``` + }, 200); + } + + canFire() { + return this.cooldown === 0; + } +} +``` + +**Understanding the enhanced Hero class:** +- **Initializes** cooldown timer at zero (ready to fire) +- **Creates** laser objects positioned above the hero ship +- **Sets** cooldown period to prevent rapid firing +- **Decrements** cooldown timer using interval-based updates +- **Provides** firing status check through `canFire()` method + +### 🔄 **Pedagogical Check-in** +**Complete System Understanding**: Verify your mastery of the collision system: +- ✅ How do rectangle boundaries enable efficient collision detection? +- ✅ Why is object lifecycle management critical for game stability? +- ✅ How does the cooldown system prevent performance issues? +- ✅ What role does event-driven architecture play in collision handling? + +**System Integration**: Your collision detection demonstrates: +- **Mathematical Precision**: Rectangle intersection algorithms +- **Performance Optimization**: Efficient collision testing patterns +- **Memory Management**: Safe object creation and destruction +- **Event Coordination**: Decoupled system communication +- **Real-time Processing**: Frame-based update cycles + +**Professional Patterns**: You've implemented: +- **Separation of Concerns**: Physics, rendering, and input separated +- **Object-Oriented Design**: Inheritance and polymorphism +- **State Management**: Object lifecycle and game state tracking +- **Performance Optimization**: Efficient algorithms for real-time use + +### Testing your implementation + +Your space game now features complete collision detection and combat mechanics. 🚀 Test these new capabilities: +- **Navigate** with arrow keys to verify movement controls +- **Fire lasers** with the spacebar - notice how the cooldown prevents spam-clicking +- **Observe collisions** when lasers hit enemies, triggering removal +- **Verify cleanup** as destroyed objects disappear from the game + +You've successfully implemented a collision detection system using the same mathematical principles that guide spacecraft navigation and robotics. + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Open browser DevTools and set breakpoints in your collision detection function +- [ ] Try modifying the laser speed or enemy movement to see collision effects +- [ ] Experiment with different cooldown values to test firing rates +- [ ] Add `console.log` statements to track collision events in real-time + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand collision detection algorithms +- [ ] Add visual effects like explosions when collisions occur +- [ ] Implement different types of projectiles with varying properties +- [ ] Create power-ups that enhance player abilities temporarily +- [ ] Add sound effects to make collisions more satisfying + +### 📅 **Your Week-Long Physics Programming** +- [ ] Complete the full space game with polished collision systems +- [ ] Implement advanced collision shapes beyond rectangles (circles, polygons) +- [ ] Add particle systems for realistic explosion effects +- [ ] Create complex enemy behavior with collision avoidance +- [ ] Optimize collision detection for better performance with many objects +- [ ] Add physics simulation like momentum and realistic movement + +### 🌟 **Your Month-Long Game Physics Mastery** +- [ ] Build games with advanced physics engines and realistic simulations +- [ ] Learn 3D collision detection and spatial partitioning algorithms +- [ ] Contribute to open source physics libraries and game engines +- [ ] Master performance optimization for graphics-intensive applications +- [ ] Create educational content about game physics and collision detection +- [ ] Build a portfolio showcasing advanced physics programming skills + +## 🎯 Your Collision Detection Mastery Timeline + +```mermaid +timeline + title Collision Detection & Game Physics Learning Progression + + section Foundation (10 minutes) + Rectangle Math: Coordinate systems + : Boundary calculations + : Position tracking + : Dimension management + + section Algorithm Design (20 minutes) + Intersection Logic: Separation testing + : Overlap detection + : Performance optimization + : Edge case handling + + section Game Implementation (30 minutes) + Object Systems: Lifecycle management + : Event coordination + : State tracking + : Memory cleanup + + section Interactive Features (40 minutes) + Combat Mechanics: Projectile systems + : Weapon cooldowns + : Damage calculation + : Visual feedback + + section Advanced Physics (50 minutes) + Real-time Systems: Frame rate optimization + : Spatial partitioning + : Collision response + : Physics simulation + + section Professional Techniques (1 week) + Game Engine Concepts: Component systems + : Physics pipelines + : Performance profiling + : Cross-platform optimization + + section Industry Applications (1 month) + Production Skills: Large-scale optimization + : Team collaboration + : Engine development + : Platform deployment +``` +### 🛠️ Your Game Physics Toolkit Summary + +After completing this lesson, you now have mastered: +- **Collision Mathematics**: Rectangle intersection algorithms and coordinate systems +- **Performance Optimization**: Efficient collision detection for real-time applications +- **Object Lifecycle Management**: Safe creation, updating, and destruction patterns +- **Event-Driven Architecture**: Decoupled systems for collision response +- **Game Loop Integration**: Frame-based physics updates and rendering coordination +- **Input Systems**: Responsive controls with rate limiting and feedback +- **Memory Management**: Efficient object pooling and cleanup strategies + +**Real-World Applications**: Your collision detection skills apply directly to: +- **Interactive Simulations**: Scientific modeling and educational tools +- **User Interface Design**: Drag-and-drop interactions and touch detection +- **Data Visualization**: Interactive charts and clickable elements +- **Mobile Development**: Touch gesture recognition and collision handling +- **Robotics Programming**: Path planning and obstacle avoidance +- **Computer Graphics**: Ray tracing and spatial algorithms + +**Professional Skills Gained**: You can now: +- **Design** efficient algorithms for real-time collision detection +- **Implement** physics systems that scale with object complexity +- **Debug** complex interaction systems using mathematical principles +- **Optimize** performance for different hardware and browser capabilities +- **Architect** maintainable game systems using proven design patterns -At this point, your game has some functionality! You can navigate using the arrow keys, fire a laser with the space bar, and enemies disappear when you hit them. Great job! +**Game Development Concepts Mastered**: +- **Physics Simulation**: Real-time collision detection and response +- **Performance Engineering**: Optimized algorithms for interactive applications +- **Event Systems**: Decoupled communication between game components +- **Object Management**: Efficient lifecycle patterns for dynamic content +- **Input Handling**: Responsive controls with appropriate feedback + +**Next Level**: You're ready to explore advanced physics engines like Matter.js, implement 3D collision detection, or build complex particle systems! + +🌟 **Achievement Unlocked**: You've built a complete physics-based interaction system with professional-grade collision detection! + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Enhance the collision detection system by implementing power-ups that spawn randomly and provide temporary abilities when collected by the hero ship. + +**Prompt:** Create a PowerUp class that extends GameObject and implement collision detection between the hero and power-ups. Add at least two types of power-ups: one that increases fire rate (reduces cooldown) and another that creates a temporary shield. Include spawn logic that creates power-ups at random intervals and positions. --- + + ## 🚀 Challenge -Add an explosion! Check out the game assets in [the Space Art repo](../../../../6-space-game/solution/spaceArt/readme.txt) and try to add an explosion effect when the laser hits an alien. +Add an explosion! Take a look at the game assets in [the Space Art repo](../../../../6-space-game/solution/spaceArt/readme.txt) and try to add an explosion when the laser hits an alien ## Post-Lecture Quiz @@ -299,7 +753,7 @@ Add an explosion! Check out the game assets in [the Space Art repo](../../../../ ## Review & Self Study -Experiment with the intervals in your game so far. What happens when you change them? Read more about [JavaScript timing events](https://www.freecodecamp.org/news/javascript-timing-events-settimeout-and-setinterval/). +Experiment with the intervals in your game thus far. What happens when you change them? Read more about [JavaScript timing events](https://www.freecodecamp.org/news/javascript-timing-events-settimeout-and-setinterval/). ## Assignment @@ -307,5 +761,7 @@ Experiment with the intervals in your game so far. What happens when you change --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/4-collision-detection/assignment.md b/translations/en/6-space-game/4-collision-detection/assignment.md index e4e9a153e..2c79bfabb 100644 --- a/translations/en/6-space-game/4-collision-detection/assignment.md +++ b/translations/en/6-space-game/4-collision-detection/assignment.md @@ -1,25 +1,55 @@ - # Explore Collisions ## Instructions -To gain a better understanding of how collisions work, create a small game with a few objects that collide. Make them move using key presses or mouse clicks, and ensure that something happens to one of the objects when it gets hit. For example, it could be a meteor crashing into the earth or bumper cars colliding. Be creative! +Apply your collision detection knowledge by creating a custom mini-game that demonstrates different types of object interactions. This assignment will help you understand collision mechanics through creative implementation and experimentation. + +### Project requirements + +**Create a small interactive game featuring:** +- **Multiple moving objects** that can be controlled via keyboard or mouse input +- **Collision detection system** using rectangle intersection principles from the lesson +- **Visual feedback** when collisions occur (object destruction, color changes, effects) +- **Game rules** that make collisions meaningful and engaging + +### Creative suggestions + +**Consider implementing one of these scenarios:** +- **Asteroid field**: Navigate a ship through dangerous space debris +- **Bumper cars**: Create a physics-based collision arena +- **Meteor defense**: Protect Earth from incoming space rocks +- **Collection game**: Gather items while avoiding obstacles +- **Territory control**: Competing objects trying to claim space + +### Technical implementation + +**Your solution should demonstrate:** +- Proper use of rectangle-based collision detection +- Event-driven programming for user input +- Object lifecycle management (creation and destruction) +- Clean code organization with appropriate class structure + +### Bonus challenges + +**Enhance your game with additional features:** +- **Particle effects** when collisions occur +- **Sound effects** for different collision types +- **Scoring system** based on collision outcomes +- **Multiple collision types** with different behaviors +- **Progressive difficulty** that increases over time ## Rubric -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------ | ----------------- | -| | A complete, functional code sample is provided, with objects drawn on the canvas, basic collisions occurring, and reactions implemented | Code is incomplete in some way | Code does not work | +| Criteria | Exemplary | Adequate | Needs Improvement | +|----------|-----------|----------|-------------------| +| **Collision Detection** | Implements accurate rectangle-based collision detection with multiple object types and sophisticated interaction rules | Basic collision detection works correctly with simple object interactions | Collision detection has issues or doesn't work consistently | +| **Code Quality** | Clean, well-organized code with proper class structure, meaningful variable names, and appropriate comments | Code works but could be better organized or documented | Code is difficult to understand or poorly structured | +| **User Interaction** | Responsive controls with smooth gameplay, clear visual feedback, and engaging mechanics | Basic controls work with adequate feedback | Controls are unresponsive or confusing | +| **Creativity** | Original concept with unique features, visual polish, and innovative collision behaviors | Standard implementation with some creative elements | Basic functionality without creative enhancements | --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/4-collision-detection/solution/README.md b/translations/en/6-space-game/4-collision-detection/solution/README.md index 85bbb7eb5..b78db64df 100644 --- a/translations/en/6-space-game/4-collision-detection/solution/README.md +++ b/translations/en/6-space-game/4-collision-detection/solution/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/6-space-game/4-collision-detection/your-work/README.md b/translations/en/6-space-game/4-collision-detection/your-work/README.md index a33d8c39f..b78db64df 100644 --- a/translations/en/6-space-game/4-collision-detection/your-work/README.md +++ b/translations/en/6-space-game/4-collision-detection/your-work/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/6-space-game/5-keeping-score/README.md b/translations/en/6-space-game/5-keeping-score/README.md index f86e864a1..bc1234fd6 100644 --- a/translations/en/6-space-game/5-keeping-score/README.md +++ b/translations/en/6-space-game/5-keeping-score/README.md @@ -1,23 +1,80 @@ - # Build a Space Game Part 5: Scoring and Lives +```mermaid +journey + title Your Game Design Journey + section Player Feedback + Understand scoring psychology: 3: Student + Learn visual communication: 4: Student + Design reward systems: 4: Student + section Technical Implementation + Canvas text rendering: 4: Student + State management: 5: Student + Event-driven updates: 5: Student + section Game Polish + User experience design: 5: Student + Balance challenge and reward: 5: Student + Create engaging gameplay: 5: Student +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/37) -In this lesson, you'll learn how to add scoring to a game and manage lives. +Ready to make your space game feel like a real game? Let's add scoring points and managing lives - the core mechanics that transformed early arcade games like Space Invaders from simple demonstrations into addictive entertainment. This is where your game becomes truly playable. + +```mermaid +mindmap + root((Game Feedback Systems)) + Visual Communication + Text Rendering + Icon Display + Color Psychology + Layout Design + Scoring Mechanics + Point Values + Reward Timing + Progress Tracking + Achievement Systems + Life Management + Risk vs Reward + Player Agency + Difficulty Balance + Recovery Mechanics + User Experience + Immediate Feedback + Clear Information + Emotional Response + Engagement Loops + Implementation + Canvas API + State Management + Event Systems + Performance +``` +## Drawing Text on Screen - Your Game's Voice -## Draw text on the screen +To display your score, we need to learn how to render text on the canvas. The `fillText()` method is your primary tool for this - it's the same technique used in classic arcade games to show scores and status information. -To display a game score on the screen, you need to know how to render text. The solution is using the `fillText()` method on the canvas object. You can also customize aspects like the font, text color, and alignment (left, right, center). Below is an example of code that draws text on the screen. +```mermaid +flowchart LR + A["📝 Text Content"] --> B["🎨 Styling"] + B --> C["📍 Positioning"] + C --> D["🖼️ Canvas Render"] + + E["Font Family"] --> B + F["Font Size"] --> B + G["Color"] --> B + H["Alignment"] --> B + + I["X Coordinate"] --> C + J["Y Coordinate"] --> C + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 +``` +You have complete control over the text appearance: ```javascript ctx.font = "30px Arial"; @@ -26,22 +83,74 @@ ctx.textAlign = "right"; ctx.fillText("show this on the screen", 0, 0); ``` -✅ Learn more about [how to add text to a canvas](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_text), and feel free to make your text look more stylish! +✅ Dive deeper into [adding text to a canvas](https://developer.mozilla.org/docs/Web/API/Canvas_API/Tutorial/Drawing_text) - you might be surprised at how creative you can get with fonts and styling! + +## Lives - More Than Just a Number -## Life, as a game concept +In game design, a "life" represents the player's margin for error. This concept dates back to pinball machines, where you'd get multiple balls to play with. In early video games like Asteroids, lives gave players permission to take risks and learn from mistakes. -In games, the concept of "life" is simply a number. In a space game, it's common to assign a set number of lives that decrease one by one when your ship takes damage. It's even better if you can visually represent this with icons like small ships or hearts instead of just a number. +```mermaid +flowchart TD + A["🎮 Player Action"] --> B{"Risk Assessment"} + + B --> C["High Risk, High Reward"] + B --> D["Safe Strategy"] + + C --> E{"Outcome"} + D --> F["Steady Progress"] + + E -->|Success| G["🏆 Big Points"] + E -->|Failure| H["💔 Lose Life"] + + H --> I{"Lives Remaining?"} + I -->|Yes| J["🔄 Try Again"] + I -->|No| K["💀 Game Over"] + + J --> B + G --> B + F --> B + + style C fill:#ffebee + style D fill:#e8f5e8 + style G fill:#e3f2fd + style H fill:#fff3e0 +``` +Visual representation matters significantly - displaying ship icons instead of just "Lives: 3" creates immediate visual recognition, similar to how early arcade cabinets used iconography to communicate across language barriers. -## What to build +## Building Your Game's Reward System -Let's add the following features to your game: +Now we'll implement the core feedback systems that keep players engaged: -- **Game score**: Award points for every enemy ship destroyed. We suggest 100 points per ship. The score should be displayed in the bottom left corner. -- **Life**: Your ship starts with three lives. You lose a life whenever an enemy ship collides with you. Lives should be displayed in the bottom right corner using the following graphic: ![life image](../../../../translated_images/en/life.6fb9f50d53ee0413cd91aa411f7c296e10a1a6de5c4a4197c718b49bf7d63ebf.png). +```mermaid +sequenceDiagram + participant Player + participant GameEngine + participant ScoreSystem + participant LifeSystem + participant Display + + Player->>GameEngine: Shoots Enemy + GameEngine->>ScoreSystem: Award Points + ScoreSystem->>ScoreSystem: +100 points + ScoreSystem->>Display: Update Score + + Player->>GameEngine: Collides with Enemy + GameEngine->>LifeSystem: Lose Life + LifeSystem->>LifeSystem: -1 life + LifeSystem->>Display: Update Lives + + alt Lives > 0 + LifeSystem->>Player: Continue Playing + else Lives = 0 + LifeSystem->>GameEngine: Game Over + end +``` +- **Scoring system**: Each destroyed enemy ship awards 100 points (round numbers are easier for players to calculate mentally). The score displays in the bottom left corner. +- **Life counter**: Your hero starts with three lives - a standard established by early arcade games to balance challenge with playability. Each collision with an enemy costs one life. We'll display remaining lives in the bottom right using ship icons ![life image](../../../../translated_images/en/life.6fb9f50d53ee0413.webp). -## Recommended steps +## Let's Get Building! -Locate the files provided in the `your-work` subfolder. It should contain the following: +First, set up your workspace. Navigate to the files in your `your-work` sub folder. You should see these files: ```bash -| assets @@ -53,24 +162,49 @@ Locate the files provided in the `your-work` subfolder. It should contain the fo -| package.json ``` -Start your project in the `your_work` folder by typing: +To test your game, start the development server from the `your_work` folder: ```bash cd your-work npm start ``` -This will start an HTTP server at `http://localhost:5000`. Open a browser and navigate to that address. At this point, you should see the hero and all the enemies. You can move the hero using the left and right arrow keys and shoot down enemies. +This runs a local server at `http://localhost:5000`. Open this address in your browser to see your game. Test the controls with arrow keys and try shooting enemies to verify everything works. -### Add code +```mermaid +flowchart TD + A["1. Asset Loading"] --> B["2. Game Variables"] + B --> C["3. Collision Detection"] + C --> D["4. Hero Enhancement"] + D --> E["5. Display Functions"] + E --> F["6. Event Handlers"] + + G["Life Icon Image"] --> A + H["Score & Lives Tracking"] --> B + I["Hero-Enemy Intersections"] --> C + J["Points & Life Methods"] --> D + K["Text & Icon Rendering"] --> E + L["Reward & Penalty Logic"] --> F + + F --> M["🎮 Complete Game"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec + style M fill:#e1f5fe +``` +### Time to Code! -1. **Copy the required assets** from the `solution/assets/` folder into the `your-work` folder. This includes the `life.png` asset. Add the `lifeImg` to the `window.onload` function: +1. **Grab the visual assets you'll need**. Copy the `life.png` asset from the `solution/assets/` folder into your `your-work` folder. Then add the lifeImg to your window.onload function: ```javascript lifeImg = await loadTexture("assets/life.png"); ``` -1. Add the `lifeImg` to the list of assets: +1. Don't forget to add the `lifeImg` to your assets list: ```javascript let heroImg, @@ -80,9 +214,9 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na eventEmitter = new EventEmitter(); ``` -2. **Add variables**. Create variables to represent the total score (starting at 0) and remaining lives (starting at 3). Display these values on the screen. +2. **Set up your game variables**. Add some code to track your total score (starting at 0) and remaining lives (starting at 3). We'll display these on screen so players always know where they stand. -3. **Extend the `updateGameObjects()` function**. Modify the `updateGameObjects()` function to handle collisions with enemies: +3. **Implement collision detection**. Extend your `updateGameObjects()` function to detect when enemies collide with your hero: ```javascript enemies.forEach(enemy => { @@ -93,15 +227,15 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na }) ``` -4. **Add `life` and `points`**. - 1. **Initialize variables**. In the `Hero` class, under `this.cooldown = 0`, initialize the life and points variables: +4. **Add life and point tracking to your Hero**. + 1. **Initialize the counters**. Under `this.cooldown = 0` in your `Hero` class, set up life and points: ```javascript this.life = 3; this.points = 0; ``` - 1. **Draw variables on the screen**. Render these values on the screen: + 1. **Show these values to the player**. Create functions to draw these values on screen: ```javascript function drawLife() { @@ -128,18 +262,34 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na ``` - 1. **Add methods to the game loop**. Ensure these functions are added to the `window.onload` function under `updateGameObjects()`: + 1. **Hook everything into your game loop**. Add these functions to your window.onload function right after `updateGameObjects()`: ```javascript drawPoints(); drawLife(); ``` -1. **Implement game rules**. Add the following rules to your game: +### 🔄 **Pedagogical Check-in** +**Game Design Understanding**: Before implementing consequences, ensure you understand: +- ✅ How visual feedback communicates game state to players +- ✅ Why consistent placement of UI elements improves usability +- ✅ The psychology behind point values and life management +- ✅ How canvas text rendering differs from HTML text + +**Quick Self-Test**: Why do arcade games typically use round numbers for point values? +*Answer: Round numbers are easier for players to calculate mentally and create satisfying psychological rewards* + +**User Experience Principles**: You're now applying: +- **Visual Hierarchy**: Important information positioned prominently +- **Immediate Feedback**: Real-time updates to player actions +- **Cognitive Load**: Simple, clear information presentation +- **Emotional Design**: Icons and colors that create player connection + +1. **Implement game consequences and rewards**. Now we'll add the feedback systems that make player actions meaningful: - 1. **Deduct a life for every collision between the hero and an enemy**. + 1. **Collisions cost lives**. Every time your hero crashes into an enemy, you should lose a life. - Extend the `Hero` class to handle life deduction: + Add this method to your `Hero` class: ```javascript decrementLife() { @@ -150,9 +300,9 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na } ``` - 2. **Increase the score by 100 points for every laser that hits an enemy**. + 2. **Shooting enemies earns points**. Each successful hit awards 100 points, providing immediate positive feedback for accurate shooting. - Extend the `Hero` class to handle score increments: + Extend your Hero class with this increment method: ```javascript incrementPoints() { @@ -160,7 +310,7 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na } ``` - Add these functions to your collision event emitters: + Now connect these functions to your collision events: ```javascript eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => { @@ -175,15 +325,161 @@ This will start an HTTP server at `http://localhost:5000`. Open a browser and na }); ``` -✅ Explore other games built using JavaScript/Canvas. What common features do they share? - -By the end of this task, you should see small "life" icons in the bottom right corner, points displayed in the bottom left corner, and observe your life count decrease when colliding with enemies and your score increase when shooting enemies. Great job! Your game is almost finished. +✅ Curious about other games built with JavaScript and Canvas? Do some exploring - you might be amazed at what's possible! + +After implementing these features, test your game to see the complete feedback system in action. You should see life icons in the bottom right, your score in the bottom left, and watch as collisions reduce lives while successful shots increase your score. + +Your game now has the essential mechanics that made early arcade games so compelling - clear goals, immediate feedback, and meaningful consequences for player actions. + +### 🔄 **Pedagogical Check-in** +**Complete Game Design System**: Verify your mastery of player feedback systems: +- ✅ How do scoring mechanics create player motivation and engagement? +- ✅ Why is visual consistency important for user interface design? +- ✅ How does the life system balance challenge with player retention? +- ✅ What role does immediate feedback play in creating satisfying gameplay? + +**System Integration**: Your feedback system demonstrates: +- **User Experience Design**: Clear visual communication and information hierarchy +- **Event-Driven Architecture**: Responsive updates to player actions +- **State Management**: Tracking and displaying dynamic game data +- **Canvas Mastery**: Text rendering and sprite positioning +- **Game Psychology**: Understanding player motivation and engagement + +**Professional Patterns**: You've implemented: +- **MVC Architecture**: Separation of game logic, data, and presentation +- **Observer Pattern**: Event-driven updates for game state changes +- **Component Design**: Reusable functions for rendering and logic +- **Performance Optimization**: Efficient rendering in game loops + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Experiment with different font sizes and colors for the score display +- [ ] Try changing the point values and see how it affects gameplay feel +- [ ] Add console.log statements to track when points and lives change +- [ ] Test edge cases like running out of lives or achieving high scores + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and understand game design psychology +- [ ] Add sound effects for scoring and losing lives +- [ ] Implement a high score system using localStorage +- [ ] Create different point values for different enemy types +- [ ] Add visual effects like screen shake when losing a life + +### 📅 **Your Week-Long Game Design Journey** +- [ ] Complete the full space game with polished feedback systems +- [ ] Implement advanced scoring mechanics like combo multipliers +- [ ] Add achievements and unlockable content +- [ ] Create difficulty progression and balancing systems +- [ ] Design user interfaces for menus and game over screens +- [ ] Study other games to understand engagement mechanisms + +### 🌟 **Your Month-Long Game Development Mastery** +- [ ] Build complete games with sophisticated progression systems +- [ ] Learn game analytics and player behavior measurement +- [ ] Contribute to open source game development projects +- [ ] Master advanced game design patterns and monetization +- [ ] Create educational content about game design and user experience +- [ ] Build a portfolio showcasing game design and development skills + +## 🎯 Your Game Design Mastery Timeline + +```mermaid +timeline + title Game Design & Player Feedback Learning Progression + + section Foundation (10 minutes) + Visual Communication: Text rendering + : Icon design + : Layout principles + : Color psychology + + section Player Psychology (20 minutes) + Motivation Systems: Point values + : Risk vs reward + : Progress feedback + : Achievement design + + section Technical Implementation (30 minutes) + Canvas Mastery: Text positioning + : Sprite rendering + : State management + : Performance optimization + + section Game Balance (40 minutes) + Difficulty Design: Life management + : Scoring curves + : Player retention + : Accessibility + + section User Experience (50 minutes) + Interface Design: Information hierarchy + : Responsive feedback + : Emotional design + : Usability testing + + section Advanced Systems (1 week) + Game Mechanics: Progression systems + : Analytics integration + : Monetization design + : Community features + + section Industry Skills (1 month) + Professional Development: Team collaboration + : Design documentation + : Player research + : Platform optimization +``` +### 🛠️ Your Game Design Toolkit Summary + +After completing this lesson, you now have mastered: +- **Player Psychology**: Understanding motivation, risk/reward, and engagement loops +- **Visual Communication**: Effective UI design using text, icons, and layout +- **Feedback Systems**: Real-time response to player actions and game events +- **State Management**: Tracking and displaying dynamic game data efficiently +- **Canvas Text Rendering**: Professional text display with styling and positioning +- **Event Integration**: Connecting user actions to meaningful game consequences +- **Game Balance**: Designing difficulty curves and player progression systems + +**Real-World Applications**: Your game design skills apply directly to: +- **User Interface Design**: Creating engaging and intuitive interfaces +- **Product Development**: Understanding user motivation and feedback loops +- **Educational Technology**: Gamification and learning engagement systems +- **Data Visualization**: Making complex information accessible and engaging +- **Mobile App Development**: Retention mechanics and user experience design +- **Marketing Technology**: Understanding user behavior and conversion optimization + +**Professional Skills Gained**: You can now: +- **Design** user experiences that motivate and engage users +- **Implement** feedback systems that guide user behavior effectively +- **Balance** challenge and accessibility in interactive systems +- **Create** visual communication that works across different user groups +- **Analyze** user behavior and iterate on design improvements + +**Game Development Concepts Mastered**: +- **Player Motivation**: Understanding what drives engagement and retention +- **Visual Design**: Creating clear, attractive, and functional interfaces +- **System Integration**: Connecting multiple game systems for cohesive experience +- **Performance Optimization**: Efficient rendering and state management +- **Accessibility**: Designing for different skill levels and player needs + +**Next Level**: You're ready to explore advanced game design patterns, implement analytics systems, or study game monetization and player retention strategies! + +🌟 **Achievement Unlocked**: You've built a complete player feedback system with professional game design principles! --- +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Enhance the space game's scoring system by implementing a high score feature with persistent storage and bonus scoring mechanics. + +**Prompt:** Create a high score system that saves the player's best score to localStorage. Add bonus points for consecutive enemy kills (combo system) and implement different point values for different enemy types. Include a visual indicator when the player achieves a new high score and display the current high score on the game screen. + + + ## 🚀 Challenge -Your code is nearly complete. What do you think your next steps should be? +You now have a functional game with scoring and lives. Consider what additional features might enhance the player experience. ## Post-Lecture Quiz @@ -191,7 +487,7 @@ Your code is nearly complete. What do you think your next steps should be? ## Review & Self Study -Research different ways to increment and decrement game scores and lives. There are some interesting game engines like [PlayFab](https://playfab.com). How could using one of these enhance your game? +Want to explore more? Research different approaches to game scoring and life systems. There are fascinating game engines out there like [PlayFab](https://playfab.com) that handle scoring, leaderboards, and player progression. How might integrating something like that take your game to the next level? ## Assignment @@ -199,5 +495,7 @@ Research different ways to increment and decrement game scores and lives. There --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/5-keeping-score/assignment.md b/translations/en/6-space-game/5-keeping-score/assignment.md index 33eb35343..15402715c 100644 --- a/translations/en/6-space-game/5-keeping-score/assignment.md +++ b/translations/en/6-space-game/5-keeping-score/assignment.md @@ -1,12 +1,3 @@ - # Build a Scoring Game ## Instructions diff --git a/translations/en/6-space-game/5-keeping-score/solution/README.md b/translations/en/6-space-game/5-keeping-score/solution/README.md index ef65711ee..b78db64df 100644 --- a/translations/en/6-space-game/5-keeping-score/solution/README.md +++ b/translations/en/6-space-game/5-keeping-score/solution/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/6-space-game/5-keeping-score/your-work/README.md b/translations/en/6-space-game/5-keeping-score/your-work/README.md index 11b54d1ed..b78db64df 100644 --- a/translations/en/6-space-game/5-keeping-score/your-work/README.md +++ b/translations/en/6-space-game/5-keeping-score/your-work/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/6-space-game/6-end-condition/README.md b/translations/en/6-space-game/6-end-condition/README.md index 997a1c9c7..9f5ebde98 100644 --- a/translations/en/6-space-game/6-end-condition/README.md +++ b/translations/en/6-space-game/6-end-condition/README.md @@ -1,41 +1,154 @@ - # Build a Space Game Part 6: End and Restart +```mermaid +journey + title Your Game Completion Journey + section End Conditions + Define win/lose states: 3: Student + Implement condition checking: 4: Student + Handle state transitions: 4: Student + section Player Experience + Design feedback systems: 4: Student + Create restart mechanics: 5: Student + Polish user interface: 5: Student + section System Integration + Manage game lifecycle: 5: Student + Handle memory cleanup: 5: Student + Create complete experience: 5: Student +``` +Every great game needs clear end conditions and a smooth restart mechanism. You've built an impressive space game with movement, combat, and scoring - now it's time to add the final pieces that make it feel complete. + +Your game currently runs indefinitely, like the Voyager probes that NASA launched in 1977 - still traveling through space decades later. While that's fine for space exploration, games need defined endpoints to create satisfying experiences. + +Today, we'll implement proper win/lose conditions and a restart system. By the end of this lesson, you'll have a polished game that players can complete and replay, just like the classic arcade games that defined the medium. + +```mermaid +mindmap + root((Game Completion)) + End Conditions + Victory States + Defeat Conditions + Progress Tracking + State Validation + Player Feedback + Visual Messages + Color Psychology + Clear Communication + Emotional Response + State Management + Game Loop Control + Memory Cleanup + Object Lifecycle + Event Handling + Restart Systems + Input Handling + State Reset + Fresh Initialization + User Experience + Polish Elements + Message Display + Smooth Transitions + Error Prevention + Accessibility +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/39) -There are various ways to define an *end condition* in a game. As the creator, it's up to you to decide why the game ends. Here are some possible reasons, assuming we're talking about the space game you've been building so far: +## Understanding Game End Conditions -- **`N` Enemy ships have been destroyed**: It's common in games divided into levels to require the destruction of `N` enemy ships to complete a level. -- **Your ship has been destroyed**: In some games, you lose if your ship is destroyed. Another common approach is to introduce the concept of lives. Each time your ship is destroyed, you lose a life. Once all lives are gone, the game ends. -- **You've collected `N` points**: Another typical end condition is reaching a certain number of points. Points can be earned in various ways, such as destroying enemy ships or collecting items dropped when ships are destroyed. -- **Complete a level**: This might involve multiple conditions, such as destroying `X` enemy ships, collecting `Y` points, or obtaining a specific item. +When should your game end? This fundamental question has shaped game design since the early arcade era. Pac-Man ends when you're caught by ghosts or clear all dots, while Space Invaders ends when aliens reach the bottom or you destroy them all. -## Restarting +As the game creator, you define the victory and defeat conditions. For our space game, here are proven approaches that create engaging gameplay: -If players enjoy your game, they'll likely want to replay it. When the game ends for any reason, you should provide an option to restart. +```mermaid +flowchart TD + A["🎮 Game Start"] --> B{"Check Conditions"} + + B --> C["Enemy Count"] + B --> D["Hero Lives"] + B --> E["Score Threshold"] + B --> F["Level Progress"] + + C --> C1{"Enemies = 0?"} + D --> D1{"Lives = 0?"} + E --> E1{"Score ≥ Target?"} + F --> F1{"Objectives Complete?"} + + C1 -->|Yes| G["🏆 Victory"] + D1 -->|Yes| H["💀 Defeat"] + E1 -->|Yes| G + F1 -->|Yes| G + + C1 -->|No| B + D1 -->|No| B + E1 -->|No| B + F1 -->|No| B + + G --> I["🔄 Restart Option"] + H --> I + + style G fill:#e8f5e8 + style H fill:#ffebee + style I fill:#e3f2fd +``` +- **`N` Enemy ships have been destroyed**: It's quite common if you divide up a game into different levels that you need to destroy `N` Enemy ships to complete a level +- **Your ship has been destroyed**: There are definitely games where you lose the game if your ship is destroyed. Another common approach is that you have the concept of lives. Every time a your ship is destroyed it deducts a life. Once all lives have been lost then you lose the game. +- **You've collected `N` points**: Another common end condition is for you to collect points. How you get points is up to you but it's quite common to assign points to various activities like destroying an enemy ship or maybe collect items that items *drop* when they are destroyed. +- **Complete a level**: This might involve several conditions such as `X` enemy ships destroyed, `Y` points collected or maybe that a specific item has been collected. -✅ Take a moment to think about the conditions under which a game ends and how you're prompted to restart. +## Implementing Game Restart Functionality -## What to build +Good games encourage replayability through smooth restart mechanisms. When players complete a game (or meet defeat), they often want to try again immediately - whether to beat their score or improve their performance. -You will add the following rules to your game: +```mermaid +stateDiagram-v2 + [*] --> Playing: Game Start + Playing --> Victory: All enemies destroyed + Playing --> Defeat: Lives = 0 + + Victory --> MessageDisplay: Show win message + Defeat --> MessageDisplay: Show lose message + + MessageDisplay --> WaitingRestart: Press Enter prompt + WaitingRestart --> Resetting: Enter key pressed + + Resetting --> CleanupMemory: Clear intervals + CleanupMemory --> ClearEvents: Remove listeners + ClearEvents --> InitializeGame: Fresh start + InitializeGame --> Playing: New game begins + + note right of MessageDisplay + Color-coded feedback: + Green = Victory + Red = Defeat + end note + + note right of Resetting + Complete state reset + prevents memory leaks + end note +``` +Tetris exemplifies this perfectly: when your blocks reach the top, you can instantly start a new game without navigating complex menus. We'll build a similar restart system that cleanly resets the game state and gets players back into action quickly. + +✅ **Reflection**: Think about the games you've played. Under what conditions do they end, and how are you prompted to restart? What makes a restart experience feel smooth versus frustrating? + +## What You'll Build + +You'll implement the final features that transform your project into a complete game experience. These elements distinguish polished games from basic prototypes. + +**Here's what we're adding today:** + +1. **Victory condition**: Blast all the enemies and get a proper celebration (you've earned it!) +2. **Defeat condition**: Run out of lives and face the music with a defeat screen +3. **Restart mechanism**: Hit Enter to jump right back in - because one game is never enough +4. **State management**: Clean slate every time - no leftover enemies or weird glitches from the last game -1. **Winning the game**: When all enemy ships are destroyed, the player wins. Display a victory message to indicate this. -2. **Restart**: When all lives are lost or the game is won, provide an option to restart. Remember to reinitialize the game and clear the previous game state. +## Getting Started -## Recommended steps +Let's prepare your development environment. You should have all your space game files from the previous lessons ready. -Locate the files in the `your-work` subfolder. It should contain the following: +**Your project should look something like this:** ```bash -| assets @@ -48,175 +161,500 @@ Locate the files in the `your-work` subfolder. It should contain the following: -| package.json ``` -Start your project in the `your_work` folder by typing: +**Start your development server:** ```bash cd your-work npm start ``` -This will start an HTTP server at `http://localhost:5000`. Open a browser and navigate to that address. Your game should be in a playable state. +**This command:** +- Runs a local server on `http://localhost:5000` +- Serves your files properly +- Automatically refreshes when you make changes -> tip: To avoid warnings in Visual Studio Code, edit the `window.onload` function to call `gameLoopId` as is (without `let`), and declare `gameLoopId` at the top of the file independently: `let gameLoopId;` +Open `http://localhost:5000` in your browser and verify your game is running. You should be able to move, shoot, and interact with enemies. Once confirmed, we can proceed with the implementation. + +> 💡 **Pro Tip**: To avoid warnings in Visual Studio Code, declare `gameLoopId` at the top of your file as `let gameLoopId;` instead of declaring it inside the `window.onload` function. This follows modern JavaScript variable declaration best practices. + +```mermaid +flowchart TD + A["1. Condition Tracking"] --> B["2. Event Handlers"] + B --> C["3. Message Constants"] + C --> D["4. Restart Controls"] + D --> E["5. Message Display"] + E --> F["6. Reset System"] + + G["isHeroDead()\nisEnemiesDead()"] --> A + H["Collision Events\nEnd Game Events"] --> B + I["GAME_END_WIN\nGAME_END_LOSS"] --> C + J["Enter Key\nRestart Trigger"] --> D + K["Victory/Defeat\nColor-coded Text"] --> E + L["State Cleanup\nFresh Initialization"] --> F + + F --> M["🎮 Complete Game"] + + style A fill:#e3f2fd + style B fill:#e8f5e8 + style C fill:#fff3e0 + style D fill:#f3e5f5 + style E fill:#e0f2f1 + style F fill:#fce4ec + style M fill:#e1f5fe +``` +## Implementation Steps -### Add code +### Step 1: Create End Condition Tracking Functions -1. **Track end condition**: Add code to track the number of enemies or whether the hero ship has been destroyed by adding these two functions: +We need functions to monitor when the game should end. Like sensors on the International Space Station that constantly monitor critical systems, these functions will continuously check the game state. - ```javascript - function isHeroDead() { - return hero.life <= 0; +```javascript +function isHeroDead() { + return hero.life <= 0; +} + +function isEnemiesDead() { + const enemies = gameObjects.filter((go) => go.type === "Enemy" && !go.dead); + return enemies.length === 0; +} +``` + +**Here's what's happening under the hood:** +- **Checks** if our hero is out of lives (ouch!) +- **Counts** how many enemies are still alive and kicking +- **Returns** `true` when the battlefield is clear of enemies +- **Uses** simple true/false logic to keep things straightforward +- **Filters** through all game objects to find the survivors + +### Step 2: Update Event Handlers for End Conditions + +Now we'll connect these condition checks to the game's event system. Every time a collision occurs, the game will evaluate whether it triggers an end condition. This creates immediate feedback for critical game events. + +```mermaid +sequenceDiagram + participant Collision + participant GameLogic + participant Conditions + participant EventSystem + participant Display + + Collision->>GameLogic: Laser hits enemy + GameLogic->>GameLogic: Destroy objects + GameLogic->>Conditions: Check isEnemiesDead() + + alt All enemies defeated + Conditions->>EventSystem: Emit GAME_END_WIN + EventSystem->>Display: Show victory message + else Enemies remain + Conditions->>GameLogic: Continue game + end + + Collision->>GameLogic: Enemy hits hero + GameLogic->>GameLogic: Decrease lives + GameLogic->>Conditions: Check isHeroDead() + + alt Lives = 0 + Conditions->>EventSystem: Emit GAME_END_LOSS + EventSystem->>Display: Show defeat message + else Lives remain + GameLogic->>Conditions: Check isEnemiesDead() + alt All enemies defeated + Conditions->>EventSystem: Emit GAME_END_WIN + end + end +``` +```javascript +eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => { + first.dead = true; + second.dead = true; + hero.incrementPoints(); + + if (isEnemiesDead()) { + eventEmitter.emit(Messages.GAME_END_WIN); } +}); + +eventEmitter.on(Messages.COLLISION_ENEMY_HERO, (_, { enemy }) => { + enemy.dead = true; + hero.decrementLife(); + if (isHeroDead()) { + eventEmitter.emit(Messages.GAME_END_LOSS); + return; // loss before victory + } + if (isEnemiesDead()) { + eventEmitter.emit(Messages.GAME_END_WIN); + } +}); + +eventEmitter.on(Messages.GAME_END_WIN, () => { + endGame(true); +}); + +eventEmitter.on(Messages.GAME_END_LOSS, () => { + endGame(false); +}); +``` + +**What's going on here:** +- **Laser hits enemy**: Both disappear, you get points, and we check if you've won +- **Enemy hits you**: You lose a life, and we check if you're still breathing +- **Smart ordering**: We check for defeat first (nobody wants to win and lose at the same time!) +- **Instant reactions**: As soon as something important happens, the game knows about it + +### Step 3: Add New Message Constants + +You'll need to add new message types to your `Messages` constant object. These constants help maintain consistency and prevent typos in your event system. + +```javascript +GAME_END_LOSS: "GAME_END_LOSS", +GAME_END_WIN: "GAME_END_WIN", +``` + +**In the above, we've:** +- **Added** constants for game end events to maintain consistency +- **Used** descriptive names that clearly indicate the event purpose +- **Followed** the existing naming convention for message types + +### Step 4: Implement Restart Controls + +Now you'll add keyboard controls that allow players to restart the game. The Enter key is a natural choice since it's commonly associated with confirming actions and starting new games. + +**Add Enter key detection to your existing keydown event listener:** + +```javascript +else if(evt.key === "Enter") { + eventEmitter.emit(Messages.KEY_EVENT_ENTER); +} +``` + +**Add the new message constant:** + +```javascript +KEY_EVENT_ENTER: "KEY_EVENT_ENTER", +``` + +**What you need to know:** +- **Extends** your existing keyboard event handling system +- **Uses** the Enter key as the restart trigger for intuitive user experience +- **Emits** a custom event that other parts of your game can listen for +- **Maintains** the same pattern as your other keyboard controls + +### Step 5: Create the Message Display System - function isEnemiesDead() { - const enemies = gameObjects.filter((go) => go.type === "Enemy" && !go.dead); - return enemies.length === 0; +Your game needs to communicate results clearly to players. We'll create a message system that displays victory and defeat states using color-coded text, similar to the terminal interfaces of early computer systems where green indicated success and red signaled errors. + +**Create the `displayMessage()` function:** + +```javascript +function displayMessage(message, color = "red") { + ctx.font = "30px Arial"; + ctx.fillStyle = color; + ctx.textAlign = "center"; + ctx.fillText(message, canvas.width / 2, canvas.height / 2); +} +``` + +**Step by step, here's what's happening:** +- **Sets** the font size and family for clear, readable text +- **Applies** a color parameter with "red" as the default for warnings +- **Centers** the text horizontally and vertically on the canvas +- **Uses** modern JavaScript default parameters for flexible color options +- **Leverages** the canvas 2D context for direct text rendering + +**Create the `endGame()` function:** + +```javascript +function endGame(win) { + clearInterval(gameLoopId); + + // Set a delay to ensure any pending renders complete + setTimeout(() => { + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = "black"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + if (win) { + displayMessage( + "Victory!!! Pew Pew... - Press [Enter] to start a new game Captain Pew Pew", + "green" + ); + } else { + displayMessage( + "You died !!! Press [Enter] to start a new game Captain Pew Pew" + ); } - ``` - -2. **Add logic to message handlers**: Update the `eventEmitter` to handle these conditions: - - ```javascript - eventEmitter.on(Messages.COLLISION_ENEMY_LASER, (_, { first, second }) => { - first.dead = true; - second.dead = true; - hero.incrementPoints(); - - if (isEnemiesDead()) { - eventEmitter.emit(Messages.GAME_END_WIN); - } - }); - - eventEmitter.on(Messages.COLLISION_ENEMY_HERO, (_, { enemy }) => { - enemy.dead = true; - hero.decrementLife(); - if (isHeroDead()) { - eventEmitter.emit(Messages.GAME_END_LOSS); - return; // loss before victory - } - if (isEnemiesDead()) { - eventEmitter.emit(Messages.GAME_END_WIN); - } - }); - - eventEmitter.on(Messages.GAME_END_WIN, () => { - endGame(true); - }); - - eventEmitter.on(Messages.GAME_END_LOSS, () => { - endGame(false); - }); - ``` - -3. **Add new message types**: Add these messages to the constants object: - - ```javascript - GAME_END_LOSS: "GAME_END_LOSS", - GAME_END_WIN: "GAME_END_WIN", - ``` - -4. **Add restart code**: Implement code to restart the game when a specific button is pressed. - - 1. **Listen for the `Enter` key press**: Update your window's eventListener to detect this key press: - - ```javascript - else if(evt.key === "Enter") { - eventEmitter.emit(Messages.KEY_EVENT_ENTER); - } - ``` - - 2. **Add a restart message**: Add this message to your Messages constant: - - ```javascript - KEY_EVENT_ENTER: "KEY_EVENT_ENTER", - ``` - -5. **Implement game rules**: Add the following game rules: - - 1. **Player win condition**: When all enemy ships are destroyed, display a victory message. - - 1. First, create a `displayMessage()` function: - - ```javascript - function displayMessage(message, color = "red") { - ctx.font = "30px Arial"; - ctx.fillStyle = color; - ctx.textAlign = "center"; - ctx.fillText(message, canvas.width / 2, canvas.height / 2); - } - ``` - - 2. Then, create an `endGame()` function: - - ```javascript - function endGame(win) { - clearInterval(gameLoopId); + }, 200) +} +``` + +**What this function does:** +- **Freezes** everything in place - no more moving ships or lasers +- **Takes** a tiny pause (200ms) to let the last frame finish drawing +- **Wipes** the screen clean and paints it black for dramatic effect +- **Shows** different messages for winners and losers +- **Color codes** the news - green for good, red for... well, not so good +- **Tells** players exactly how to jump back in + +### 🔄 **Pedagogical Check-in** +**Game State Management**: Before implementing reset functionality, ensure you understand: +- ✅ How end conditions create clear gameplay objectives +- ✅ Why visual feedback is essential for player understanding +- ✅ The importance of proper cleanup in preventing memory leaks +- ✅ How event-driven architecture enables clean state transitions + +**Quick Self-Test**: What would happen if you didn't clear event listeners during reset? +*Answer: Memory leaks and duplicate event handlers causing unpredictable behavior* + +**Game Design Principles**: You're now implementing: +- **Clear Objectives**: Players know exactly what defines success and failure +- **Immediate Feedback**: Game state changes are communicated instantly +- **User Control**: Players can restart when they're ready +- **System Reliability**: Proper cleanup prevents bugs and performance issues + +### Step 6: Implement Game Reset Functionality + +The reset system needs to completely clean up the current game state and initialize a fresh game session. This ensures players get a clean start without any leftover data from the previous game. + +**Create the `resetGame()` function:** + +```javascript +function resetGame() { + if (gameLoopId) { + clearInterval(gameLoopId); + eventEmitter.clear(); + initGame(); + gameLoopId = setInterval(() => { + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.fillStyle = "black"; + ctx.fillRect(0, 0, canvas.width, canvas.height); + drawPoints(); + drawLife(); + updateGameObjects(); + drawGameObjects(ctx); + }, 100); + } +} +``` + +**Let's understand each part:** +- **Checks** if a game loop is currently running before resetting +- **Clears** the existing game loop to stop all current game activity +- **Removes** all event listeners to prevent memory leaks +- **Reinitializes** the game state with fresh objects and variables +- **Starts** a new game loop with all the essential game functions +- **Maintains** the same 100ms interval for consistent game performance + +**Add the Enter key event handler to your `initGame()` function:** + +```javascript +eventEmitter.on(Messages.KEY_EVENT_ENTER, () => { + resetGame(); +}); +``` + +**Add the `clear()` method to your EventEmitter class:** + +```javascript +clear() { + this.listeners = {}; +} +``` + +**Key points to remember:** +- **Connects** the Enter key press to the reset game functionality +- **Registers** this event listener during game initialization +- **Provides** a clean way to remove all event listeners when resetting +- **Prevents** memory leaks by clearing event handlers between games +- **Resets** the listeners object to an empty state for fresh initialization + +## Congratulations! 🎉 + +👽 💥 🚀 You've successfully built a complete game from the ground up. Like the programmers who created the first video games in the 1970s, you've transformed lines of code into an interactive experience with proper game mechanics and user feedback. 🚀 💥 👽 + +**You've accomplished:** +- **Implemented** complete win and lose conditions with user feedback +- **Created** a seamless restart system for continuous gameplay +- **Designed** clear visual communication for game states +- **Managed** complex game state transitions and cleanup +- **Assembled** all components into a cohesive, playable game + +### 🔄 **Pedagogical Check-in** +**Complete Game Development System**: Celebrate your mastery of the full game development cycle: +- ✅ How do end conditions create satisfying player experiences? +- ✅ Why is proper state management critical for game stability? +- ✅ How does visual feedback enhance player understanding? +- ✅ What role does the restart system play in player retention? + +**System Mastery**: Your complete game demonstrates: +- **Full-Stack Game Development**: From graphics to input to state management +- **Professional Architecture**: Event-driven systems with proper cleanup +- **User Experience Design**: Clear feedback and intuitive controls +- **Performance Optimization**: Efficient rendering and memory management +- **Polish and Completeness**: All the details that make a game feel finished + +**Industry-Ready Skills**: You've implemented: +- **Game Loop Architecture**: Real-time systems with consistent performance +- **Event-Driven Programming**: Decoupled systems that scale effectively +- **State Management**: Complex data handling and lifecycle management +- **User Interface Design**: Clear communication and responsive controls +- **Testing and Debugging**: Iterative development and problem-solving + +### ⚡ **What You Can Do in the Next 5 Minutes** +- [ ] Play your complete game and test all victory and defeat conditions +- [ ] Experiment with different end condition parameters +- [ ] Try adding console.log statements to track game state changes +- [ ] Share your game with friends and gather feedback + +### 🎯 **What You Can Accomplish This Hour** +- [ ] Complete the post-lesson quiz and reflect on your game development journey +- [ ] Add audio effects for victory and defeat states +- [ ] Implement additional end conditions like time limits or bonus objectives +- [ ] Create different difficulty levels with varying enemy counts +- [ ] Polish the visual presentation with better fonts and colors + +### 📅 **Your Week-Long Game Development Mastery** +- [ ] Complete the enhanced space game with multiple levels and progression +- [ ] Add advanced features like power-ups, different enemy types, and special weapons +- [ ] Create a high score system with persistent storage +- [ ] Design user interfaces for menus, settings, and game options +- [ ] Optimize performance for different devices and browsers +- [ ] Deploy your game online and share it with the community + +### 🌟 **Your Month-Long Game Development Career** +- [ ] Build multiple complete games exploring different genres and mechanics +- [ ] Learn advanced game development frameworks like Phaser or Three.js +- [ ] Contribute to open source game development projects +- [ ] Study game design principles and player psychology +- [ ] Create a portfolio showcasing your game development skills +- [ ] Connect with the game development community and continue learning + +## 🎯 Your Complete Game Development Mastery Timeline + +```mermaid +timeline + title Complete Game Development Learning Progression + + section Foundation (Lessons 1-2) + Game Architecture: Project structure + : Asset management + : Canvas basics + : Event systems - // set a delay so we are sure any paints have finished - setTimeout(() => { - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = "black"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - if (win) { - displayMessage( - "Victory!!! Pew Pew... - Press [Enter] to start a new game Captain Pew Pew", - "green" - ); - } else { - displayMessage( - "You died !!! Press [Enter] to start a new game Captain Pew Pew" - ); - } - }, 200) - } - ``` - - 2. **Restart logic**: When all lives are lost or the player wins, display a message indicating the game can be restarted. Restart the game when the restart key is pressed (you can choose which key to use). - - 1. Create the `resetGame()` function: - - ```javascript - function resetGame() { - if (gameLoopId) { - clearInterval(gameLoopId); - eventEmitter.clear(); - initGame(); - gameLoopId = setInterval(() => { - ctx.clearRect(0, 0, canvas.width, canvas.height); - ctx.fillStyle = "black"; - ctx.fillRect(0, 0, canvas.width, canvas.height); - drawPoints(); - drawLife(); - updateGameObjects(); - drawGameObjects(ctx); - }, 100); - } - } - ``` - - 2. Add a call to the `eventEmitter` to reset the game in `initGame()`: - - ```javascript - eventEmitter.on(Messages.KEY_EVENT_ENTER, () => { - resetGame(); - }); - ``` - - 3. Add a `clear()` function to the EventEmitter: - - ```javascript - clear() { - this.listeners = {}; - } - ``` - -👽 💥 🚀 Congratulations, Captain! Your game is complete! Well done! 🚀 💥 👽 + section Interaction Systems (Lessons 3-4) + Player Control: Input handling + : Movement mechanics + : Collision detection + : Physics simulation + + section Game Mechanics (Lesson 5) + Feedback Systems: Scoring mechanisms + : Life management + : Visual communication + : Player motivation + + section Game Completion (Lesson 6) + Polish & Flow: End conditions + : State management + : Restart systems + : User experience + + section Advanced Features (1 week) + Enhancement Skills: Audio integration + : Visual effects + : Level progression + : Performance optimization + + section Professional Development (1 month) + Industry Readiness: Framework mastery + : Team collaboration + : Portfolio development + : Community engagement + + section Career Advancement (3 months) + Specialization: Advanced game engines + : Platform deployment + : Monetization strategies + : Industry networking +``` +### 🛠️ Your Complete Game Development Toolkit Summary ---- +After completing this entire space game series, you now have mastered: +- **Game Architecture**: Event-driven systems, game loops, and state management +- **Graphics Programming**: Canvas API, sprite rendering, and visual effects +- **Input Systems**: Keyboard handling, collision detection, and responsive controls +- **Game Design**: Player feedback, progression systems, and engagement mechanics +- **Performance Optimization**: Efficient rendering, memory management, and frame rate control +- **User Experience**: Clear communication, intuitive controls, and polish details +- **Professional Patterns**: Clean code, debugging techniques, and project organization + +**Real-World Applications**: Your game development skills apply directly to: +- **Interactive Web Applications**: Dynamic interfaces and real-time systems +- **Data Visualization**: Animated charts and interactive graphics +- **Educational Technology**: Gamification and engaging learning experiences +- **Mobile Development**: Touch-based interactions and performance optimization +- **Simulation Software**: Physics engines and real-time modeling +- **Creative Industries**: Interactive art, entertainment, and digital experiences + +**Professional Skills Gained**: You can now: +- **Architect** complex interactive systems from scratch +- **Debug** real-time applications using systematic approaches +- **Optimize** performance for smooth user experiences +- **Design** engaging user interfaces and interaction patterns +- **Collaborate** effectively on technical projects with proper code organization + +**Game Development Concepts Mastered**: +- **Real-time Systems**: Game loops, frame rate management, and performance +- **Event-Driven Architecture**: Decoupled systems and message passing +- **State Management**: Complex data handling and lifecycle management +- **User Interface Programming**: Canvas graphics and responsive design +- **Game Design Theory**: Player psychology and engagement mechanics + +**Next Level**: You're ready to explore advanced game frameworks, 3D graphics, multiplayer systems, or transition into professional game development roles! + +🌟 **Achievement Unlocked**: You've completed a full game development journey and built a professional-quality interactive experience from scratch! + +**Welcome to the game development community!** 🎮✨ + +## GitHub Copilot Agent Challenge 🚀 + +Use the Agent mode to complete the following challenge: + +**Description:** Enhance the space game by implementing a level progression system with increasing difficulty and bonus features. + +**Prompt:** Create a multi-level space game system where each level has more enemy ships with increased speed and health. Add a scoring multiplier that increases with each level, and implement power-ups (like rapid fire or shield) that randomly appear when enemies are destroyed. Include a level completion bonus and display the current level on screen alongside the existing score and lives. + +Learn more about [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) here. + +## 🚀 Optional Enhancement Challenge + +**Add Audio to Your Game**: Enhance your gameplay experience by implementing sound effects! Consider adding audio for: + +- **Laser shots** when the player fires +- **Enemy destruction** when ships are hit +- **Hero damage** when the player takes hits +- **Victory music** when the game is won +- **Defeat sound** when the game is lost + +**Audio implementation example:** + +```javascript +// Create audio objects +const laserSound = new Audio('assets/laser.wav'); +const explosionSound = new Audio('assets/explosion.wav'); + +// Play sounds during game events +function playLaserSound() { + laserSound.currentTime = 0; // Reset to beginning + laserSound.play(); +} +``` -## 🚀 Challenge +**What you need to know:** +- **Creates** Audio objects for different sound effects +- **Resets** the `currentTime` to allow rapid-fire sound effects +- **Handles** browser autoplay policies by triggering sounds from user interactions +- **Manages** audio volume and timing for better game experience -Add sound! Can you enhance your gameplay by adding sound effects, such as for laser hits, the hero's death, or a victory? Check out this [sandbox](https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_audio_play) to learn how to play sound using JavaScript. +> 💡 **Learning Resource**: Explore this [audio sandbox](https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_audio_play) to learn more about implementing audio in JavaScript games. ## Post-Lecture Quiz @@ -224,7 +662,7 @@ Add sound! Can you enhance your gameplay by adding sound effects, such as for la ## Review & Self Study -Your assignment is to create a new sample game. Explore some interesting games to get inspiration for the type of game you might want to build. +Your assignment is to create a fresh sample game, so explore some of the interesting games out there to see what type of game you might build. ## Assignment @@ -232,5 +670,7 @@ Your assignment is to create a new sample game. Explore some interesting games t --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please note that automated translations may contain errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is recommended. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/6-end-condition/assignment.md b/translations/en/6-space-game/6-end-condition/assignment.md index a36073c75..23ee82181 100644 --- a/translations/en/6-space-game/6-end-condition/assignment.md +++ b/translations/en/6-space-game/6-end-condition/assignment.md @@ -1,33 +1,164 @@ - # Build a Sample Game -## Instructions +## Assignment Overview -Try creating a small game to practice different end conditions. Experiment with scenarios like reaching a certain number of points, the hero losing all lives, or defeating all monsters. Build something simple, such as a console-based adventure game. Use the game flow below as inspiration: +Now that you've mastered game end conditions and restart functionality in your space game, it's time to apply these concepts to a completely new gaming experience. You'll design and build your own game that demonstrates different end condition patterns and restart mechanics. + +This assignment challenges you to think creatively about game design while practicing the technical skills you've learned. You'll explore different victory and defeat scenarios, implement player progression, and create engaging restart experiences. + +## Project Requirements + +### Core Game Features + +Your game must include the following essential elements: + +**End Condition Variety**: Implement at least two different ways the game can end: +- **Point-based victory**: Player reaches a target score or collects specific items +- **Life-based defeat**: Player loses all available lives or health points +- **Objective completion**: All enemies defeated, specific items collected, or goals achieved +- **Time-based**: Game ends after a set duration or countdown reaches zero + +**Restart Functionality**: +- **Clear game state**: Remove all previous game objects and reset variables +- **Reinitialize systems**: Start fresh with new player stats, enemies, and objectives +- **User-friendly controls**: Provide clear instructions for restarting the game + +**Player Feedback**: +- **Victory messages**: Celebrate player achievements with positive feedback +- **Defeat messages**: Provide encouraging messages that motivate replay +- **Progress indicators**: Show current score, lives, or objective status + +### Game Ideas and Inspiration + +Choose one of these game concepts or create your own: + +#### 1. Console Adventure Game +Create a text-based adventure with combat mechanics: ``` Hero> Strikes with broadsword - orc takes 3p damage -Orc> Hits with club - hero takes 2p damage +Orc> Hits with club - hero takes 2p damage Hero> Kicks - orc takes 1p damage Game> Orc is defeated - Hero collects 2 coins Game> ****No more monsters, you have conquered the evil fortress**** ``` -## Rubric +**Key features to implement:** +- **Turn-based combat** with different attack options +- **Health points** for both player and enemies +- **Inventory system** for collecting coins or items +- **Multiple enemy types** with varying difficulty +- **Victory condition** when all enemies are defeated + +#### 2. Collection Game +- **Objective**: Collect specific items while avoiding obstacles +- **End conditions**: Reach target collection count or lose all lives +- **Progression**: Items become harder to reach as game continues + +#### 3. Puzzle Game +- **Objective**: Solve increasingly difficult puzzles +- **End conditions**: Complete all levels or run out of moves/time +- **Restart**: Reset to first level with cleared progress + +#### 4. Defense Game +- **Objective**: Protect your base from waves of enemies +- **End conditions**: Survive all waves (victory) or base is destroyed (defeat) +- **Progression**: Enemy waves increase in difficulty and number + +## Implementation Guidelines + +### Getting Started + +1. **Plan your game design**: + - Sketch the basic gameplay loop + - Define your end conditions clearly + - Identify what data needs to be reset on restart + +2. **Set up your project structure**: + ``` + my-game/ + ├── index.html + ├── style.css + ├── game.js + └── README.md + ``` + +3. **Create your core game loop**: + - Initialize game state + - Handle user input + - Update game logic + - Check end conditions + - Render current state + +### Technical Requirements + +**Use Modern JavaScript**: +- Apply `const` and `let` for variable declarations +- Use arrow functions where appropriate +- Implement ES6+ features like template literals and destructuring + +**Event-Driven Architecture**: +- Create event handlers for user interactions +- Implement game state changes through events +- Use event listeners for restart functionality + +**Clean Code Practices**: +- Write functions with single responsibilities +- Use descriptive variable and function names +- Add comments explaining game logic and rules +- Organize code into logical sections + +## Submission Requirements + +### Deliverables + +1. **Complete game files**: All HTML, CSS, and JavaScript files needed to run your game +2. **README.md**: Documentation explaining: + - How to play your game + - What end conditions you implemented + - Instructions for restarting + - Any special features or mechanics +3. **Code comments**: Clear explanations of your game logic and algorithms + +### Testing Checklist + +Before submitting, verify that your game: + +- [ ] **Runs without errors** in the browser console +- [ ] **Implements multiple end conditions** as specified +- [ ] **Restarts properly** with clean state reset +- [ ] **Provides clear feedback** to players about game status +- [ ] **Uses modern JavaScript** syntax and best practices +- [ ] **Includes comprehensive documentation** in README.md + +## Assessment Rubric + +| Criteria | Exemplary (4) | Proficient (3) | Developing (2) | Beginning (1) | +|----------|---------------|----------------|----------------|--------------| +| **Game Functionality** | Complete game with multiple end conditions, smooth restart, and polished gameplay experience | Full game with basic end conditions and functional restart mechanism | Partial game with some end conditions implemented, restart may have minor issues | Incomplete game with limited functionality and significant bugs | +| **Code Quality** | Clean, well-organized code using modern JavaScript practices, comprehensive comments, and excellent structure | Good code organization with modern syntax, adequate comments, and clear structure | Basic code organization with some modern practices, minimal comments | Poor code organization, outdated syntax, lacking comments and structure | +| **User Experience** | Intuitive gameplay with clear instructions, excellent feedback, and engaging end/restart experience | Good gameplay with adequate instructions and feedback, functional end/restart | Basic gameplay with minimal instructions, limited feedback on game state | Confusing gameplay with unclear instructions and poor user feedback | +| **Technical Implementation** | Demonstrates mastery of game development concepts, event handling, and state management | Shows solid understanding of game concepts with good implementation | Basic understanding with acceptable implementation | Limited understanding with poor implementation | +| **Documentation** | Comprehensive README with clear instructions, well-documented code, and thorough testing evidence | Good documentation with clear instructions and adequate code comments | Basic documentation with minimal instructions | Poor or missing documentation | + +### Grading Scale +- **Exemplary (16-20 points)**: Exceeds expectations with creative features and polished implementation +- **Proficient (12-15 points)**: Meets all requirements with solid execution +- **Developing (8-11 points)**: Meets most requirements with minor issues +- **Beginning (4-7 points)**: Meets some requirements but needs significant improvement + +## Additional Learning Resources + +- [MDN Game Development Guide](https://developer.mozilla.org/en-US/docs/Games) +- [JavaScript Game Development Tutorials](https://developer.mozilla.org/en-US/docs/Games/Tutorials) +- [Canvas API Documentation](https://developer.mozilla.org/en-US/docs/Web/API/Canvas_API) +- [Game Design Principles](https://www.gamasutra.com/blogs/) -| Criteria | Outstanding | Satisfactory | Needs Improvement | -| -------- | ---------------------- | --------------------------- | -------------------------- | -| | complete game provided | partial game provided | partial game has bugs | +> 💡 **Pro Tip**: Start simple and add features incrementally. A well-polished simple game is better than a complex game with bugs! --- -**Disclaimer**: -This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we aim for accuracy, please note that automated translations may include errors or inaccuracies. The original document in its native language should be regarded as the authoritative source. For critical information, professional human translation is advised. We are not responsible for any misunderstandings or misinterpretations resulting from the use of this translation. \ No newline at end of file + +**Disclaimer**: +This document has been translated using the AI translation service [Co-op Translator](https://github.com/Azure/co-op-translator). While we strive for accuracy, please be aware that automated translations may contain errors or inaccuracies. The original document in its native language should be considered the authoritative source. For critical information, professional human translation is recommended. We are not liable for any misunderstandings or misinterpretations arising from the use of this translation. + \ No newline at end of file diff --git a/translations/en/6-space-game/6-end-condition/solution/README.md b/translations/en/6-space-game/6-end-condition/solution/README.md index 0679a7993..b78db64df 100644 --- a/translations/en/6-space-game/6-end-condition/solution/README.md +++ b/translations/en/6-space-game/6-end-condition/solution/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/6-space-game/6-end-condition/your-work/README.md b/translations/en/6-space-game/6-end-condition/your-work/README.md index 3d6cee0cd..b78db64df 100644 --- a/translations/en/6-space-game/6-end-condition/your-work/README.md +++ b/translations/en/6-space-game/6-end-condition/your-work/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/6-space-game/README.md b/translations/en/6-space-game/README.md index 9765c7f1d..01957c7c0 100644 --- a/translations/en/6-space-game/README.md +++ b/translations/en/6-space-game/README.md @@ -1,12 +1,3 @@ - # Build a Space Game A space game to teach advanced JavaScript fundamentals diff --git a/translations/en/6-space-game/solution/README.md b/translations/en/6-space-game/solution/README.md index 502125829..84d147c9a 100644 --- a/translations/en/6-space-game/solution/README.md +++ b/translations/en/6-space-game/solution/README.md @@ -1,12 +1,3 @@ - This is a placeholder, left blank purposefully --- diff --git a/translations/en/7-bank-project/1-template-route/README.md b/translations/en/7-bank-project/1-template-route/README.md index 55f1292bf..b987990cd 100644 --- a/translations/en/7-bank-project/1-template-route/README.md +++ b/translations/en/7-bank-project/1-template-route/README.md @@ -1,31 +1,87 @@ - # Build a Banking App Part 1: HTML Templates and Routes in a Web App +```mermaid +journey + title Your Banking App Development Journey + section SPA Fundamentals + Understand single-page apps: 3: Student + Learn template concepts: 4: Student + Master DOM manipulation: 4: Student + section Routing Systems + Implement client-side routing: 4: Student + Handle browser history: 5: Student + Create navigation systems: 5: Student + section Professional Patterns + Build modular architecture: 5: Student + Apply best practices: 5: Student + Create user experiences: 5: Student +``` +When Apollo 11's guidance computer navigated to the moon in 1969, it had to switch between different programs without restarting the entire system. Modern web applications work similarly – they change what you see without reloading everything from scratch. This creates the smooth, responsive experience users expect today. + +Unlike traditional websites that reload entire pages for every interaction, modern web apps update only the parts that need changing. This approach, much like how mission control switches between different displays while maintaining constant communication, creates that fluid experience we've come to expect. + +Here's what makes the difference so dramatic: + +| Traditional Multi-Page Apps | Modern Single-Page Apps | +|----------------------------|-------------------------| +| **Navigation** | Full page reload for each screen | Instant content switching | +| **Performance** | Slower due to complete HTML downloads | Faster with partial updates | +| **User Experience** | Jarring page flashes | Smooth, app-like transitions | +| **Data Sharing** | Difficult between pages | Easy state management | +| **Development** | Multiple HTML files to maintain | Single HTML with dynamic templates | + +**Understanding the evolution:** +- **Traditional apps** require server requests for every navigation action +- **Modern SPAs** load once and update content dynamically using JavaScript +- **User expectations** now favor instant, seamless interactions +- **Performance benefits** include reduced bandwidth and faster responses + +In this lesson, we'll build a banking app with multiple screens that flow together seamlessly. Like how scientists use modular instruments that can be reconfigured for different experiments, we'll use HTML templates as reusable components that can be displayed as needed. + +You'll work with HTML templates (reusable blueprints for different screens), JavaScript routing (the system that switches between screens), and the browser's history API (which keeps the back button working as expected). These are the same fundamental techniques used by frameworks like React, Vue, and Angular. + +By the end, you'll have a working banking app that demonstrates professional single-page application principles. + +```mermaid +mindmap + root((Single-Page Applications)) + Architecture + Template System + Client-side Routing + State Management + Event Handling + Templates + Reusable Components + Dynamic Content + DOM Manipulation + Content Switching + Routing + URL Management + History API + Navigation Logic + Browser Integration + User Experience + Fast Navigation + Smooth Transitions + Consistent State + Modern Interactions + Performance + Reduced Server Requests + Faster Page Transitions + Efficient Resource Usage + Better Responsiveness +``` ## Pre-Lecture Quiz [Pre-lecture quiz](https://ff-quizzes.netlify.app/web/quiz/41) -### Introduction - -Since JavaScript was introduced in browsers, websites have become more interactive and complex than ever. Web technologies are now often used to create fully functional applications that run directly in a browser, known as [web applications](https://en.wikipedia.org/wiki/Web_application). Because web apps are highly interactive, users don't want to wait for a full page reload every time they perform an action. This is why JavaScript is used to update the HTML directly via the DOM, providing a smoother user experience. +### What You'll Need -In this lesson, we’ll lay the groundwork for creating a banking web app. We’ll use HTML templates to create multiple screens that can be displayed and updated without reloading the entire HTML page. - -### Prerequisite - -You’ll need a local web server to test the web app we’ll build in this lesson. If you don’t have one, you can install [Node.js](https://nodejs.org) and use the command `npx lite-server` from your project folder. This will create a local web server and open your app in a browser. +We'll need a local web server to test our banking app – don't worry, it's easier than it sounds! If you don't already have one set up, just install [Node.js](https://nodejs.org) and run `npx lite-server` from your project folder. This handy command spins up a local server and automatically opens your app in the browser. ### Preparation -On your computer, create a folder named `bank` with a file named `index.html` inside it. We’ll start with this HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code): +On your computer, create a folder named `bank` with a file named `index.html` inside it. We'll start from this HTML [boilerplate](https://en.wikipedia.org/wiki/Boilerplate_code): ```html @@ -41,30 +97,77 @@ On your computer, create a folder named `bank` with a file named `index.html` in ``` +**Here's what this boilerplate provides:** +- **Establishes** the HTML5 document structure with proper DOCTYPE declaration +- **Configures** character encoding as UTF-8 for international text support +- **Enables** responsive design with the viewport meta tag for mobile compatibility +- **Sets** a descriptive title that appears in the browser tab +- **Creates** a clean body section where we'll build our application + +> 📁 **Project Structure Preview** +> +> **By the end of this lesson, your project will contain:** +> ``` +> bank/ +> ├── index.html +> ├── app.js +> └── style.css +> ``` +> +> **File responsibilities:** +> - **index.html**: Contains all templates and provides the app structure +> - **app.js**: Handles routing, navigation, and template management +> - **Templates**: Define the UI for login, dashboard, and other screens + --- -## HTML templates +## HTML Templates + +Templates solve a fundamental problem in web development. When Gutenberg invented movable type printing in the 1440s, he realized that instead of carving entire pages, he could create reusable letter blocks and arrange them as needed. HTML templates work on the same principle – instead of creating separate HTML files for each screen, you define reusable structures that can be displayed when needed. + +```mermaid +flowchart TD + A["📋 Template Definition"] --> B["💬 Hidden in DOM"] + B --> C["🔍 JavaScript Finds Template"] + C --> D["📋 Clone Template Content"] + D --> E["🔗 Attach to Visible DOM"] + E --> F["👁️ User Sees Content"] + + G["Login Template"] --> A + H["Dashboard Template"] --> A + I["Future Templates"] --> A + + style A fill:#e3f2fd + style D fill:#e8f5e8 + style F fill:#fff3e0 + style B fill:#f3e5f5 +``` +Think of templates as blueprints for different parts of your app. Just as an architect creates one blueprint and uses it multiple times rather than redrawing identical rooms, we create templates once and instantiate them as needed. The browser keeps these templates hidden until JavaScript activates them. -If you want to create multiple screens for a web page, one solution is to create a separate HTML file for each screen you want to display. However, this approach has some drawbacks: +If you want to create multiple screens for a web page, one solution would be to create one HTML file for every screen you want to display. However, this solution comes with some inconvenience: -- The entire HTML has to reload when switching screens, which can be slow. -- Sharing data between different screens becomes difficult. +- You have to reload the entire HTML when switching screen, which can be slow. +- It's difficult to share data between the different screens. -An alternative approach is to use a single HTML file and define multiple [HTML templates](https://developer.mozilla.org/docs/Web/HTML/Element/template) using the `