├── .editorconfig
├── .github
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── general-feedback.yml
│ └── topic-coverage.yml
├── PULL_REQUEST_TEMPLATE
├── settings.yml
└── workflows
│ ├── auto-merge.yml
│ ├── codeql.yml.template
│ ├── idle.yml
│ ├── lint.yml
│ ├── release.yml
│ └── welcome-bot.yml
├── .gitignore
├── .husky
└── pre-commit
├── .lintstagedrc.json
├── .markdownlint-cli2.jsonc
├── .nvmrc
├── .prettierrc.json
├── CODE_OF_CONDUCT.md
├── LAST_MAJOR_REVIEW.txt
├── LICENSE.md
├── README.md
├── REVIEWING.md
├── TOC.md
├── curriculum
├── 0-README.md
├── 1-about-curriculum.md
├── 2-getting-started
│ ├── 0-README.md
│ ├── 1-soft-skills.md
│ └── 2-environment-setup.md
├── 3-core
│ ├── 0-README.md
│ ├── 1-web-standards.md
│ ├── 2-semantic-html.md
│ ├── 3-css-fundamentals.md
│ ├── 4-css-text-styling.md
│ ├── 5-css-layout.md
│ ├── 6-javascript-fundamentals.md
│ ├── 7-accessibility.md
│ ├── 8-design-for-developers.md
│ └── 9-version-control.md
├── 4-extensions
│ ├── 0-README.md
│ ├── 1-transform-and-animate-css.md
│ ├── 2-custom-js-objects.md
│ ├── 3-web-apis.md
│ ├── 4-performance.md
│ ├── 5-security-and-privacy.md
│ ├── 6-testing.md
│ ├── 7-a-practical-understanding-of-javascript-frameworks.md
│ ├── 8-css-tooling.md
│ └── 9-other-tooling-types.md
├── 5-faq.md
└── 6-resources-for-educators.md
├── package-lock.json
├── package.json
└── pdf
├── .gitignore
├── README.md
├── adjust-links.lua
├── build.sh
├── header.md
├── header.tex
├── logo.png
└── template.tex
/.editorconfig:
--------------------------------------------------------------------------------
1 | # EditorConfig is awesome: https://EditorConfig.org
2 |
3 | # top-most EditorConfig file
4 | root = true
5 |
6 | [*]
7 | indent_style = space
8 | indent_size = 2
9 | end_of_line = lf
10 | charset = utf-8
11 | trim_trailing_whitespace = true
12 | insert_final_newline = true
13 |
14 | [*.md]
15 | trim_trailing_whitespace = false
16 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: true
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/general-feedback.yml:
--------------------------------------------------------------------------------
1 | name: "General feedback"
2 | description: Provide feedback on the target audience, general approach, high-level structure, usefulness, or anything else.
3 | labels: ["general"]
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: |
8 | Please fill in a description of your feedback in the title field above
9 | ---
10 | - type: textarea
11 | id: problem
12 | attributes:
13 | label: Please describe your problem or observation
14 | description: This section should include a clear and concise description of what your problem or observation is.
15 | placeholder: e.g. I think the curriculum should include...
16 | validations:
17 | required: true
18 | - type: textarea
19 | id: solution
20 | attributes:
21 | label: Describe the solution you'd like to see
22 | description: This section should include a description of the changes you'll like to see made to the curriculum to fix the issue as you see it.
23 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/topic-coverage.yml:
--------------------------------------------------------------------------------
1 | name: "Topic coverage"
2 | description: Provide feedback on specific topic coverage (e.g. HTML, CSS, JavaScript), including missing topics and requests for changes to existing coverage.
3 | labels: ["topics"]
4 | body:
5 | - type: markdown
6 | attributes:
7 | value: |
8 | Please fill in a description of your topic feedback in the title field above
9 | ---
10 | - type: input
11 | id: topic
12 | attributes:
13 | label: Module number
14 | description: Fill in the specific module (subsection) number that your feedback concerns
15 | placeholder: e.g. 2.1 How the web works
16 | - type: textarea
17 | id: problem
18 | attributes:
19 | label: Please describe your issue
20 | description: This section should include a clear and concise description of what you feel is missing or wrong.
21 | placeholder: e.g. I think HTML foobar needs more coverage...
22 | validations:
23 | required: true
24 | - type: textarea
25 | id: solution
26 | attributes:
27 | label: Describe the solution you'd like to see
28 | description: This section should include a description of the changes you'll like to see made to the curriculum to fix the issue as you see it.
29 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE:
--------------------------------------------------------------------------------
1 |
2 |
3 | ### Description
4 |
5 |
6 |
7 | ### Motivation
8 |
9 |
10 |
11 | ### Additional details
12 |
13 |
14 |
15 | ### Related issues and pull requests
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.github/settings.yml:
--------------------------------------------------------------------------------
1 | repository:
2 | # See https://github.com/apps/settings for all available settings.
3 |
4 | # The name of the repository. Changing this will rename the repository
5 | name: project-template
6 |
7 | # A short description of the repository that will show up on GitHub
8 | description: MDN Web Docs project template
9 |
10 | # A URL with more information about the repository
11 | homepage: https://github.com/mdn/project-template
12 |
13 | # The branch used by default for pull requests and when the repository is cloned/viewed.
14 | default_branch: main
15 |
16 | # This repository is a template that others can use to start a new repository.
17 | is_template: true
18 |
19 | branches:
20 | - name: main
21 | protection:
22 | # Required. Require at least one approving review on a pull request, before merging. Set to null to disable.
23 | required_pull_request_reviews:
24 | # The number of approvals required. (1-6)
25 | required_approving_review_count: 1
26 | # Dismiss approved reviews automatically when a new commit is pushed.
27 | dismiss_stale_reviews: true
28 | # Blocks merge until code owners have reviewed.
29 | require_code_owner_reviews: true
30 |
31 | collaborators:
32 | - username: schalkneethling
33 | permission: admin
34 |
35 | - username: Rumyra
36 | permission: admin
37 |
38 | - username: fiji-flo
39 | permission: admin
40 |
41 | labels:
42 | - name: bug
43 | color: D41130
44 | description: "Something that's wrong or not working as expected"
45 | - name: chore
46 | color: 258CD3
47 | description: "A routine task"
48 | - name: "good first issue"
49 | color: 48B71D
50 | description: "Great for newcomers to start contributing"
51 | - name: "help wanted"
52 | color: 2E7A10
53 | description: "Contributions welcome"
54 |
55 | teams:
56 | - name: core
57 | permission: admin
58 |
--------------------------------------------------------------------------------
/.github/workflows/auto-merge.yml:
--------------------------------------------------------------------------------
1 | name: "auto-merge"
2 | on: [pull_request_target]
3 |
4 | jobs:
5 | auto-merge:
6 | uses: mdn/workflows/.github/workflows/auto-merge.yml@main
7 | with:
8 | target-repo: "TODO: set this value to the name of the current (origin) repo"
9 | secrets:
10 | GH_TOKEN: ${{ secrets.GH_TOKEN }}
11 |
--------------------------------------------------------------------------------
/.github/workflows/codeql.yml.template:
--------------------------------------------------------------------------------
1 | # TODO: Rename this file to codeql.yml and fill in the TODOs
2 | name: "CodeQL"
3 |
4 | on:
5 | push:
6 | branches: ["main"]
7 | paths-ignore:
8 | - "**.md"
9 | pull_request:
10 | # The branches below must be a subset of the branches above
11 | branches: ["main"]
12 | paths-ignore:
13 | - "**.md"
14 |
15 | jobs:
16 | analyze:
17 | name: Analyze
18 | runs-on: ubuntu-latest
19 | permissions:
20 | actions: read
21 | contents: read
22 | security-events: write
23 |
24 | strategy:
25 | matrix:
26 | # Add the language(s) you want to analyze here as an array of strings
27 | # for example: ['javascript'] or ['python', 'javascript']
28 | language: ["TODO"]
29 |
30 | steps:
31 | - name: Checkout repository
32 | uses: actions/checkout@v3
33 |
34 | # Initializes the CodeQL tools for scanning.
35 | - name: Initialize CodeQL
36 | uses: github/codeql-action/init@v2
37 | with:
38 | languages: ${{ matrix.language }}
39 |
40 | - name: Perform CodeQL Analysis
41 | uses: github/codeql-action/analyze@v2
42 | with:
43 | category: "/language:${{matrix.language}}"
44 |
--------------------------------------------------------------------------------
/.github/workflows/idle.yml:
--------------------------------------------------------------------------------
1 | # This workflow is hosted at: https://github.com/mdn/workflows/blob/main/.github/workflows/idle.yml
2 | # Docs for this workflow: https://github.com/mdn/workflows/blob/main/README.md#idle
3 | name: "Label idle issues"
4 |
5 | on:
6 | schedule:
7 | - cron: "0 8 * * *"
8 |
9 | jobs:
10 | mark-as-idle:
11 | uses: mdn/workflows/.github/workflows/idle.yml@main
12 | with:
13 | target-repo: "TODO - add this repo in 'mdn/REPOSITORY_NAME' format"
14 |
--------------------------------------------------------------------------------
/.github/workflows/lint.yml:
--------------------------------------------------------------------------------
1 | name: Lint files
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | lint:
10 | runs-on: ubuntu-latest
11 |
12 | steps:
13 | - uses: actions/checkout@v3
14 |
15 | - name: Setup Node.js environment
16 | uses: actions/setup-node@v3
17 | with:
18 | node-version-file: ".nvmrc"
19 | cache: npm
20 |
21 | - name: Install all npm packages
22 | run: npm ci
23 |
24 | - name: Lint all files
25 | run: |
26 | npm run lint
27 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Build and release PDF
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 |
8 | permissions:
9 | contents: write
10 |
11 | jobs:
12 | build:
13 | runs-on: ubuntu-latest
14 | steps:
15 | - uses: actions/checkout@v4
16 |
17 | - name: Install build dependencies
18 | env:
19 | DEBIAN_FRONTEND: noninteractive
20 | run: |
21 | sudo apt-get install pandoc texlive-latex-base texlive-xetex fonts-inter
22 |
23 | - name: Build PDF
24 | run: |
25 | ./pdf/build.sh
26 |
27 | - name: Create release
28 | env:
29 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30 | run: |
31 | REVIEW_DATE="`cat LAST_MAJOR_REVIEW.txt`"
32 | GENERATED_DATE=`date -u '+%Y-%m-%d'`
33 | gh release create release-${{ github.sha }} \
34 | --notes "PDF generated: $GENERATED_DATE | Last major curriculum review: $REVIEW_DATE" \
35 | --target ${{ github.sha }} \
36 | --title $GENERATED_DATE \
37 | pdf/MDN-Curriculum.pdf
38 |
--------------------------------------------------------------------------------
/.github/workflows/welcome-bot.yml:
--------------------------------------------------------------------------------
1 | # This workflow is hosted at: https://github.com/mdn/workflows/blob/main/.github/workflows/allo-allo.yml
2 | # Docs for this workflow: https://github.com/mdn/workflows/blob/main/README.md#allo-allo
3 | name: "AlloAllo"
4 |
5 | on:
6 | issues:
7 | types:
8 | - opened
9 | pull_request_target:
10 | branches:
11 | - main
12 | types:
13 | - opened
14 | - closed
15 |
16 | jobs:
17 | allo-allo:
18 | uses: mdn/workflows/.github/workflows/allo-allo.yml@main
19 | with:
20 | target-repo: "TODO - add this repo in 'mdn/REPOSITORY_NAME' format"
21 | issue-welcome: >
22 | It looks like this is your first issue. Welcome! 👋
23 | One of the project maintainers will be with you as soon as possible. We
24 | appreciate your patience. To safeguard the health of the project, please
25 | take a moment to read our [code of conduct](../blob/main/CODE_OF_CONDUCT.md).
26 | pr-welcome: >
27 | It looks like this is your first pull request. 🎉
28 | Thank you for your contribution! One of the project maintainers will triage
29 | and assign the pull request for review. We appreciate your patience. To
30 | safeguard the health of the project, please take a moment to read our
31 | [code of conduct](../blob/main/CODE_OF_CONDUCT.md).
32 | pr-merged: >
33 | Congratulations on your first merged pull request. 🎉 Thank you for your contribution!
34 | Did you know we have a [project board](https://github.com/orgs/mdn/projects/25) with high-impact contribution opportunities?
35 | We look forward to your next contribution.
36 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | . "$(dirname "$0")/_/husky.sh"
3 |
4 | npx lint-staged
5 |
--------------------------------------------------------------------------------
/.lintstagedrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "!*.md": "prettier --ignore-unknown --write",
3 | "*.md": ["prettier --write", "markdownlint-cli2-fix"]
4 | }
5 |
--------------------------------------------------------------------------------
/.markdownlint-cli2.jsonc:
--------------------------------------------------------------------------------
1 | // This file defines our configuration for Markdownlint. See
2 | // https://github.com/DavidAnson/markdownlint/blob/main/doc/Rules.md
3 | // for more details on each rule.
4 |
5 | {
6 | "config": {
7 | "default": true,
8 | "no-inline-html": {
9 | "allowed_elements": ["scrim-inline"]
10 | },
11 | "ul-style": {
12 | "style": "dash"
13 | },
14 | "ul-indent": {
15 | "indent": 2
16 | },
17 | "no-hard-tabs": {
18 | "spaces_per_tab": 2
19 | },
20 | "line-length": false,
21 | "link-fragments": false,
22 | // Force ordered numbering to catch accidental list ending from indenting
23 | "ol-prefix": {
24 | "style": "ordered"
25 | },
26 | "code-block-style": {
27 | "style": "fenced"
28 | },
29 | "emphasis-style": {
30 | "style": "underscore"
31 | },
32 | "strong-style": {
33 | "style": "asterisk"
34 | },
35 | "first-line-heading": false,
36 |
37 | // https://github.com/OnkarRuikar/markdownlint-rule-search-replace
38 | "search-replace": {
39 | "rules": [
40 | {
41 | "name": "curly-double-quotes",
42 | "message": "Don't use curly double quotes",
43 | "searchPattern": "/“|”/g",
44 | "replace": "\"",
45 | "searchScope": "text"
46 | },
47 | {
48 | "name": "curly-single-quotes",
49 | "message": "Don't use curly single quotes",
50 | "searchPattern": "/‘|’/g",
51 | "replace": "'",
52 | "searchScope": "text"
53 | },
54 | {
55 | "name": "nbsp",
56 | "message": "Don't use no-break spaces",
57 | "searchPattern": "/\u00A0/g",
58 | "replace": " ",
59 | "searchScope": "all"
60 | },
61 | {
62 | "name": "m-dash",
63 | "message": "Don't use '--'. Use m-dash — instead",
64 | "search": " -- ",
65 | "replace": " — ",
66 | "searchScope": "text"
67 | },
68 | {
69 | "name": "trailing-spaces",
70 | "message": "Avoid trailing spaces",
71 | "searchPattern": "/ +$/gm",
72 | "replace": "",
73 | "searchScope": "all"
74 | },
75 | {
76 | "name": "double-spaces",
77 | "message": "Avoid double spaces",
78 | "searchPattern": "/([^\\s>]) ([^\\s|])/g",
79 | "replace": "$1 $2",
80 | "searchScope": "text"
81 | },
82 | {
83 | "name": "incorrect-spelling",
84 | "message": "Incorrect spelling",
85 | "searchPattern": ["/e-mail/ig", "/(w)eb site/ig"],
86 | "replace": ["email", "$1ebsite"],
87 | "searchScope": "all"
88 | }
89 | ]
90 | }
91 | },
92 | "customRules": ["markdownlint-rule-search-replace"],
93 | "ignores": ["node_modules", ".git", ".github", "tests"]
94 | }
95 |
--------------------------------------------------------------------------------
/.nvmrc:
--------------------------------------------------------------------------------
1 | v22
2 |
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "overrides": [
3 | {
4 | "files": ["**/*.jsonc"],
5 | "options": {
6 | "parser": "json"
7 | }
8 | }
9 | ]
10 | }
11 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Code of conduct
2 |
3 | This repository is governed by Mozilla's code of conduct and etiquette guidelines.
4 | For more details, read [Mozilla's Community Participation Guidelines](https://www.mozilla.org/about/governance/policies/participation/).
5 |
6 | ## Reporting violations
7 |
8 | For more information on how to report violations of the Community Participation Guidelines, read the [How to report](https://www.mozilla.org/about/governance/policies/participation/reporting/) page.
9 |
--------------------------------------------------------------------------------
/LAST_MAJOR_REVIEW.txt:
--------------------------------------------------------------------------------
1 | 2024-02-01
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | template: module
3 | ---
4 |
5 | # Welcome to the MDN front-end developer curriculum
6 |
7 | > **Note**: Main README for the repo, providing light introduction
8 |
9 | The MDN front-end developer curriculum is intended to provide an up-to-date industry recommendation for the key fundamental skills and knowledge that a front-end web developer should have, including the mindset and attitude required for securing a job and for long-term success in this field. This repository has been created to give the web community an understanding of the curriculum's purpose and target audience, an early preview of its content, and a chance to give [feedback](#providing-feedback) on it. Please let us know what you think!
10 |
11 | ## Rationale
12 |
13 | The curriculum is an outcome of a research project conducted by the MDN team in early 2023. We asked students, new web developers, technical hiring managers, and web education professionals about their expectations around learning front-end web development — on MDN and elsewhere. The key outcomes of this research were:
14 |
15 | - Students expect more structured guidance on what topics to learn and when.
16 | - All groups cited a lack of "soft skills" (like teamwork, research, and critical thinking) and knowledge of best practices (such as accessibility and privacy) in potential new hires as key problems in the industry.
17 |
18 | Part of our focus for 2023 is on making MDN a resource where people can learn new skills, as well as look up reference material. Back in 2019, we launched the [Learning Area](https://developer.mozilla.org/en-US/docs/Learn) on MDN to help people learn the basics of front-end development. With a lot of useful content published to date, this part of MDN has proven to be successful — it averages around 10% of MDN page views. However, we feel that it needs to be supplemented with stronger guidance on what new front-end devs should learn, and in what order, to be successful in the web industry. The curriculum represents a first step towards this goal.
19 |
20 | ## Target audience and purpose
21 |
22 | We believe the curriculum is useful to several different groups of people, from students wanting to learn web development to educators wanting to put together courses to teach it. Head over to the [curriculum About page](https://developer.mozilla.org/en-US/curriculum/about-curriculum/#target_audience) to read more about its target audience and purpose.
23 |
24 | ## Curriculum structure
25 |
26 | We have structured the curriculum as follows:
27 |
28 | - [Precursor knowledge](/curriculum/2-getting-started): Topics that are not, strictly speaking, web development topics but do constitute useful topics for anyone wanting to learn front-end web development. This includes soft skills and knowledge of a typical development environment.
29 | - [Core modules](/curriculum/3-core): Topics that we feel every web developer should have a good grounding in. This includes all the information they need to design and build a basic, accessible website/app that follows modern best practices, and manage and deploy their code using a tool like GitHub.
30 | - [Extensions modules](/curriculum/4-extensions): These "extension" topics constitute useful additional skills to learn as web developers start to expand their knowledge and develop specialisms.
31 |
32 | Get started by heading over to the main [table of contents](TOC.md) to see a granular overview of the included topics, and start exploring the content.
33 |
34 | ## Providing feedback
35 |
36 | We would love to hear your feedback regarding our curriculum. To do so, please open an issue — [leave your feedback under General feedback or Topic coverage](https://github.com/mdn/curriculum/issues/new/choose). When doing so, think about the following questions:
37 |
38 | - Does our curriculum contain all the fundamental knowledge a front-end web developer needs? If not, what topics are we missing? We are interested in high-level concerns (for example, "this whole area is missing") as well as lower-level feedback (for example, specific CSS or JavaScript topic omissions).
39 | - Do you think the curriculum is helpful to its key target audiences, for example, students wanting to learn front-end development and teachers wishing to create courses based on it? If not, why not?
40 |
--------------------------------------------------------------------------------
/REVIEWING.md:
--------------------------------------------------------------------------------
1 | # Reviewing guide
2 |
3 | > **Note**:
4 | > Boilerplate reviewing guide for the repo, not needed for the final publication
5 |
6 | All reviewers must abide by the [code of conduct](CODE_OF_CONDUCT.md); they are also protected by the code of conduct.
7 | A reviewer should not tolerate poor behavior and is encouraged to [report any behavior](CODE_OF_CONDUCT.md#Reporting_violations) that violates the code of conduct.
8 |
9 | ## Review process
10 |
11 | The MDN Web Docs team has a well-defined review process that must be followed by reviewers in all repositories under the GitHub MDN organization.
12 | This process is described in detail on the [Pull request guidelines](https://developer.mozilla.org/en-US/docs/MDN/Community/Pull_requests) page.
13 |
14 |
21 |
--------------------------------------------------------------------------------
/TOC.md:
--------------------------------------------------------------------------------
1 | ---
2 | template: module
3 | ---
4 |
5 | # Table of contents
6 |
7 | > **Note**:
8 | > TOC for the entire curriculum, useful to include in the final publication, but probably on a separate page. don't make this the entire main nav
9 |
10 | [Introduction](/curriculum)
11 |
12 | - [Recommended soft skills](/curriculum/2-getting-started/1-soft-skills.md): Recommendations of soft skills that students can aim to get better at while learning web development, and which constitute good traits to have when entering the industry
13 | - [Environment knowledge](/curriculum/2-getting-started/2-environment.md): Recommendations for topics related to the setup and usage of the computer system that you will use to implement websites/apps.
14 |
15 | - [1 The web standards model](/curriculum/3-core/1-web-standards.md): The fundamentals of how the web works at a high level, including the model used for communication, the core technologies involved, how those technologies are created, and how a web browser renders and displays websites to a user.
16 | - [1.1 How the web works](/curriculum/3-core/1-web-standards.md#1-1-how-the-web-works)
17 | - [1.2 The HTML, CSS, and JavaScript triangle](/curriculum/3-core/1-web-standards.md#1-2-the-html-css-and-javascript-triangle)
18 | - [1.3 Web standards](/curriculum/3-core/1-web-standards.md#1-3-web-standards)
19 | - [1.4 How browsers load webpages](/curriculum/3-core/1-web-standards.md#1-4-how-browsers-load-webpages)
20 | - [2 Semantic HTML](/curriculum/3-core/1-web-standards.md): HTML is the technology that defines the content and structure of any website. Written properly, it should also define the semantics (meaning) of the content in a machine-readable way, which is vital for accessibility, search engine optimization, and tapping into using the built-in features browsers provide for content to work optimally. This module covers the basics of the language, before looking at key areas such as document structure, links, lists, images, forms, and more.
21 | - [2.1 Basic HTML syntax and structure](/curriculum/3-core/2-semantic-html.md#2-1-basic-html-syntax-and-structure)
22 | - [2.2 Good document structure](/curriculum/3-core/2-semantic-html.md#2-2-good-document-structure)
23 | - [2.3 Lists](/curriculum/3-core/2-semantic-html.md#2-3-lists)
24 | - [2.4 Advanced text techniques](/curriculum/3-core/2-semantic-html.md#2-4-advanced-text-techniques)
25 | - [2.5 Links](/curriculum/3-core/2-semantic-html.md#2-5-links)
26 | - [2.6 Media](/curriculum/3-core/2-semantic-html.md#2-6-media)
27 | - [2.7 Other interactive elements](/curriculum/3-core/2-semantic-html.md#2-7-other-interactive-elements)
28 | - [2.8 HTML tables](/curriculum/3-core/2-semantic-html.md#2-8-html-tables)
29 | - [2.9 Debugging HTML](/curriculum/3-core/2-semantic-html.md#2-9-debugging-html)
30 | - [3 CSS fundamentals](/curriculum/3-core/3-css-fundamentals.md): CSS enables you to add style to your webpages, including color, text, positioning and layout, and animation. In our first CSS module we cover all the fundamental language mechanics you need to understand how CSS works.
31 | - [3.1 Basic CSS syntax](/curriculum/3-core/3-css-fundamentals.md#3-01-basic-css-syntax)
32 | - [3.2 Selectors and combinators](/curriculum/3-core/3-css-fundamentals.md#3-02-selectors-and-combinators)
33 | - [3.3 The box model](/curriculum/3-core/3-css-fundamentals.md#3-03-the-box-model)
34 | - [3.4 Cascade, specificity, and inheritance](/curriculum/3-core/3-css-fundamentals.md#3-04-cascade-specificity-and-inheritance)
35 | - [3.5 Values and units](/curriculum/3-core/3-css-fundamentals.md#3-05-values-and-units)
36 | - [3.6 Sizing](/curriculum/3-core/3-css-fundamentals.md#3-06-sizing)
37 | - [3.7 Background and borders](/curriculum/3-core/3-css-fundamentals.md#3-07-backgrounds-and-borders)
38 | - [3.8 Overflow](/curriculum/3-core/3-css-fundamentals.md#3-08-overflow)
39 | - [3.9 Styling form elements](/curriculum/3-core/3-css-fundamentals.md#3-09-styling-form-elements)
40 | - [3.10 Debugging CSS](/curriculum/3-core/3-css-fundamentals.md#3-10-debugging-css)
41 | - [4 CSS text styling](/curriculum/3-core/4-css-text-styling.md): This module focuses specifically on CSS font and text styling, including loading custom web fonts and applying them to your text.
42 | - [4.1 Text and font styling](/curriculum/3-core/4-css-text-styling.md#4-1-text-and-font-styling)
43 | - [4.2 Styling lists and links](/curriculum/3-core/4-css-text-styling.md#4-2-styling-lists-and-links)
44 | - [4.3 Web fonts](/curriculum/3-core/4-css-text-styling.md#4-3-web-fonts)
45 | - [5 CSS layout](/curriculum/3-core/5-css-layout.md): Our final core CSS module looks deep into another crucial topic: creating layouts for modern websites. This module looks at floatings, positioning, modern layout tools, and building responsive designs that will adapt to different devices, screen sizes, and resolutions.
46 | - [5.1 The basics of CSS layout](/curriculum/3-core/5-css-layout.md#5-1-the-basics-of-css-layout)
47 | - [5.2 Floats](/curriculum/3-core/5-css-layout.md#5-2-floats)
48 | - [5.3 Positioning](/curriculum/3-core/5-css-layout.md#5-3-positioning)
49 | - [5.4 Modern layout](/curriculum/3-core/5-css-layout.md#5-4-modern-layout)
50 | - [5.5 Responsive design specifics](/curriculum/3-core/5-css-layout.md#5-5-responsive-design-specifics)
51 | - [6 JavaScript fundamentals](/curriculum/3-core/6-javascript-fundamentals.md): JavaScript is a huge topic, with so many different features, styles, and techniques to learn, and so many APIs and tools built on top of it. This module focuses on the essentials of the core language. Learning these topics will give you a solid basis to work from.
52 | - [6.1 Variables](/curriculum/3-core/6-javascript-fundamentals.md#6-01-variables)
53 | - [6.2 Math](/curriculum/3-core/6-javascript-fundamentals.md#6-02-math)
54 | - [6.3 Text](/curriculum/3-core/6-javascript-fundamentals.md#6-03-text)
55 | - [6.4 Arrays](/curriculum/3-core/6-javascript-fundamentals.md#6-04-arrays)
56 | - [6.5 Conditionals](/curriculum/3-core/6-javascript-fundamentals.md#6-05-conditionals)
57 | - [6.6 Loops](/curriculum/3-core/6-javascript-fundamentals.md#6-06-loops)
58 | - [6.7 Functions](/curriculum/3-core/6-javascript-fundamentals.md#6-07-functions)
59 | - [6.8 JavaScript object fundamentals](/curriculum/3-core/6-javascript-fundamentals.md#6-08-javascript-object-fundamentals)
60 | - [6.9 DOM scripting](/curriculum/3-core/6-javascript-fundamentals.md#6-09-dom-scripting)
61 | - [6.10 Events](/curriculum/3-core/6-javascript-fundamentals.md#6-10-events)
62 | - [6.11 Asynchronous JavaScript fundamentals](/curriculum/3-core/6-javascript-fundamentals.md#6-11-asynchronous-javascript-fundamentals)
63 | - [6.12 Network requests with fetch()](/curriculum/3-core/6-javascript-fundamentals.md#6-12-network-requests-with-fetch)
64 | - [6.13 Working with JSON](/curriculum/3-core/6-javascript-fundamentals.md#6-13-working-with-json)
65 | - [6.14 JavaScript libraries and frameworks introduction](/curriculum/3-core/6-javascript-fundamentals.md#6-14-javascript-libraries-and-frameworks-introduction)
66 | - [6.15 Debugging JavaScript](/curriculum/3-core/6-javascript-fundamentals.md#6-15-debugging-javascript)
67 | - [7 Accessibility](/curriculum/3-core/7-accessibility.md): Access to public services, education, entertainment, and all the other valuable content the web offers is a human right. No one should be excluded based on disability, race, geography, or other human characteristics. This module discusses the best practices and techniques you should learn to make your websites as accessible as possible.
68 | - [7.1 Accessibility basics](/curriculum/3-core/7-accessibility.md#7-1-accessibility-basics)
69 | - [7.2 Accessible styling](/curriculum/3-core/7-accessibility.md#7-2-accessible-styling)
70 | - [7.3 Accessible JavaScript](/curriculum/3-core/7-accessibility.md#7-3-accessible-javascript)
71 | - [7.4 Assistive technology and testing](/curriculum/3-core/7-accessibility.md#7-4-assistive-technology-and-testing)
72 | - [7.5 WAI-ARIA](/curriculum/3-core/7-accessibility.md#7-5-wai-aria)
73 | - [8 Version control fundamentals (Git/GitHub)](/curriculum/3-core/8-version-control-fundamentals-git-github.md): Version control tools are an essential part of modern workflows, for backing up and collaborating on codebases. This module takes you through the essentials of version control using Git and GitHub.
74 | - [9 Design for developers](/curriculum/3-core/9-design-for-developers.md): The idea of this module is to introduce developers to some design thinking. They may not want to work as a designer, but having some basic user experience and design theory under their belt will be invaluable for understanding design briefs, making their portfolios look better, and getting into the mindset of the user.
75 |
76 | - [9.1 Basic design theory](/curriculum/3-core/9-design-for-developers.md#9-1-basic-design-theory)
77 | - [9.2 User-centered design](/curriculum/3-core/9-design-for-developers.md#9-2-user-centered-design)
78 | - [9.3 Understanding design briefs](/curriculum/3-core/9-design-for-developers.md#9-3-understanding-design-briefs)
79 |
80 | - [Extension 1 CSS transforms and animation](/curriculum/4-extensions/1-transform-and-animate-css.md): Animations are a vital part of a good user experience. Subtle usage can make page designs more interesting and appealing, and also enhance usability and perceived performance.
81 | - [Extension 2 Creating your own JavaScript objects](/curriculum/4-extensions/2-custom-js-objects.md): Having a deeper knowledge of how JavaScript objects work is very useful as you build confidence with web development, start to build more complex apps, and create your own libraries.
82 | - [Extension 3 Web APIs](/curriculum/4-extensions/3-web-apis.md): This module covers common aspects of three of the most common classes of Web APIs that we haven't previously covered in any kind of detail, providing a useful grounding for those who want to go deeper into browser API usage.
83 | - [Extension 4 Performance](/curriculum/4-extensions/4-performance.md): Performance centers around making your websites as fast as possible, both in real terms (for example small file sizes, quicker loading), and in terms of how performance is perceived (for example getting initial content to a usable state as fast as possible, even if all the content is not yet loaded).
84 | - [Extension 5 Security and privacy](/curriculum/4-extensions/5-security-and-privacy.md): It is vital to have an understanding of how you can and should protect your data and your user's data from would-be attackers who may try to steal it. This module covers both hardening websites to make it more difficult to steal data, and collecting user data in a respectful way that avoids tracking them or sharing it with unsuitable third parties.
85 | - [Extension 6 Testing](/curriculum/4-extensions/6-testing.md): Any codebase past a certain level of complexity needs to have a system of tests associated with it, to make sure that as new code is added, the codebase continues to function correctly and performantly, and continues to meet the users' needs. This module lists the fundamentals that you should start with.
86 | - [Extension 7 A practical understanding of JavaScript frameworks](/curriculum/4-extensions/7-a-practical-understanding-of-javascript-frameworks.md): JavaScript frameworks are commonly used to build web applications, so it is beneficial to learn about common frameworks and use cases (as listed below) for employment prospects.
87 | - [Extension 8 CSS tooling](/curriculum/4-extensions/8-css-tooling.md): Tooling is not just confined to JavaScript frameworks. There are also common CSS tooling types that you'll encounter on your learning journey.
88 | - [Extension 9 Other tooling types](/curriculum/4-extensions/9-other-tooling-types.md): There are other types of tooling that you'll commonly encounter on a web project. This module aims to provide a useful list to research.
89 |
--------------------------------------------------------------------------------
/curriculum/0-README.md:
--------------------------------------------------------------------------------
1 | ---
2 | template: landing
3 | summary: The MDN Curriculum provides a structured guide to the essential skills and practices for being a successful front-end developer, along with recommended learning resources.
4 | ---
5 |
6 | # MDN Curriculum
7 |
8 | ## The essential skillset for new front-end developers
9 |
10 | The MDN Curriculum provides a structured guide to the essential skills and practices for being a successful front-end developer, along with recommended learning resources.
11 |
12 | Last updated: February 2024
13 |
14 | ## About the curriculum
15 |
16 | - Beginner's level
17 | - Self-paced
18 | - Free
19 |
20 | Defines the essential skills and knowledge every front-end developer needs for career success and industry relevance.
21 |
22 | Created by Mozilla and refined with insights from students, educators, and developers from the broader web community.
23 |
24 | Includes learning resource recommendations covering every curriculum topic, helping you become job-ready.
25 |
26 | [Learn more](./1-about-curriculum.md)
27 |
28 | ## Modules
29 |
30 |
31 |
32 | ## Don't know where to
get started?
33 |
34 | - ### Starting out with coding?
35 |
36 | _Begin with our "Getting started" and "Core" modules to grasp the essential skills for web development._
37 |
38 | [Core modules](./3-core/)
39 |
40 | - ### Beyond the basics?
41 |
42 | _Dive deeper with our "Extensions" modules to develop specialized skills._
43 |
44 | [Extensions modules](./4-extensions/)
45 |
46 | - ### Seeking employment?
47 |
48 | _Our "Soft skills" module, part of "Getting started", offers crucial insights to help you land your job._
49 |
50 | [Getting started modules](./2-getting-started/)
51 |
52 | - ### Working at a school?
53 |
54 | _Use our modules to guide your teaching, or enroll your students in Scrimba's Frontend Path._
55 |
56 | [Frontend Path](https://v2.scrimba.com/the-frontend-developer-career-path-c0j?via=mdn)
57 |
--------------------------------------------------------------------------------
/curriculum/1-about-curriculum.md:
--------------------------------------------------------------------------------
1 | ---
2 | template: about
3 | summary: This page describes the MDN front-end developer curriculum, including its motivation, target audience, scope, and update process as a guide to essential front-end web development skills.
4 | ---
5 |
6 | # About Curriculum
7 |
8 | The MDN front-end developer curriculum aims to provide the definitive recommendation for fundamental skills and knowledge that a front-end web developer should have for employability and longevity in today's web industry.
9 |
10 | This curriculum has been created by the MDN team with review and feedback from experts within Mozilla and throughout the wider MDN community. Thank you for your valuable input; you know who you are!
11 |
12 | ## Motivation
13 |
14 | Mozilla talks to industry professionals every day, and we regularly get feedback on the knowledge gaps in new hires. Hiring managers often observe:
15 |
16 | - Too much of a focus on using frameworks to build web apps quickly, coupled with a lack of understanding of the underlying technologies behind these frameworks. This leads to a lack of problem-solving skills and less long-term employability as tools change.
17 | - A lack of core best practices such as semantics, accessibility, and responsive design. This results in a lack of user focus, leading to usability limitations.
18 | - Gaps in the knowledge of how browsers fundamentally work, how they surface information, and the interactivity you get for free. This causes solutions to be overcomplicated and often inaccessible.
19 | - Limited problem-solving, teamwork, research, and other vital soft skills.
20 |
21 | As a result, we decided to create this curriculum to help guide people towards learning a better skillset, making them more employable, and enabling them to build a better, more accessible, more responsible web of tomorrow. We want them to have the best possible chance of success.
22 |
23 | This curriculum embodies the values we think the web should have — accessibility, sustainability, usability, performance, and community. We would love educators, developers, and students to use this resource and champion these values in their work, in their teachings, and in the products they build.
24 |
25 | ## Target audience
26 |
27 | ### Students
28 |
29 | This curriculum is useful for several groups of students:
30 |
31 | - Students who want to get a job in the industry, which may involve gaining a related qualification or certification. The curriculum will act as a guide for what they should study.
32 | - Existing web developers who want to "level up" their skills, making sure their skill set is current and identifying gaps in their knowledge that they should learn more about.
33 | - Non-front-end web developers who have existing development experience in other areas (for example back-end web developers or platform-specific developers), who wish to get into front-end web development and want a guide to the topics they should learn.
34 |
35 | Once a student has the list of topics they are going to learn, they should go forth and learn them via self-study, taking a course or boot camp to teach them, or a combination. Either way, upon completing a conforming course, students should be able to pass an examination that tests their knowledge of the topics they have studied.
36 |
37 | > **Note**: This resource is not a course for learning front-end web development, and does not aim to thoroughly teach it. It is a recommendation of what modern front-end web developers should know. However, we did spend a considerable amount of time and effort reviewing different courses that cover our modules, and intend to make recommendations for free and paid courses we consider suitable for learning the curriculum.
38 |
39 | ### Educators
40 |
41 | Educators can use the curriculum as a guide when creating programs, units, and assessment specifications for a web-related university degree, college course, coding school course, or similar. Conforming to the curriculum will help ensure that courses teach current techniques and best practices, and avoid bad practices and out-of-date information.
42 |
43 | To find out more, consult our [Resources for Educators](./6-resources-for-educators.md) page.
44 |
45 | > **Hassle-free PDF download**: The complete MDN Curriculum is available as a convenient PDF to share with your students and colleagues.
46 | >
47 | > [Download the Curriculum](https://github.com/mdn/curriculum/releases/latest/download/MDN-Curriculum.pdf)
48 |
49 | ## Scope
50 |
51 | The term _front-end developer_ can be ambiguous; it can mean different things to different people, and folks working on the front end can be expected to do a wide variety of different tasks.
52 |
53 | ### What's covered
54 |
55 | This curriculum does not attempt to outline every topic that a web developer could conceivably be expected to know in-depth. The curriculum covers the following:
56 |
57 | - Core technical skills such as semantic HTML, CSS, and JavaScript fundamentals.
58 | - Best practices such as accessibility, responsive design, and UI design theory.
59 | - Key tools such as frameworks and version control.
60 | - Soft skills for promoting the mindset and attitude required to secure a job.
61 | - Environment knowledge like computer and file systems, browsing the web, command line basics, and code editors.
62 | - Several "extensions" that we feel constitute useful additional skills to learn as developers start to expand their knowledge and develop specialisms. This includes:
63 | - CSS transforms and animation
64 | - Common categories of Web API (e.g. media, graphics, and storage)
65 | - Performance
66 | - Security and privacy
67 | - Testing
68 |
69 | ### Level of detail
70 |
71 | The topics presented are covered in differing levels of detail.
72 |
73 | - Some are covered in depth, for example, HTML and CSS fundamentals. These are important to have a clear understanding of before a student goes too far on their learning journey.
74 | - Some are covered more superficially, for example, version control or testing. It is important to understand what these topics are and get started with some basics, but these kinds of skills can be expanded upon as you continue through your career.
75 |
76 | ### What is not covered
77 |
78 | There are also several areas that we explicitly don't cover in this curriculum, namely:
79 |
80 | - Back-end languages/platforms such as [Node.js](https://nodejs.org/), [PHP](https://www.php.net/), [Python](https://www.python.org/), [.NET](https://dotnet.microsoft.com/), [Java](https://www.java.com/), or [Ruby](https://www.ruby-lang.org/). The back-end, by definition, is out of scope for a front-end development curriculum, although you'll find crossover in full-stack developer courses.
81 |
82 | - One exception here is Node.js; it has such a wide range of uses in modern web development that some rudimentary Node.js knowledge should be considered essential. We don't cover development of Node.js-based applications explicitly, but you will meet it in multiple places in the curriculum as a mechanism for using various tooling/functionality. Examples include [Extension 6 Testing](./4-extensions/6-testing.md) and [Extension 9 Other tooling types](./4-extensions/9-other-tooling-types.md).
83 |
84 | - Traditional relational databases (for example, [MySQL](https://dev.mysql.com/doc/) or [Postgres](https://www.postgresql.org/)) and other server-side datastores (for example, cloud databases such as [MongoDB](https://www.mongodb.com) or [Google Cloud Datastore](https://cloud.google.com/datastore/)). These are deemed to be part of the back-end, and therefore, out of scope. We do cover client-side storage mechanisms like [cookies](https://developer.mozilla.org/docs/Web/HTTP/Cookies), [Web Storage](https://developer.mozilla.org/docs/Web/API/Web_Storage_API), and [IndexedDB](https://developer.mozilla.org/docs/Web/API/IndexedDB_API), but they have different and distinct use cases.
85 |
86 | - Deep-dive DevOps topics such as cloud platforms for provisioning and automation (for example, [Amazon AWS](https://aws.amazon.com/) , [Google Cloud Platform](https://console.cloud.google.com), and [Microsoft Azure](https://azure.microsoft.com/)) and containerization tools (for example, [Kubernetes](https://kubernetes.io/) and [Docker](https://www.docker.com/)). We do lightly touch upon some tools that are considered to be in the DevOps space — like GitHub and automated testing tools — but these have distinct crossover into the front-end developer space.
87 |
88 | - Graphic design beyond the basic knowledge (outlined in [Design for developers](./3-core/8-design-for-developers.md)).
89 |
90 | - Skills related to roles such as product and program management (for example, organization, research, and planning).
91 |
92 | ## Attribution
93 |
94 | This resource is free for anyone to use. If you find the curriculum useful, we request that you consider doing the following:
95 |
96 | - Link to it. For example, an educator could include the following in their public program information:
97 |
98 | ```html
99 |
100 | This course is based on the 101 | MDN front-end development curriculum. 104 |
105 | ``` 106 | 107 | - Tell others about it! We would love as many students and educators as possible to start using this curriculum and converging around it as a standard for web developer baseline knowledge. 108 | 109 | > **Note**: This curriculum should be used as a guide, but its use does not imply endorsement by Mozilla. 110 | 111 | ## Curriculum update process 112 | 113 | The web development industry is changing constantly and rapidly. To keep our recommendations current, we will review our curriculum regularly, publish changelogs, and make an announcement every year, contacting the creators of known conforming courses to let them know the curriculum has changed and encourage them to review/update their courses as appropriate. 114 | 115 | We intend to do this in Q2 each year, to give educators time over Q2/Q3 to implement changes before the start of the following academic year. 116 | 117 | ## Feedback 118 | 119 | We would love to hear your feedback regarding our curriculum. If you have any suggestions for how the resource could be improved, or if you've noticed any inaccuracies or mistakes, we would love to hear from you. File an issue containing your feedback on the [curriculum source code repo](https://github.com/mdn/curriculum/issues). 120 | -------------------------------------------------------------------------------- /curriculum/2-getting-started/0-README.md: -------------------------------------------------------------------------------- 1 | --- 2 | template: overview 3 | summary: Before diving into learning with the MDN curriculum, explore foundational topics like soft skills and environment setup to support your success in the core web development modules. 4 | --- 5 | 6 | # Getting started modules 7 | 8 | The subjects outlined in these modules are not web development topics, but they are useful for anyone wanting to learn front-end web development to have an understanding of. We don't consider learning these topics as required before moving on to the core modules, hence we haven't used the word "prerequisite". However, we believe students will have an easier time if they spend some time on these topics first. 9 | -------------------------------------------------------------------------------- /curriculum/2-getting-started/1-soft-skills.md: -------------------------------------------------------------------------------- 1 | --- 2 | summary: Develop a great attitude towards learning, researching, and collaborating to enhance your chances of success. 3 | topic: Best Practices 4 | template: module 5 | --- 6 | 7 | # 1. Soft skills 8 | 9 | This module provides recommendations of soft skills that students can aim to get better at while learning web development, and which constitute good traits to have when entering the industry. They will help immensely in developing the right attitudes for learning, researching, and collaborating, and increase the chances of getting hired. 10 | 11 | ## 1.1 Constant learning mindset 12 | 13 | Students should get into the mindset of constant learning. The web is constantly evolving and technologies and trends are always changing, and they need to constantly update their knowledge to keep up. 14 | 15 | - Get into the habit of regularly reading technical news, blogs, and browser release notes. 16 | 17 | - Engage in reading tasks or small research projects semi-regularly. 18 | 19 | - Set aside specific learning time to spend on acquiring new skills. 20 | 21 | - Be curious. 22 | 23 | Recommended news and information sites: 24 | 25 | - [MDN](https://developer.mozilla.org) 26 | 27 | - [CSS Tricks](https://css-tricks.com/) 28 | 29 | - [Dev](https://dev.to/) 30 | 31 | - [freeCodeCamp](https://www.freecodecamp.org/) 32 | 33 | - [A List Apart](https://alistapart.com/) 34 | 35 | - [Smashing Magazine](https://www.smashingmagazine.com/) 36 | 37 | - [CodeCademy](https://www.codecademy.com/) 38 | 39 | ## 1.2 Open to embracing failure 40 | 41 | A very common issue that causes students and new developers to shy away from experimentation and taking risks (for example when starting new projects or exploring new ideas) is fear of failure. Spend some time learning about the value that can be gleaned from making mistakes, and the lessons that can be learned and applied in the future in similar situations. 42 | 43 | Here are some tips to improve this skill: 44 | 45 | - Define a safe space/peer group where people are free to ask questions and failure will not be judged harshly. 46 | 47 | - Look to your local community and try to find meetup groups with people who can either give you help and advice or are facing the same issues you are and can provide moral support or experiment together with you. 48 | 49 | - (For educators) Set up the marking schemes for your assessments so that you can still get a reasonable number of marks even if you didn't get the correct result provided the process is well documented. Award extra marks for innovation. 50 | 51 | - Run show 'n' tell or one-on-one sessions part-way through a project with peers and mentors to get feedback and insights into where you are going wrong and get advice on how to get back on the right path. 52 | 53 | - Run retrospective meetings to analyze projects, look at what didn't go so well, and talk about how to improve things next time. 54 | 55 | ## 1.3 Effective research 56 | 57 | Web developers spend a lot of time searching for solutions to problems encountered in their work. Students should learn effective strategies for finding answers, and when to use which methods (e.g. don't jump straight to pestering the senior dev every time you hit a roadblock). 58 | 59 | These strategies include: 60 | 61 | - Consulting the documentation. 62 | 63 | - When you are stuck with using a tool/product, consult the official documentation first. It is surprising how many people do not think to do this; official docs are often geared towards beginners, so people with experience may not think of them as being suitable for them. 64 | 65 | - Learn about different [types of documentation](https://documentation.divio.com/) — for example, tutorials, references, and other types — and understand when each type is useful. 66 | 67 | - Using search engines effectively (See [How to use search like a pro: 10 tips and tricks for Google and beyond](https://www.theguardian.com/technology/2016/jan/15/how-to-use-search-like-a-pro-10-tips-and-tricks-for-google-and-beyond)). 68 | 69 | - Choosing valid information sources: 70 | 71 | - Choose recommended sites such as [Stack Overflow](https://stackoverflow.com/) and [MDN](https://developer.mozilla.org). 72 | 73 | - Check the dates on articles, and consider whether the techniques discussed are out-of-date. For example, does an article on CSS layout talk about modern approaches like grid and flexbox, or does it still present obsolete techniques like multi-column layouts with floats? Does it still talk about hacks for ancient browsers like Internet Explorer or Netscape 4? 74 | 75 | - Using social media effectively: 76 | 77 | - Build a network of folks who can help. 78 | 79 | - Join community groups where you can look for answers. For example: 80 | 81 | - [The MDN Web Docs community](https://discord.gg/apa6Rn7uEj) on Discord 82 | - [Scrimba](https://scrimba.com/?via=mdn) _Course partner_ 83 | 84 | - [freeCodeCamp](https://www.freecodecamp.org/) 85 | 86 | - [CodeNewbie](https://www.codenewbie.org/) 87 | 88 | - [Dev.to](https://dev.to/) 89 | 90 | - Learn to give back as well as take; web developers who reciprocate are much more likely to build strong relationships and keep getting help. 91 | 92 | - When you find a useful answer, write about it. For example, blog about it or share it on a social network. Not only will the process of writing clarify the concepts to you, but you'll also get validation and/or feedback from the community. It could also help you to start making a name for yourself in the industry. 93 | 94 | - Making effective use of an experienced contact's time: 95 | 96 | - By "experienced contact", we mean a teacher, mentor, or senior developer. 97 | 98 | - Ask them what communication methods they prefer. 99 | 100 | - Think carefully about what questions to ask them beforehand, consider their time limited and precious. 101 | 102 | - Be sure to do some background research about the topic beforehand and don't ask questions that you can find answers to by searching the web or the official documentation. 103 | 104 | - Timebox the session to say 30 minutes. 105 | 106 | - Prioritize your issues. 107 | 108 | - Set a goal for the session, for example, "try to find a solution to the highest priority issue"; solving the biggest issue may also lead to a fix for other issues. 109 | 110 | - [Rubber ducking](https://wikipedia.org/wiki/Rubber_duck_debugging) as an effective help mechanism. See also [Rubber Duck Debugging](https://rubberduckdebugging.com/). 111 | 112 | - Using AI to help with coding issues (for example [ChatGPT](https://openai.com/blog/chatgpt) or [GitHub Copilot](https://resources.github.com/copilot-for-business/)). You should use AI tools with caution, and familiarize yourself with their strengths and weaknesses: 113 | 114 | - On the plus side, they can speed up research/searches enormously, and help with structuring code and copy. 115 | 116 | - On the other hand, AI tools have no reasoning skills and frequently provide answers that are misleading or just plain wrong. You shouldn't just assume that AI answers are correct, and test them/verify them with other sources. 117 | 118 | > **Notes**: 119 | > 120 | > - There is definitely a balance to knowing the right time to ask for help. Web developers shouldn't constantly pester their peers/colleagues, but equally, they shouldn't soldier on and pretend they know what they are doing when they don't. 121 | > - Consider the value of saying "I don't know" at the right time. 122 | 123 | Resources: 124 | 125 | - [Learning and getting help](https://developer.mozilla.org/docs/Learn/Learning_and_getting_help) 126 | 127 | ## 1.4 Collaboration and teamwork 128 | 129 | As a professional in the web industry, you are going to have to work with other people on projects, and while brainstorming ideas and proposals. Not everyone is born with an innate ability to work in a team, so it is beneficial to start incorporating some best practices early on and putting work into areas where you think you are lacking. 130 | 131 | Recommendations: 132 | 133 | - Learn about empathy, humility, conflict resolution, and cooperation. In all engagements, stay polite and respectful and do not use offensive language. 134 | 135 | - While working in a team in the real world, you will frequently be expected to do peer reviews. Practice how to deliver feedback constructively and respectfully. When receiving feedback, practice how to not take it personally, and focus on the positives and what you can learn. 136 | 137 | - Participate in pair programming, or work in teams on assessments to experience working with other people. 138 | 139 | - Practice running projects like a real software project, with a timeline, plan, and responsibilities. Learn about the software development lifecycle. Pick up some basic project planning skills and tools to be able to estimate and plan your work/project. 140 | 141 | - As part of the course, blog about your work, learnings, and roadblocks, share your code repositories, get peers to critique your work, and offer updates to fix issues in other people's work. 142 | 143 | - Join a Slack channel, Discord, or a similar space, ask peers for help, share resources, and discuss the work to be done. For example: 144 | 145 | - Check out the [Frontend Developers](https://discord.me/frontenddevelopers) Discord server. 146 | 147 | - Our learning partner, Scrimba, provides a [strong community and collaboration experience](https://v2.scrimba.com/the-frontend-developer-career-path-c0j/~0xyi?via=mdn) via their Discord server, intending to help their students gain exactly these kinds of skills. 148 | 149 | - Practice asking and answering questions. Even if they seem somewhat trivial, always come up with one or two questions to ask when discussing or reviewing peer work. It is essential to practice explaining what you are doing and asking the right questions to find out what you need to know. 150 | 151 | - Help each other, rather than waiting for a teacher or senior dev to go around and help everyone. Less able peers will get help more quickly, and more able peers will become mentors and experience the satisfaction that it brings. 152 | 153 | - Observe and learn from other experienced folks how to engage in discussions as well as how to approach problem-solving/debugging. 154 | 155 | - Join an open-source project to practice the skills you learn, engage with folks in the community, and learn from observing others (see [How to Contribute to Open Source Projects – A Beginner's Guide](https://www.freecodecamp.org/news/how-to-contribute-to-open-source-projects-beginners-guide/) for useful information). 156 | 157 | Our learning partner, Scrimba, provides a strong community and collaboration experience via their Discord server, intending to help their students gain exactly these kinds of skills. Check out the following embedded content to learn more. 158 | 159 |