{
    "componentChunkName": "component---src-templates-post-js",
    "path": "/should-i-use-a-framework",
    "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":"This is a question that comes up a lot: \"Should I use a framework?\" It's a good question, and something that I've both asked myself and thought about quite a lot over the years. Here's the thing... If you aren't using a framework there is a…","fields":{"github":"https://github.com/joelhooks/joelhooks-com/tree/master/content/blog/2019-11-14--should-i-use-a-framework~~RikSSYmW0/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\": \"RikSSYmW0\",\n  \"slug\": \"should-i-use-a-framework\",\n  \"date\": \"2019-11-14T00:00:00.000Z\",\n  \"title\": \"🤔 \\\"Should I use a framework?\\\"\",\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, \"This is a question that comes up a lot:\"), mdx(\"p\", null, \"\\\"Should I use a framework?\\\"\"), mdx(\"p\", null, \"It's a good question, and something that I've both asked myself and thought about quite a lot over the years.\"), mdx(\"p\", null, \"Here's the thing...\"), mdx(\"p\", null, mdx(\"em\", {\n    parentName: \"p\"\n  }, \"If you aren't using a framework there is a good chance that you are creating an ad-hoc, undocumented, non-standard, can't look up answers on Stack Overflow, bespoke, personal framework.\")), mdx(\"p\", null, \"And that is not always a bad thing. If people didn't do this, we'd never have frameworks in the first place. Somebody has to exclaim \\\"EFF THIS\\\" and sit down to do the work that needs to be done crafting a repeatable system that can be used across (m)any domains and allow for sensible high level work to be done.\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"https://res.cloudinary.com/dg3gyk0gu/image/upload/v1573670886/email-images/flip_over_desk.jpg\",\n    \"alt\": \"angry cartoon person flipping a desk over\"\n  })), mdx(\"p\", null, \"\\uD83D\\uDC46 \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"they hate React and are about to write a new framework\"), \" \\uD83D\\uDE02\"), mdx(\"p\", null, \"For me, I've always gone for frameworks directly after learning some language basics.\"), mdx(\"p\", null, \"When I learned Python it was via Django\\nWhen I learned ActionScript 3 it was via PureMVC\\nWhen I learned Ruby it was through Rails\\nWhen I learned JavaScript it was through AngularJS\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"For some reason, I thought learning vanilla \"), mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"JS would be a lot easier than it has been. \\uD83E\\uDD37\\u200D\\u2640\\uFE0F\")), mdx(\"p\", null, \"For me, learning a language on its own with no framework fundamentally adds to the overall cognitive load of an already overloaded task.\"), mdx(\"p\", null, \"It's too raw. Too low level for me to actually make anything happen.\"), mdx(\"p\", null, \"When I jump into a framework I start learning community vetted patterns and practices that inform those decisions and let me work at a higher level.\"), mdx(\"p\", null, \"For me, this is a huge win.\"), mdx(\"p\", null, \"This isn't to say that we shouldn't learn our programming languages deeply. I'm confident to say I'm an expert, or have been an expert, in several programming languages, but that depth of knowledge is directly tied to the scope of work and outcomes I am trying to achieve.\"), mdx(\"p\", null, \"Frameworks are \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"really\"), \" useful learning tools to help me meet those goals.\"), mdx(\"p\", null, \"So how do you choose a framework, well for me, I agree with this tweet from Sten:\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"https://res.cloudinary.com/dg3gyk0gu/image/upload/v1573678596/email-images/frameworks-tweet.jpg\",\n    \"alt\": \"tweet from @stenpittet describing how they choose a framework\"\n  })), mdx(\"p\", null, \"I want to choose something that suits the needs of my project, has a lot of people vetting the tool, has examples that make sense, and is well documented to suit the needs of my team (sometimes that's just me) and project.\"));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"🤔 \"Should I use a framework?\"","date":"November 14, 2019","banner":null,"slug":"should-i-use-a-framework","keywords":null}}},"pageContext":{"id":"a79327ce-96eb-5e4a-ae76-3ac4ae6f634d","prev":{"id":"4a83ba90-59f9-524f-9d85-91cea0c44a50","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"We've got a robust Rails app that does a lot of heavy lifting for us. We've crafted a full hateos REST api with a delightful GraphQL layer over the top. We started using React as our primary UI a few years ago, and we do SSR via React on Rails. It's…","fields":{"title":"🤠 Gatsby on Rails","slug":"gatsby-on-rails","date":"2019-11-17T00:00:00.000Z"}},"next":{"id":"5f292c76-a330-5177-9b49-27562521466a","parent":{"name":"index","sourceInstanceName":"blog"},"excerpt":"Serverless functions are incredibly convenient. Being able quickly and easily deply api endpoints with almost zero friction is luxurious! 🥰 One of my primary use cases for serverless functions has been to access and coordinate with third party APIs…","fields":{"title":"Creating a Node.js serverless function as a proxy endpoint using express on Zeit Now","slug":"simple-serverless-now","date":"2019-10-22T00:00:00.000Z"}}}},
    "staticQueryHashes": ["1045846374"]}