{
    "componentChunkName": "component---src-templates-post-js",
    "path": "/what-to-teach-web-developers-in-2021",
    "result": {"data":{"site":{"siteMetadata":{"title":"your friend Joel's digital garden","description":"Articles and notes from a collaborator at egghead.io. Musings on software, business, and life from a skilled virtual assistant.","author":{"name":"Joel Hooks"},"keywords":["Video Blogger"]}},"mdx":{"excerpt":"Over the last few years, we've done  a lot  of  React . Which is great. I love using React personally, and building  egghead-next  using Next.js and TypeScript has been fantastic. This year we'd like to give some of the other great…","fields":{"github":"https://github.com/joelhooks/joelhooks-com/tree/master/content/blog/2021-01-08--what-to-teach-web-developers-in-2021~~VetReOxM9/index.mdx"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"id\": \"VetReOxM9\",\n  \"slug\": \"what-to-teach-web-developers-in-2021\",\n  \"date\": \"2021-01-08T00:00:00.000Z\",\n  \"title\": \"What to Teach Web Developers in 2021\",\n  \"published\": false\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Over the last few years, we've done \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"a lot\"), \" of \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://next.egghead.io/q/react\"\n  }, \"React\"), \". Which is great. I love using React personally, and building \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/eggheadio/egghead-next\"\n  }, \"egghead-next\"), \" using Next.js and TypeScript has been fantastic.\"), mdx(\"p\", null, \"This year we'd like to give some of the other great frameworks and tools the stage while continuing to help folks learn React.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Vue\"), \" (\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://next.egghead.io/q/vue\"\n  }, \"link\"), \"]\"), mdx(\"p\", null, \"We've got a modest stack of Vue courses, but none that present the current version. Feels like there is a lot of room for both the fundamentals, as well as project-oriented courses using Vue.\"), mdx(\"p\", null, \"Also very interested in Nuxt and that ecosystem.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Svelte\"), \" (\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://next.egghead.io/q/svelte\"\n  }, \"link\"), \")\"), mdx(\"p\", null, \"Svelte is incredibly interesting and a tool a lot of developers would benefit from learning.\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://gist.github.com/Rich-Harris/0f910048478c2a6505d1c32185b61934\"\n  }, \"https://gist.github.com/Rich-Harris/0f910048478c2a6505d1c32185b61934\")), mdx(\"p\", null, \"I'd love to go deep with Svelte and present it in a way that shows folks the power and benefits of using this tool. That means a \\\"flagship\\\" course as well as project-oriented courses to use Svelte in various ways (\\\"Build an X with Svelte\\\")\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Alpine\"), \" (\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://next.egghead.io/q/alpine\"\n  }, \"link\"), \")\"), mdx(\"p\", null, \"I haven't spent much time with Alpine personally, but I love the ethos and minimal approach. It's valuable and valid to use something ultra-lightweight, both in bytes but also API surface area.\"), mdx(\"p\", null, \"Simon Vrachliotis's \\\"\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://next.egghead.io/playlists/sprinkle-declarative-reactive-behaviour-on-your-html-with-alpine-js-5f8b\"\n  }, \"getting started with Alpine\"), \"\\\" course is a lovely intro, but I'd love to have some composed curriculum as well as project-oriented courses around Alpine.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Hotwire\")), mdx(\"p\", null, \"This is the new tool stack from the folks at Basecamp that was developed out of their work on Hey, and I think it has a lot of potential \"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://hotwire.dev/\"\n  }, \"https://hotwire.dev/\")), mdx(\"p\", null, \"This feels like something that would be excellent for project-oriented examples and a solid approach to building a lot of great apps for a developer's project portfolio.\"), mdx(\"p\", null, \"We want to give people the pre-requisites they need to do project work with a variety of tools so that they can craft \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"/developer-portfolio\"\n  }, \"developer portfolios\"), \" that help them get good/better jobs as web developers. That goal can take a lot of shapes!\"), mdx(\"p\", null, \"I'm probably missing other great tools, so please don't hesitate to \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://twitter.com/jhooks/status/1347595091989315585\"\n  }, \"reply to this Twitter thread and let me know\"), \" what else you'd like to see in this list.\"));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"What to Teach Web Developers in 2021","date":"January 08, 2021","banner":null,"slug":"what-to-teach-web-developers-in-2021","keywords":null}}},"pageContext":{"id":"58e37861-9594-58a9-a764-405a25e1d9f5","prev":{"id":"c40958ff-ffc8-568d-916b-02b2214fdde1","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"Tools like  Convertkit  provide a lot of powerful tools you can use for marketing automation, but as a developer I want to goa layer deeper and find that using serverless functions with a framework like Next.js provides immense power to customize…","fields":{"title":"Serverless Marketing Automation with Convertkit and Next.js","slug":"serverless-marketing-automation","date":"2021-02-17T00:00:00.000Z"}},"next":{"id":"1032c167-8f05-546b-8d1f-a171d3da3e5d","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"There are many reasons to create a portfolio as a software developer. You might be new to the career and need a way to represent your capabilities. You might have worked exclusively at companies that firewall your work examples behind non-disclosure…","fields":{"title":"Crafting a Business Oriented Developer Portfolio that Stands Out","slug":"developer-portfolio","date":"2020-12-08T00:00:00.000Z"}}}},
    "staticQueryHashes": ["1045846374"]}