<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Hannah Cross</title>
    <description>The latest articles on Forem by Hannah Cross (@crossy_h).</description>
    <link>https://forem.com/crossy_h</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F109604%2F18f62b35-24bd-441c-bb06-2c02ef7f3992.jpeg</url>
      <title>Forem: Hannah Cross</title>
      <link>https://forem.com/crossy_h</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/crossy_h"/>
    <language>en</language>
    <item>
      <title>Tech Book Club Reading List 2020</title>
      <dc:creator>Hannah Cross</dc:creator>
      <pubDate>Tue, 05 Jan 2021 12:42:16 +0000</pubDate>
      <link>https://forem.com/crossy_h/tech-book-club-reading-list-2020-ff3</link>
      <guid>https://forem.com/crossy_h/tech-book-club-reading-list-2020-ff3</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mMvP7l9R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ek9env474x6pkmrsfujc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mMvP7l9R--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ek9env474x6pkmrsfujc.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Last year the dev team at &lt;a href="https://near.st"&gt;NearSt&lt;/a&gt; started a "tech book club". We started meeting once a week to spend 30 to 45 minutes discussing a book, talk or podcast we thought was interesting and vaguely (or directly) relevant to our team's activities. &lt;/p&gt;

&lt;p&gt;The below is an unordered list of the various resources we looked at in 2020. Some we liked, some we didn't. We definately didn't finish all the books either. However, they all provided great jumping off points for us to reflect on our team, roadmap, cultural attitudes and technical choices... and so forth. &lt;/p&gt;

&lt;p&gt;We found this a particularly good activity since the start of the pandemic, bringing us together to exercise our minds and kick start team discussions whilst working remotely.&lt;/p&gt;

&lt;p&gt;So, in case any of these spark your interest... here's our 2020 list! &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882"&gt;Clean Code by R.C. Martin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=VzWLGMtXflg"&gt;RubyConf 2017: Keynote - You're Insufficiently Persuasive by Sandi Metz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.oreilly.com/library/view/javascript-the-good/9780596517748/"&gt;JavaScript the Good Parts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/Thinking-Fast-Slow-Daniel-Kahneman/dp/0141033576"&gt;Thinking Fast and Slow by Daniel Kahneman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.ted.com/talks/worklife_with_adam_grant_the_creative_power_of_misfits/transcript"&gt;"The creative power of misfits" with Adam Grant&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/Philosophy-Software-Design-John-Ousterhout/dp/1732102201"&gt;A Philosophy of Software Design by John Ousterhout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=5XQOK0v_YRE"&gt;I see your point, but... - Gleb Bahmutov on Testing and Cypress&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=6yqfmXiZTlM"&gt;AWS re:Invent 2019:Amazon DynamoDB deep dive: Advanced design patterns (DAT403-R1) &lt;/a&gt; or &lt;a href="https://youtu.be/HaEPXoXVf2k"&gt;2018: Amazon DynamoDB deep dive: Advanced design patterns&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="//youtu.be/TzGfBV67Tac"&gt;Tatiana Mac: “System of Systems” — Clarity 2019
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.amazon.co.uk/gp/product/B07CG9MVD1/ref=ppx_yo_dt_b_d_asin_title_o00?ie=UTF8&amp;amp;psc=1"&gt;Rebel Thinking by Matthew Syed&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://serverlessfirst.com/testing-tradeoff-triangle/"&gt;Testing Tradeoff Triangle by Paul Swail&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://extfiles.etsy.com/DebriefingFacilitationGuide.pdf"&gt;Debriefing Facilitation Guide by Etsy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=M2IHEmObc2k"&gt;Fueling system discovery with observability | Charity Majors (Honeycomb)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=Hca6DkWPyMg"&gt;The Psychological Effects of UseEffect - Sara Vieira&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=BzX4aTRPzno&amp;amp;t=1067s"&gt;The Return of 'Write Less, Do More' by Rich Harris | JSCAMP 2019&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=OSM-785tnGM"&gt;GOTO 2020 • Sustainable Software Engineering, Building Carbon-Efficient Applications • Asim Hussain&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://youtu.be/s0wZFHNuzyc"&gt;How to detangle and understand production - Liz Fong-Jones&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>culture</category>
      <category>learning</category>
      <category>programming</category>
      <category>books</category>
    </item>
    <item>
      <title>How I deployed a Gatsby site to AWS S3</title>
      <dc:creator>Hannah Cross</dc:creator>
      <pubDate>Wed, 22 Jan 2020 18:19:18 +0000</pubDate>
      <link>https://forem.com/crossy_h/how-i-deployed-a-gatsby-site-to-aws-s3-2c3h</link>
      <guid>https://forem.com/crossy_h/how-i-deployed-a-gatsby-site-to-aws-s3-2c3h</guid>
      <description>

&lt;h4&gt;
  
  
  Choosing Gatsby.js
&lt;/h4&gt;

&lt;p&gt;At work we are rethinking our front-end properties and the tools we use for them. &lt;/p&gt;

&lt;p&gt;Our existing codebase is unnecessarily complex given our current needs so we looked to find a quick and efficient solution to throwing our primarily static pages out to the web. &lt;/p&gt;

&lt;p&gt;Gatsby came out as a good option as it is fast, easy to configure and quick to edit and update. It has plenty of plugins which enable seemingly seamless integrations with AWS resources. The build time rendering is also good for speed and ease.&lt;/p&gt;

&lt;p&gt;As part of a proof of concept exercise, I rebuilt part of our website using Gatsby.js, an AWS S3 bucket, AWS CloudFront and Serverless Framework. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spoiler - IT WAS A SUPER FRIENDLY EXPERIENCE (with a few rough edges on the AWS side...)&lt;/strong&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Tools
&lt;/h4&gt;

&lt;p&gt;AWS: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS CLI&lt;/li&gt;
&lt;li&gt;AWS S3&lt;/li&gt;
&lt;li&gt;AWS CloudFront&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gatsby:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;gatsby-cli (I kicked off with a default starter) &lt;/li&gt;
&lt;li&gt;gatsby-source-dynamodb&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Serverless:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;serverless&lt;/li&gt;
&lt;li&gt;serverless-finch&lt;/li&gt;
&lt;li&gt;serverless-cloudfront-invalidate&lt;/li&gt;
&lt;/ul&gt;




&lt;h4&gt;
  
  
  Building a Gatsby site
&lt;/h4&gt;

&lt;p&gt;First off, I installed the Gatsby CLI:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add gatsby-cli&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Then to make my new gatsby project:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gatsby new name-of-your-site&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;which will create a directory with a default starter in it. &lt;/p&gt;

&lt;p&gt;You can immediately get things running locally by&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd name-of-your-site&lt;/code&gt; and &lt;code&gt;gatsby develop&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;You now have a gatsby site! &lt;/p&gt;

&lt;p&gt;More detailed documentation lives here: &lt;a href="https://www.gatsbyjs.org/docs/quick-start/"&gt;Gatsby Docs&lt;/a&gt;&lt;/p&gt;




&lt;h4&gt;
  
  
  Connecting your Gatsby site to a database
&lt;/h4&gt;

&lt;p&gt;Gatsby plugins are SO GOOD. &lt;/p&gt;

&lt;p&gt;In just a few lines of config my Gatsby site was up and running with data from DynamoDB. (&lt;em&gt;It is also just as easy to set things up with a SQL database too! Try &lt;code&gt;gatsby-source-mysql&lt;/code&gt;&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn add gatsby-source-dynamodb&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;and in the gatsby-config.js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; plugins: [{
      resolve: "gatsby-source-dynamodb",
      options: {
        typeName: "NAME OF THIS CONNECTION",
        region: "REGION",
        params: {
          TableName: "TABLE NAME",
          // OTHER PARAMS HERE
        },
      },
    ]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gatsby uses graphql so to access the data in a page, you can create a graphql query which will then be &lt;strong&gt;automagically&lt;/strong&gt; be passed into your component as props. It would look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
import React from "react";
import { graphql } from "gatsby";

const AnimalsPage = ({ data }) =&amp;gt; {
  const animals = data.allAnimals.nodes;
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;h1&amp;gt;All Animals&amp;lt;/h1&amp;gt;

      &amp;lt;ol&amp;gt;
        {animals.map((animal, i) =&amp;gt; {
          return (
            &amp;lt;li key={i}&amp;gt;
              &amp;lt;a href={`/${animal.id}`}&amp;gt;{animal.name}&amp;lt;/a&amp;gt;
            &amp;lt;/li&amp;gt;
          );
        })}
      &amp;lt;/ol&amp;gt;
    &amp;lt;/div&amp;gt;
  );
};


// this data is passed into the above component as props 
export const query = graphql`
  query MyQuery {
    allAnimals {
      nodes {
        name
        id
      }
    }
  }
`;

export default AnimalsPage;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To figure out your graphql query you can run &lt;code&gt;gatsby develop&lt;/code&gt; and head to the GraphiQL interface at &lt;code&gt;http://localhost:8000/__graphql&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can also add config to &lt;code&gt;gatsby-node.js&lt;/code&gt; to fetch all your data and then generate pages based on a template for each data set. So if you have a database of animals each with the same data fields you can generate pages for each animal in the same layout. &lt;/p&gt;

&lt;p&gt;Create a template under the templates folder and reference it in the &lt;code&gt;gatsby-node.js&lt;/code&gt; file like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;exports.createPages = async function({ actions, graphql }) {
  const { data } = await graphql(`
    query MyQuery {
      allAnimals {
        nodes {
          colour
          habitat
          country
          id
          diet 
          name
        }

      }
    }
  `);

  data.allAnimals.nodes.forEach(node =&amp;gt; {
    const id = node.id;
    actions.createPage({
      path: `animal/${id}`,
      component: require.resolve(`./src/templates/page.js`),
      context: { node },
    });
  });
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The data will be passed into the page template through context at build time. You can instantly generate a number of repeating pages with unique values and set the slug as well! &lt;/p&gt;

&lt;p&gt;Finally once you have created your website, you just need to run &lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn build&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;and it will build your site locally, updating the &lt;code&gt;public/*&lt;/code&gt; files.&lt;br&gt;
These pages will be the files you will save in your S3 bucket! &lt;/p&gt;


&lt;h4&gt;
  
  
  Deploying your project to S3
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Setup your AWS CLI and AWS profile&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This post presumes you already have an AWS account but if you haven't configured a profile on your AWS CLI you can do so quickly provided you have your access details. &lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;aws configure&lt;/code&gt; and then populate the below fields.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Access Key ID: e.g. AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key: e.g.wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name: e.g. eu-west-1
Default output format: e.g. json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will enable you to deploy to your AWS resources from your local environment without having to play around with AWS secrets and envs in your code. &lt;/p&gt;

&lt;p&gt;You can check whether you have already set this up by running &lt;code&gt;cat ~/.aws/credentials&lt;/code&gt; in your command line. &lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Create an S3 Bucket&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the AWS website and login. &lt;/li&gt;
&lt;li&gt;Navigate to services/s3.&lt;/li&gt;
&lt;li&gt;Create bucket&lt;/li&gt;
&lt;li&gt;Choose a meaningful name for your bucket (you will use this in your serverless.yml later) &lt;/li&gt;
&lt;li&gt;Choose a region close to your location&lt;/li&gt;
&lt;li&gt;Hit create&lt;/li&gt;
&lt;li&gt;Under the "Properties" tab, choose Static Website Hosting. &lt;/li&gt;
&lt;li&gt;Set the Index and Error to index.html - this directs all traffic to your project which will handle the incoming HTTP requests.&lt;/li&gt;
&lt;li&gt;Under "Permissions" turn off the block to make the S3 bucket public. (You can also look into setting IAM roles and restricting access with other configuration) &lt;/li&gt;
&lt;li&gt;Save all this and you have your bucket!&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Your serverless.yml&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add the plugins&lt;br&gt;
&lt;code&gt;yarn add serverless&lt;/code&gt; &lt;br&gt;
&lt;code&gt;yarn add serverless-finch&lt;/code&gt;&lt;br&gt;
&lt;code&gt;yarn add serverless-cloudfront-invalidate&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As a side note: &lt;strong&gt;Check your repo for duplicate gitignore files and make sure to combine them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can now edit your serverless.yml file which will seem really long and full of comments but in the end you can get away with something as minimal as this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
service: service-name 

provider:
  name: aws

plugins:
  - serverless-finch
  - serverless-cloudfront-invalidate

custom:
  client:
    bucketName: bucket-name
    distributionFolder: public // the folder you want copied into S3

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this all set up you can run your build script &lt;/p&gt;

&lt;p&gt;&lt;code&gt;yarn build&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;and then run &lt;/p&gt;

&lt;p&gt;&lt;code&gt;sls client deploy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It should be quite quick and return an AWS URL where you can access your files. You will need this to set up your CloudFront Distribution.&lt;/p&gt;

&lt;p&gt;N.B. By using serverless-finch and running &lt;code&gt;sls client deploy&lt;/code&gt; you will not create a CloudFormation stack. It will just efficiently deploy your files to S3.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Set up CloudFront&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By putting your S3 files behind CloudFront, your end users will have much faster access to these files. The files get cached in multiple locations and when your user navigates to the endpoint it will return the closest cached version of those files - nice!&lt;/p&gt;

&lt;p&gt;You will need to login to the AWS console and setup a CloudFront property and get a &lt;code&gt;DISTRIBUTION ID&lt;/code&gt;. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Services/CloudFront &lt;/li&gt;
&lt;li&gt;Create Distribution&lt;/li&gt;
&lt;li&gt;Choose "Web Distribution"&lt;/li&gt;
&lt;li&gt;Add the S3 Bucket url to the Origin Name field (it should have popped up in your terminal when you ran sls client deploy)&lt;/li&gt;
&lt;li&gt;Everything else can be default&lt;/li&gt;
&lt;li&gt;Create Distribution!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The shorter CloudFront domain will take a few minutes to deploy but once deployed you will be able to access your files from both URLs (S3 and CloudFront)&lt;/p&gt;

&lt;p&gt;Importantly this will add another step...&lt;strong&gt;Cache Invalidation&lt;/strong&gt; &lt;br&gt;
Each time you run your deploy command you will also want to invalidate the CloudFront cache so that your newer files will be stored instead. &lt;/p&gt;

&lt;p&gt;Just add the following to your serverless.yml under custom&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cloudfrontInvalidate:
    distributionId: "DISTRIBUTION ID"
    items: 
      - "/index.html"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you can run &lt;code&gt;sls cloudfrontInvalidate&lt;/code&gt; and it will clear your cache!&lt;/p&gt;




&lt;h4&gt;
  
  
  And that's it!
&lt;/h4&gt;

&lt;p&gt;So this was a really basic approach to deploying your gatsby site to AWS. &lt;/p&gt;

&lt;p&gt;I found working with Gatsby.js so enjoyable. The documentation is friendly and there are plenty of articles and walkthroughs out there which help to clarify for various usecases. My favourite part of the process was being able to connect to a database with just a few lines of config and keep the data fetching out of the page creation. I could create 700+ pages with one template and the data fetching done in 20 lines in a config file. Then instead of generating each page on request, Gatsby builds all your files at build time meaning that you are only ever serving static html files to the end user. SPEEDY! &lt;/p&gt;

&lt;p&gt;Deploying to AWS Resources is slightly more complex and I needed a hand with some of the config but that worked out fairly simple in the end too!&lt;/p&gt;

&lt;p&gt;There are, of course, many other ways to do this however, hopefully this walkthrough provides a possible starting point for getting a personal project or a proof of concept up and running quickly! &lt;/p&gt;




&lt;h4&gt;
  
  
  Useful reading:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.gatsbyjs.org/docs/quick-start/"&gt;Gatsby Docs&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html#cli-quick-configuration"&gt;Configure AWS CLI Profile&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://dev.to/maciekgrzybek/make-your-website-live-with-serverless-framework-little-bits-16gj"&gt;Make your website live with serverless framework&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://serverless.com/blog/deploy-serverless-frontend-with-serverless-finch-plugin/"&gt;Deploy serverless front end with serverless-finch&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://www.davidbaumgold.com/tutorials/host-static-site-aws-s3-cloudfront/#make-a-cloudfront-distribution"&gt;Make a CloudFront Distribution&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gatsby</category>
      <category>experiment</category>
      <category>aws</category>
    </item>
    <item>
      <title>How learning to code is building my resilience, one mistake at a time</title>
      <dc:creator>Hannah Cross</dc:creator>
      <pubDate>Sun, 10 Nov 2019 09:48:14 +0000</pubDate>
      <link>https://forem.com/crossy_h/how-learning-to-code-is-building-my-resilience-one-mistake-at-a-time-4ma1</link>
      <guid>https://forem.com/crossy_h/how-learning-to-code-is-building-my-resilience-one-mistake-at-a-time-4ma1</guid>
      <description>&lt;p&gt;Dear new programmer,&lt;/p&gt;

&lt;p&gt;I am so excited that you have also decided to join the world of programming! That said I know it can be tough to start with and things don't always go so smoothly. But don't give up! &lt;/p&gt;

&lt;p&gt;Feeling like you have failed at something is not a great feeling. When you make a mistake that you believe you could have avoided or when you pick what turns out to be the wrong approach or solution, it can be so frustrating. It happens to many of us. &lt;/p&gt;

&lt;p&gt;If you’re like me, these perfectly normal moments can really get you down. I have agonised over what I could have done better or that I should have been more prepared. At one point in my life, I felt that every mistake I made was a reflection of how bad I was as a person. However, I have since put a lot of focus on adhering to the advice of "learning from your mistakes" and do my best to extract some sort of knowledge or wisdom from each experience.&lt;/p&gt;

&lt;p&gt;For me, this realisation and focus really came about when I changed career and started studying to be a web developer. One of the first lessons I was taught as a developer was how to fail. And break things. On a regular basis.&lt;/p&gt;

&lt;p&gt;One thing I was constantly told at the start of my coding journey was that breaking things (or making mistakes) is integral to the whole process. Furthermore, this does not change throughout your career. Even the most senior and experienced developers make mistakes. It can be small like a typo in the spelling of a class or it could be huge like an expired certificate taking down an entire mobile phone network…!&lt;/p&gt;

&lt;p&gt;The reality is that mistakes will happen, no matter what you do and where you are, but the point is to learn from them.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;Failures, repeated failures, are finger posts on the road to achievement. One fails forward toward success.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;C. S. Lewis&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;In order to build my resilience I needed to learn how to accept that making mistakes is natural and human without also feeling like my career, my life, or the world, was falling apart.&lt;/p&gt;

&lt;p&gt;I started thinking about how to achieve this, and I realised I needed to find an environment where mistakes were understood and supported. I wanted to feel like I could try new things without fear or anxiety and learn from any mistakes or failures along the way.&lt;/p&gt;

&lt;p&gt;This is one of the great things about my experience of the Tech community. The only way to advance is to try and fail. It’s the only way you learn and figure out how to improve. Furthermore, programming  teams and projects are set up with frameworks and systems that allow for mistakes to happen – development environments, code reviews, user acceptance testing, test driven development, business driven development, stand ups, release cycles and more.&lt;/p&gt;

&lt;p&gt;As a discipline it recognises that in order to improve and get better we need to be allowed to take risks which may end in failure. We need to try new things, test ideas, reaffirm our existing knowledge and yes, break things once in a while in order to succeed.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;There is no innovation and creativity without failure. Period.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Brené Brown&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  The tough things
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;High Pressure to Deliver. If your resilience is low and you enter a world where you are regularly making mistakes and breaking things, it can get pretty stressful. Just like any high pressure job can feel.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mistakes are relentless. In the first 9 months of working in my first developer job, my ability to pick myself up and move on was challenged. So many days had been spent agonising over a mistake I felt that I should have been able to identify sooner, or an error I should never have made in the first place. There were times when I let the feelings of failure or frustration get me down. It felt personal. It’s hard not to take these moments personally. I found it difficult. But I know I am not the only one who has felt this either.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Overwhelming number of resources and solutions and options. One of the biggest challenges for me was to identify which advice, solution or result in a google search was the most relevant or useful to my problem. Essentially, knowing what question to ask and figuring out if the answer is the one you need. This can feel like hacking through a jungle and it takes practice to slim down your research time for even the "simplest" of things. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The awesome things
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;I feel supported. Towards the end of last year, I had a seemingly endless run of tough days. Instead of telling me to ‘just get over it’ or ‘toughen up’ my boss and colleagues listened and offered advice and perspective. My learning definately sped up with this encouragement and support. This is even more true of my current job. The people you surround yourself with are so important in how well you learn and grow. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The online tech community has some great social media accounts. These social media accounts have been an amazing and surprising source of strength. There are so many instagram posts, medium articles, twitter accounts… all sharing the mistakes they made or the knowledge they gained or encouraging words to motivate their fellow developers. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I learn everyday. Every time I get stuck, break something or make a mistake, I take a breath and remind myself it's not just me and I will become a better developer because of this incident. I try not to judge myself too harshly, but instead accept that it happened and figure out why. With every bit of knowledge I gain, I inch closer to feeling more confident and more equipped to deal with the next challenge that comes my way.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I make things and people use them in the real world (sometimes) !!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;&lt;em&gt;Anyone who has never made a mistake has never tried anything new.&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Albert Einstein&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;As you can see and do most likely know, the good outweighs the bad. &lt;br&gt;
Of course, I still get upset and stressed but thanks to the help of my friends and colleagues, plus a healthy dose of perspective, now I am ready to pick myself up and try again. I feel ready to try and find the positive learning from the mistake instead of dwelling on what went wrong or what people are thinking about me as a result.&lt;/p&gt;

&lt;p&gt;I will no doubt make a mess of something else. But I know it will be ok because with every tumble, a bit more knowledge gets logged in my brain. I will approach the problem differently next time and so keep moving forwards.&lt;/p&gt;

&lt;p&gt;So, if you are feeling stressed, worried or frustrated with your progress or that you haven’t done enough. I know that you have. I also promise you that many other people have felt what you’re feeling. It won't be long before you are telling others who come after you the exact same thing. &lt;/p&gt;

&lt;p&gt;Hannah xxx&lt;/p&gt;

</description>
      <category>learning</category>
      <category>wellbeing</category>
      <category>resilience</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Nevertheless, Hannah Cross Coded</title>
      <dc:creator>Hannah Cross</dc:creator>
      <pubDate>Thu, 07 Mar 2019 11:23:53 +0000</pubDate>
      <link>https://forem.com/crossy_h/nevertheless-hannah-cross-coded--3dlc</link>
      <guid>https://forem.com/crossy_h/nevertheless-hannah-cross-coded--3dlc</guid>
      <description>&lt;h2&gt;
  
  
  I started to code in 2017 because...I wanted to build things and solve problems. I wanted to prove to myself that it wasn't "beyond me" or "too difficult"... and I did! I moved from a fundraising role in the cultural sector to a tech job within six months - anything is possible!
&lt;/h2&gt;

&lt;h2&gt;
  
  
  My favourite code editor is...VS code. I thought Atom was "the one" for a long time but in the past six months I have been completely converted by the integrated terminal, panda theme and debugging.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  I hope for more women and young people to get involved with tech. I am currently volunteering for Code First Girls as I think everyone should have the opportunity to learn, even if it doesn't turn into a career. It's a really powerful life-skill. I also want to see the cultural and charitable sectors have more access to new technologies and IT infrastructures - this could transform the way some organisations work.
&lt;/h2&gt;

</description>
      <category>wecoded</category>
    </item>
  </channel>
</rss>
