<?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: Live Long &amp; Ponder</title>
    <description>The latest articles on Forem by Live Long &amp; Ponder (@livelong_ponder).</description>
    <link>https://forem.com/livelong_ponder</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%2F1021901%2Fe8cb2d0c-d748-4da4-b15b-f1131cbefffd.jpg</url>
      <title>Forem: Live Long &amp; Ponder</title>
      <link>https://forem.com/livelong_ponder</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/livelong_ponder"/>
    <language>en</language>
    <item>
      <title>How I Found A Weapon Against Imposter Syndrome</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Sat, 30 Dec 2023 01:08:53 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/how-i-found-a-weapon-against-imposter-syndrome-1gin</link>
      <guid>https://forem.com/livelong_ponder/how-i-found-a-weapon-against-imposter-syndrome-1gin</guid>
      <description>&lt;p&gt;From PM to Engineer to Interior Designer, imposter syndrome can be found anywhere&lt;/p&gt;




&lt;p&gt;Back in school, it was easy to track how well I was doing.&lt;/p&gt;

&lt;p&gt;I had conferences, grades, constant teacher feedback, and comparisons with my friends.&lt;/p&gt;

&lt;p&gt;With all those in mind, I could focus on certain areas and adjust as necessary.&lt;/p&gt;

&lt;p&gt;Reality hit me hard when I got into the “real world”.&lt;/p&gt;

&lt;p&gt;A real job with loose expectations and little feedback.&lt;/p&gt;

&lt;p&gt;I began to think I wasn’t doing well since no one was there to give me a grade or tell me I needed to do something different.&lt;/p&gt;

&lt;p&gt;Working hard is great, but I realized I didn’t understand if my hard work was up to snuff or if I had optimized processes.&lt;/p&gt;

&lt;p&gt;This process grew into my ever-dreaded &lt;strong&gt;IMPOSTER SYNDROME&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--K5LAiyF2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lkj336r4hcmkz4qanf1z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--K5LAiyF2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lkj336r4hcmkz4qanf1z.png" alt="Photo by Miguel Luis on Unsplash" width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  No Feedback Feeds The Imposter Monster
&lt;/h2&gt;

&lt;p&gt;I wasn’t aware of how well I was doing my work, and began to compare myself to people around me. “Oh this person is doing so much work, I must be doing something wrong”.&lt;/p&gt;

&lt;p&gt;Instead of asking others about their habits or schedules, I looked only at their output.&lt;/p&gt;

&lt;p&gt;I may have been doing well, but couldn’t convince myself that was true.&lt;/p&gt;

&lt;p&gt;This meant I was comparing my whole stack of work, to only a layer of theirs.&lt;/p&gt;

&lt;p&gt;This isn’t ideal, but I was young and too afraid to ask questions at the time.&lt;/p&gt;

&lt;p&gt;I continued this cycle until I moved on and became a PM and a leader of a team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning How to Give and Receive Feedback
&lt;/h2&gt;

&lt;p&gt;As a new PM I had no idea what I was doing.&lt;/p&gt;

&lt;p&gt;I was an emergency fill for someone who spent a day bull-rushing through everything he could think of, then handing me the reins.&lt;/p&gt;

&lt;p&gt;Oh yeah, and a massive deadline was one week away, perfect timing.&lt;/p&gt;

&lt;p&gt;Luckily I had a group of experienced teammates I could rely on. They helped me get up to speed and were very open to telling me when I was wrong.&lt;/p&gt;

&lt;p&gt;I learned I could no longer operate in a silo the way I used to, and sought to fix that.&lt;/p&gt;

&lt;p&gt;We started 1:1 feedback sessions called “slowbacks” every Friday. It opened my eyes to what was missing.&lt;/p&gt;

&lt;p&gt;Some of the first feedback I received was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You seem like you’re afraid to fail, don’t be&lt;/li&gt;
&lt;li&gt;Have more confidence&lt;/li&gt;
&lt;li&gt;Approach unknowns with humility&lt;/li&gt;
&lt;li&gt;Ask more questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This woke me up and I still have &lt;strong&gt;DON’T BE AFRAID TO FAIL&lt;/strong&gt; as a note on my home screen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personalize a Feedback Loop to Tame the Monster
&lt;/h2&gt;

&lt;p&gt;Learning how to give and receive constructive criticism gave me a confidence boost.&lt;/p&gt;

&lt;p&gt;I wanted to ensure that the application of these practices worked in any new team or position.&lt;/p&gt;

&lt;p&gt;It’s not realistic to think I’d always have helpful teammates or a group accustomed to the practice of feedback.&lt;/p&gt;

&lt;p&gt;I needed a personal system.&lt;/p&gt;

&lt;p&gt;To do this I needed goals to measure my growth.&lt;/p&gt;

&lt;p&gt;I started by setting some personal goals, using the techniques I wrote about here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/@livelongandponder/how-a-personal-trainer-taught-me-to-tackle-difficult-goals-f4e94b46db5b?source=post_page-----2c4c4a495d83--------------------------------"&gt;How a Personal Trainer Taught Me to Tackle Difficult Goals&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now I needed some way to check in on my goals.&lt;/p&gt;

&lt;p&gt;One of my goals was to become a better frontend developer and moved to a new team for it.&lt;/p&gt;

&lt;p&gt;Our team didn’t have specified time for feedback so I had to create my own.&lt;/p&gt;

&lt;p&gt;I established my goals with my lead, and I began to sometimes ask for feedback. No set meeting, but asked whenever there was availability.&lt;/p&gt;

&lt;p&gt;I would steer the questions towards my performance in certain areas given my focus each week. This would help me hone in on specifics, rather than receiving a general “You’re doing fine/bad”.&lt;/p&gt;

&lt;p&gt;I came out of each session with notes to take back and examine against my goals.&lt;/p&gt;

&lt;p&gt;Relevant notes would help adjust my scope all with my personal growth in mind.&lt;/p&gt;

&lt;p&gt;There was a noticeable change in my positional confidence.&lt;/p&gt;

&lt;p&gt;The sessions served as guardrails to help guide me to improving not only as an individual but as a teammate.&lt;/p&gt;

&lt;p&gt;I understood my role better and had actionable steps to take for improvement.&lt;/p&gt;

&lt;p&gt;After a while, this sort of transparency started to permeate through the team. More and more people shared where they wanted to grow and started asking for feedback.&lt;/p&gt;

&lt;p&gt;Now we are working to make a more regular schedule for each teammate.&lt;/p&gt;

&lt;p&gt;Everyone wants to get better, sometimes we don’t know how or when to ask.&lt;/p&gt;




&lt;p&gt;This works great if you’re in a team, but is more difficult in positions where you may be the sole producer.&lt;/p&gt;

&lt;p&gt;In this case, you can still garner valuable feedback, with more reflective effort.&lt;/p&gt;

&lt;p&gt;Take time each week to review all the tasks you had.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If they were set by you were they valuable and effective?&lt;/li&gt;
&lt;li&gt;Can you replace some?&lt;/li&gt;
&lt;li&gt;Can you take on more?&lt;/li&gt;
&lt;li&gt;Can I show my work to an unbias party for assessment?&lt;/li&gt;
&lt;li&gt;Was this work pushing toward my end goal?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The person you’re asking will be yourself, and you will have to be objective about your work.&lt;/p&gt;

&lt;p&gt;Treat it like a second-self holding you to higher standards, and ask a lot of introspective questions!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Imposter syndrome can manifest in many ways.&lt;/p&gt;

&lt;p&gt;I let it seep in by working in a silo.&lt;/p&gt;

&lt;p&gt;To help fight it you’ll want to establish goals and guardrails to keep your eye on the prize.&lt;/p&gt;

&lt;p&gt;Don’t be afraid to ask others to help keep you on the right track, by being open and honest about your goals. It may inspire others to do the same!&lt;/p&gt;

&lt;p&gt;If you’re in a place where you don’t have the luxury of outside feedback, set aside some time for personal reflection. Take time each week to look at your recent work. Ask objective questions to pull out the true value of your work.&lt;/p&gt;

&lt;p&gt;Imposter syndrome is something everyone feels. Being willing to take it on can be rewarding for individuals and teams alike.&lt;/p&gt;




&lt;p&gt;How have you fought back against Imposter Syndrome? Let me know!&lt;/p&gt;

&lt;p&gt;This Article was originally posted on Medium &lt;/p&gt;

&lt;p&gt;…Until Next time =)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Note-Taking Weapons I Use to Tame the Tech Beast</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Thu, 21 Sep 2023 19:37:38 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/note-taking-weapons-i-use-to-tame-the-tech-beast-3ji9</link>
      <guid>https://forem.com/livelong_ponder/note-taking-weapons-i-use-to-tame-the-tech-beast-3ji9</guid>
      <description>&lt;p&gt;Tools to boost your productivity to conquer the workweek monster&lt;/p&gt;




&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gFWbk_Ci--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4x16z0os3pgu193xhs75.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gFWbk_Ci--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4x16z0os3pgu193xhs75.jpg" alt="Photo by AltumCode on Unsplash" width="720" height="900"&gt;&lt;/a&gt;&lt;br&gt;
In this modern era, almost everyone has multiple computers around their house.&lt;/p&gt;

&lt;p&gt;Problems are now solved by devices specifically crafted for that purpose.&lt;/p&gt;

&lt;p&gt;Want to play games with the highest possible graphics? Build a powerful PC.&lt;/p&gt;

&lt;p&gt;Want to work while traveling? Get a lightweight laptop.&lt;/p&gt;

&lt;p&gt;Do more design while traveling? Get a 2–1 tablet/laptop combo.&lt;/p&gt;

&lt;p&gt;Want to play games on the go? Get a Switch.&lt;/p&gt;

&lt;p&gt;Combine this with machines issued by companies, and you're left with many devices spread across your household, with all your thoughts/notes spread across them.&lt;/p&gt;

&lt;p&gt;I've found this problem infuriating as I want all my notes to be consolidated in one place so that I can reference them easily whether I'm on my PC, work laptop, phone, tablet, or home laptop (it's too much I know).&lt;/p&gt;

&lt;p&gt;I think other people struggle with this problem as well, so I wanted to share a few tools that I've found useful that help me fight back against the multi-headed hydra of technology. (Not affiliated with these in any way, just enjoy using them)&lt;/p&gt;
&lt;h2&gt;
  
  
  Gitbook
&lt;/h2&gt;

&lt;p&gt;Gitbook has come a long way since I started using it, but it's a helpful tool that you can use to keep notes across devices.&lt;/p&gt;

&lt;p&gt;I've used the free version extensively and enjoyed the ability to create multiple sections to keep my thoughts separate, but accessible.&lt;/p&gt;

&lt;p&gt;For example, I created a section dedicated to learning used to keep track of notes and other important topics related to my technical growth.&lt;/p&gt;

&lt;p&gt;As I've talked about before I've moved into a programming position which comes with a firehose of information.&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="https://medium.com/@livelongandponder/the-backwards-journey-from-pm-to-engineer-why-i-chose-code-8a7547f3fe6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z4ovNKo4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fill:88:88/1%2AiFKy6Kh9TpHlvHpaA0zZ0Q.jpeg" alt="Live Long &amp;amp; Ponder"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://medium.com/@livelongandponder/the-backwards-journey-from-pm-to-engineer-why-i-chose-code-8a7547f3fe6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The “Backwards” Journey From PM to Engineer: Why I Chose Code | by Live Long &amp;amp; Ponder | Jul, 2023 | Medium&lt;/h2&gt;
      &lt;h3&gt;Live Long &amp;amp; Ponder ・ &lt;time&gt;Jul 24, 2023&lt;/time&gt; ・ 
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YjpYcCMa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/medium-f709f79cf29704f9f4c2a83f950b2964e95007a3e311b77f686915c71574fef2.svg" alt="Medium Logo"&gt;
        Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;p&gt;To help control the blast of info, I've used Gitbook to consolidate my learnings and reference them no matter what platform I'm using.&lt;/p&gt;

&lt;p&gt;They have solid formatting for code blocks, a variety of plugins you can utilize, and much more to help keep your technical notes looking concise and professional.&lt;/p&gt;

&lt;p&gt;One helpful feature is the ability to invite others to shared spaces and collaborate on work. This allows you to better coordinate with your friends/co-workers, without duplicated effort.&lt;/p&gt;

&lt;p&gt;The downside of this feature is it doesn't have real-time collaboration.&lt;/p&gt;

&lt;p&gt;I've kept interpersonal interactions in a separate private section that I want to remember such as feedback I've gotten, or funny interactions I can use to roast somebody later.&lt;/p&gt;

&lt;p&gt;I often forget those little details so having the ability to access them anytime is immensely valuable.&lt;/p&gt;

&lt;p&gt;If you're looking for somewhere to keep track of technical info all the time, this is a great option.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://www.gitbook.com/" rel="noopener noreferrer"&gt;
      gitbook.com
    &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Google Docs/Keep
&lt;/h2&gt;

&lt;p&gt;Google Docs is a household name when it comes to productivity.&lt;br&gt;
Collaborating on documents together and generating ideas live is extremely easy when using the tool.&lt;/p&gt;

&lt;p&gt;There is also a mobile version now that allows you to have the same functionality as the web version without too many drawbacks.&lt;/p&gt;

&lt;p&gt;Keep allows you to set small notes that can integrate into the rest of the Google suite. Combining the two results in a powerful combination that can help keep your productivity high.&lt;/p&gt;

&lt;p&gt;One downside is organizing your notes in Google Drive isn't always convenient. If you're trying to document it on your company drive, and take personal notes on the side, it's easy to get jumbled up in the shared drives with the amount of files and folders you have to sort through.&lt;/p&gt;

&lt;p&gt;Another place this falls short is technical documentation.&lt;/p&gt;

&lt;p&gt;It's much easier to insert code blocks and Markdown into more catered solutions like Gitbook/BoostNote.&lt;/p&gt;

&lt;p&gt;But Google Docs thrives as a general-purpose tool.&lt;/p&gt;

&lt;p&gt;I've found the most value when I'm coordinating my current tasks through Google, keeping notes in Keep, and working on a Google doc with others.&lt;/p&gt;

&lt;p&gt;I jot down my own thoughts on the side while collaborating with others all at the same time in a seamless manner.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.google.com/docs/about/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--7jbxN4ZL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://kstatic.googleusercontent.com/files/97ecc831526fbe8c60fe88ef0d7a6cbf06361809f0acf857326681f6a1f35740d3bd7d69bf4a5381f5c31a863bccace4d9d1660379182901f73d24ef137f6fb4" height="36" class="m-0" width="36"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.google.com/docs/about/" rel="noopener noreferrer" class="c-link"&gt;
          
      Google Docs: Online Document Editor | Google Workspace
    
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Use Google Docs to create, and collaborate on online documents. Edit together with secure sharing in real-time and from any device.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Al73-2Ap--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ssl.gstatic.com/images/branding/product/2x/hh_docs_36dp.png" width="72" height="72"&gt;
        google.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Other Contenders
&lt;/h2&gt;

&lt;p&gt;I've used the 2 above extensively, but think the contenders here are worth looking into as well if they fit your needs.&lt;/p&gt;

&lt;p&gt;No one solution is perfect for everyone so take a look and see if it best fits you!&lt;/p&gt;

&lt;h2&gt;
  
  
  BoostNote
&lt;/h2&gt;

&lt;p&gt;BoostNote is another solution that showcases a variety of powerful features. I found it most useful in collaboration with others in real-time.&lt;/p&gt;

&lt;p&gt;Some things are locked behind a paywall, but their prices aren't too extreme. Free, $5, or $8/month.&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;a href="https://boostnote.io/features/all" rel="noopener noreferrer"&gt;
      boostnote.io
    &lt;/a&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Microsoft OneNote
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.microsoft.com/en-us/microsoft-365/onenote/digital-note-taking-app" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--OenUmP3F--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://cdn-dynmedia-1.microsoft.com/is/image/microsoftcorp/Image_Education-V2_1600x600_RE27VKa%3FresMode%3Dsharp2%26op_usm%3D1.5%2C0.65%2C15%2C0%26wid%3D1920%26qlt%3D100%26fit%3Dconstrain" height="300" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.microsoft.com/en-us/microsoft-365/onenote/digital-note-taking-app" rel="noopener noreferrer" class="c-link"&gt;
          Microsoft OneNote Digital Note Taking App | Microsoft 365
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          Microsoft OneNote has your digital notebook needs covered. With OneNote 2016 we've made our notebook organizer tools even stronger and collaboration easier.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
        microsoft.com
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Notion
&lt;/h2&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://www.notion.so/" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://res.cloudinary.com/practicaldev/image/fetch/s--y3J0Yr4s--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.notion.so/front-static/meta/default.png" height="420" class="m-0" width="800"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://www.notion.so/" rel="noopener noreferrer" class="c-link"&gt;
          Your connected workspace for wiki, docs &amp;amp; projects | Notion
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          A new tool that blends your everyday work apps into one. It's the all-in-one workspace for you and your team.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://res.cloudinary.com/practicaldev/image/fetch/s--yp4WOLdq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://www.notion.so/front-static/favicon.ico" width="64" height="64"&gt;
        notion.so
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iheqkh9---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vjopxmj20vdtfrjh3u3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iheqkh9---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4vjopxmj20vdtfrjh3u3.png" alt="Microsoft Designer Generated" width="512" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;With multiple devices, it can be extremely frustrating to not remember where you wrote something down. Or not even have the option to write something down.&lt;/p&gt;

&lt;p&gt;Using one of these tools you won't have to worry about searching your local notes on your PC, Laptop, or phone, and instead have an easy way to keep track of your thoughts.&lt;/p&gt;

&lt;p&gt;I have been able to jot down quick ideas in Gitbook on my phone and elaborate on them later with my laptop without losing too much context. As someone trying to write more often, this is extremely important to me.&lt;/p&gt;

&lt;p&gt;Those ideas you generate are precious but often fleeting, so write them down quickly!&lt;/p&gt;

&lt;p&gt;Use these tools to your advantage to use less mental power recall and direct it towards creating!&lt;/p&gt;

&lt;p&gt;I hope these tools can be as useful to you as they have been to me, Write on!&lt;/p&gt;




&lt;p&gt;Originally posted on &lt;a href="https://medium.com/@livelongandponder/membership"&gt;Here&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@livelongandponder/note-taking-weapon-i-use-to-tame-the-tech-beast-a1dcb236e5ed"&gt;My Medium Profile!&lt;/a&gt;&lt;br&gt;
…Until Next time =)&lt;/p&gt;

</description>
      <category>workplace</category>
    </item>
    <item>
      <title>Two Legendary Tales: The Unicorn Project Vs. Phoenix Project</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Thu, 17 Aug 2023 12:34:20 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/two-legendary-tales-the-unicorn-project-vs-phoenix-project-lbj</link>
      <guid>https://forem.com/livelong_ponder/two-legendary-tales-the-unicorn-project-vs-phoenix-project-lbj</guid>
      <description>&lt;p&gt;Learning how to deliver value from revolutionary books&lt;/p&gt;




&lt;p&gt;When you hear Unicorn vs. Phoenix you might think of two fantastical beings outsmarting each other in a mystical battlefield.&lt;/p&gt;

&lt;p&gt;Or maybe you are a very literal person and think of a bird fighting a horse, to each their own.&lt;/p&gt;

&lt;p&gt;It would be fun to someday write about the results of that battle, but for the purpose of this article, we'll stay grounded in reality.&lt;/p&gt;

&lt;p&gt;The Unicorn Project and The Phoenix Project are two books by Gene Kim focused on telling a similar story from different perspectives. The goal is to inform the reader about key tenants of DevOps through the stories of Bill Palmer and Maxine.&lt;/p&gt;

&lt;p&gt;This isn't meant to be a book review of either but aims to tell you how I think reading both can provide incredible value, no matter where you fall in your daily hierarchy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background
&lt;/h2&gt;

&lt;p&gt;I felt ensnared by screens in my daily life. I would stare at a computer screen all day for work, relax on my phone, watch some TV, and maybe end the day back on my PC. This started to weigh heavily on me.&lt;/p&gt;

&lt;p&gt;I wanted to stop using my phone so often, to cut down on screen time and also improve my mental health. So I got into the practice of building constructive habits. (Shoutout Atomic Habits by James Clear)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3hHp8OIe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oo8nwvm4cnycl5jnuykv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3hHp8OIe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oo8nwvm4cnycl5jnuykv.jpg" alt="Photo by Lala Azizli on Unsplash" width="800" height="533"&gt;&lt;/a&gt; Photo by Lala Azizli on Unsplash&lt;/p&gt;

&lt;p&gt;One place I identified I could cut down my screentime was during Lunch.&lt;/p&gt;

&lt;p&gt;I was using my phone a lot during my lunch break. Working from home had me watching YouTube, scrolling social media, or playing games during the break.&lt;/p&gt;

&lt;p&gt;I decided instead to start listening to audiobooks to keep my eyes off of my phone while allowing me to do other activities like stretching, walking outside, or playing with the dogs.&lt;/p&gt;

&lt;p&gt;The Phoenix Project felt like the perfect place to start.&lt;/p&gt;

&lt;p&gt;It focused more on the management side of IT operations and software delivery by telling a personal story full of insightful lessons, rather than giving you an entire instruction manual full of complicated jargon.&lt;/p&gt;

&lt;p&gt;I didn't even know The Unicorn Project existed, but I began listening to that immediately after finishing The Phoenix Project. Focusing more on the developer's experience in the same storyline again from a personal perspective was such a refreshing way to peek behind the curtains.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should You Read Both?
&lt;/h2&gt;

&lt;p&gt;TL;DR: Yes&lt;/p&gt;

&lt;p&gt;Don't think that as a manager you should only listen to The Phoenix Project or as a dev you should only care about The Unicorn Project. Both will provide context that ties the entire story together, and make sense of the decisions being made from all levels.&lt;/p&gt;

&lt;p&gt;It was eye-opening first to hear the pressure and rigidity being forced upon Bill (upper management) that affected Maxine (developer). Other people on the ground floor were frustrated with decisions being made because they didn't see the battle above them fighting for the right decisions.&lt;/p&gt;

&lt;p&gt;Taking these learnings to the real world can have a tangible impact.&lt;/p&gt;

&lt;p&gt;Understanding both sides of a crisis will develop workplace empathy and knowledge, making everyone collaborate to attack the problem, rather than each other.&lt;/p&gt;

&lt;p&gt;If you become the embodiment of those values, you will be an invaluable asset no matter where you are placed.&lt;/p&gt;

&lt;p&gt;The next time you're in an uncertain environment with other people throwing new solutions into the mix, slow down and try to view the problem as a whole.&lt;/p&gt;

&lt;p&gt;We often get too narrowly focused on one specific task from a particular angle, we forget others are viewing it from their unique angles.&lt;/p&gt;

&lt;p&gt;Understanding where each side is coming from will help generate a solution that can lead to more success and collaboration since you will probably discover you've been looking at the same beast, just with different glasses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personal Value
&lt;/h2&gt;

&lt;p&gt;As I've talked about previously, I've transitioned from a PM position to a developer role. So both books have given me invaluable personal lessons I've tried to bring to my team, and I'd like to share them with you.&lt;/p&gt;

&lt;p&gt;The "Backwards" Journey From PM to Engineer: Why I Chose Code&lt;br&gt;
My journey from PM to Engineer: A series of lessons Learned from a Backwards Transition&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__link"&gt;
  &lt;a href="https://medium.com/@livelongandponder/the-backwards-journey-from-pm-to-engineer-why-i-chose-code-8a7547f3fe6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--z4ovNKo4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fill:88:88/1%2AiFKy6Kh9TpHlvHpaA0zZ0Q.jpeg" alt="Live Long &amp;amp; Ponder"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://medium.com/@livelongandponder/the-backwards-journey-from-pm-to-engineer-why-i-chose-code-8a7547f3fe6" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;The “Backwards” Journey From PM to Engineer: Why I Chose Code | by Live Long &amp;amp; Ponder | Jul, 2023 | Medium&lt;/h2&gt;
      &lt;h3&gt;Live Long &amp;amp; Ponder ・ &lt;time&gt;Jul 24, 2023&lt;/time&gt; ・ 
      &lt;div class="ltag__link__servicename"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YjpYcCMa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/medium-f709f79cf29704f9f4c2a83f950b2964e95007a3e311b77f686915c71574fef2.svg" alt="Medium Logo"&gt;
        Medium
      &lt;/div&gt;
    &lt;/h3&gt;
&lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Phoenix
&lt;/h3&gt;

&lt;p&gt;Listening to The Phoenix Project as a PM helped me relate to the issues that I was facing daily, and gave me ideas on how I could solve my personal issues. I felt like I was gaining knowledge on how to conduct my job more effectively.&lt;/p&gt;

&lt;p&gt;It became easier to collaborate with others and find creative paths to solutions that had been hiding from the team.&lt;/p&gt;

&lt;p&gt;When I was a developer I felt like I could understand the unseen battles that my managers were going through, since PMs don't always explain every meeting they attend.&lt;/p&gt;

&lt;p&gt;It became easier to tease out questions that could help the team understand the issues facing our team from a higher level. As a manager, you don't want to overshare high-level problems, but I found that unified teams that understand the problems ahead of them are far more effective as an informed unit rather than an informed leader with underlings flailing blindly to accomplish goals.&lt;/p&gt;

&lt;p&gt;When each individual in a team is aware of the direction and overall goals of not just the product, but the organization, you build focused and effective solutions rather than something that only meets some of your criteria.&lt;/p&gt;

&lt;p&gt;This applies to more than just corporate or large-scale organizations, you can practice this in daily life. Don't be alone when solving problems, invite others to collaborate and share your goals. You will be amazed at how much impact informed individuals aligned to solving clearly laid out goals can have.&lt;/p&gt;

&lt;h3&gt;
  
  
  Unicorn
&lt;/h3&gt;

&lt;p&gt;As a PM listening to the daily issues Maxine faced really opened my eyes to my ignorance. I never truly understood the daily hurdles that developers faced until I heard them and experienced them myself.&lt;/p&gt;

&lt;p&gt;I finally understood that I expected too much without truly spending time to figure out why some days seemed so unproductive. I admit my mistake, and now can practice better empathy towards others I work with.&lt;/p&gt;

&lt;p&gt;It's easy to get stuck in a routine as a PM because Google Meets or Zoom are hardly ever down.&lt;/p&gt;

&lt;p&gt;Compared to developers, sometimes builds don't work, or one tool was updated which is breaking existing code, or someone implemented a change that broke everything or…&lt;/p&gt;

&lt;p&gt;The list goes on and on, with a seemingly unique issue arising each day.&lt;/p&gt;

&lt;p&gt;The beauty of The Unicorn Project is discovering how collaborating towards those issues and documenting discoveries can eliminate daily issues across so many lives.&lt;/p&gt;

&lt;p&gt;Maxine ran into the same daily issues as everyone else, but instead of accepting it as truth, she sought out creative solutions and creative people to clear these hurdles for everyone.&lt;br&gt;
We took this to heart and instead of saying:&lt;/p&gt;

&lt;p&gt;"I'm having build issues, I'll look into it but not sure when this will be done, then I can help out on other objectives."&lt;/p&gt;

&lt;p&gt;We say:&lt;/p&gt;

&lt;p&gt;"I'm having build issues, can we take some time to address this and come up with a documented solution as a team so that it doesn't affect anyone else?"&lt;/p&gt;

&lt;p&gt;This change in how we collaborate increased our productivity but more importantly established collaborative norms focused on helping others, rather than shunning them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I use Developer or PM a lot, but these lessons are beyond the tech industry. Any manager and employee can benefit from the lessons that these books provide. Understanding other people's job roles and responsibilities not only helps us solve problems better but also become more understanding humans.&lt;/p&gt;

&lt;p&gt;The Phoenix Project and The Unicorn Project may be focused on tech and learning how to implement DevOps, but they also provide an opportunity to be more empathetic humans.&lt;/p&gt;

&lt;p&gt;Reading both books offers a unique way to see two sides of the same story. Next time you encounter an obstacle, realize that there are multiple sides to it and take the time to step back to understand more than just your perspective.&lt;/p&gt;

&lt;p&gt;Humans accomplish amazing things when working together, so be the one to welcome collaboration into your daily routine.&lt;/p&gt;




&lt;p&gt;…Until Next time =)&lt;/p&gt;

&lt;p&gt;Originally posted on &lt;a href="https://medium.com/@livelongandponder/membership"&gt;Medium&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cover Image: Generated by Microsoft Designer&lt;br&gt;
Photo by Lala Azizli on Unsplash&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Developers Abhore Meetings</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Thu, 13 Jul 2023 23:04:51 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/why-developers-abhore-meetings-3gjo</link>
      <guid>https://forem.com/livelong_ponder/why-developers-abhore-meetings-3gjo</guid>
      <description>&lt;p&gt;&lt;em&gt;Practical tips for leaders and engineers to improve the quality and productivity of meetings&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nobody enjoys days with long endless meetings, or a thousand short ones sprinkled throughout, but as a developer, these days are the least productive and most disheartening.&lt;br&gt;
This article aims to point out what makes for ineffective meetings, and how to establish healthy and productive meeting culture in a team. I'm hoping to provide a unique perspective as I've done work both as a developer, and a product manager within the last year alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Developer Struggle
&lt;/h2&gt;

&lt;p&gt;If you're a developer you know the pain of staring at a problem, diving through dozens of files and lines and methods to get an understanding of the issue. You finally get a grasp on what's causing the issue and are planning on taking action when all of a sudden &lt;em&gt;PING&lt;/em&gt; a meeting is starting.&lt;/p&gt;

&lt;p&gt;After attending a meeting you probably didn't need to be at, you come back to look at the code and need to catch the train of thought that left the station an hour ago. Even if you were documenting your actions from earlier, it's hard to grab that context again. &lt;/p&gt;

&lt;p&gt;This context loss is even more painful when you're having trouble getting your local environment to build. You could spend hours troubleshooting problems before you even get to implement your feature. &lt;/p&gt;

&lt;p&gt;At last, you finally get to writing some code and BAM it's lunch. Another 30 mins to an hour later you have to restart the cognitive process.&lt;/p&gt;

&lt;p&gt;As a developer, you run into new problems every day and are working hard to find creative solutions to them, whether it's planned in the story or some new update breaking your local environments. Being pulled away to other tasks in the middle of work can be jarring and slow down the problem-solving nature of the work.&lt;/p&gt;

&lt;p&gt;This is a small example of how even one meeting can disrupt a productive flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Makes a Meeting Unproductive?
&lt;/h2&gt;

&lt;p&gt;Having meetings is oftentimes unavoidable, but how can we shift from having a lot of unproductive meetings to having a healthy routine of effective meetings? First, we need to understand what a bad meeting looks like.&lt;/p&gt;

&lt;h3&gt;
  
  
  Too Many People Invited
&lt;/h3&gt;

&lt;p&gt;If the audience is too big, engagement will be lower and people will be less inclined to chime in. The bigger the group, the more people will think "This doesn't involve me, why am I here?" &lt;/p&gt;

&lt;h3&gt;
  
  
  "That could've been an email"
&lt;/h3&gt;

&lt;p&gt;This statement comes up way too often in the working world. The meeting starts and ends with only one person talking, and spewing out information that doesn't need discussion. With no discourse between other teammates, people will wonder why this info wasn't sent out in an email or announcement.&lt;/p&gt;

&lt;h3&gt;
  
  
  No clear agenda from the beginning
&lt;/h3&gt;

&lt;p&gt;When there is no agenda for a meeting, the discussion may revolve around a general topic, but it is only through dialogue that the actual problem being addressed can be identified. This is one of the main ways a 30-minute meeting can be stretched to an hour.&lt;/p&gt;

&lt;h3&gt;
  
  
  Rabbit holes are followed
&lt;/h3&gt;

&lt;p&gt;A byproduct of bringing up good questions is that sometimes they lead the group off-topic. When the facilitation doesn't table the pursuit of that specific thought, meetings get off-topic and end up wasting valuable time. Also if no one is taking notes and tracking these topics, valuable insights will be lost.&lt;/p&gt;

&lt;p&gt;All of these characteristics unfortunately compound into the creation of extra meetings. The original topics are left unanswered, more questions have come up and what's the solution to answering the original problem and all these new ones? You guessed it, more meetings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating a Solution
&lt;/h2&gt;

&lt;p&gt;Fortunately, many of these issues have simple solutions and can be addressed by establishing team normals. &lt;/p&gt;

&lt;p&gt;If you're the person who is running the team and holding these meetings, try to implement a couple of techniques to drive efficiency as a whole.&lt;/p&gt;

&lt;h3&gt;
  
  
  Establish core working hours 
&lt;/h3&gt;

&lt;p&gt;Work with your team to set aside a block of time so that they can expect to work uninterrupted, this can greatly increase productivity and team morale. The chunk of time (say 9 am to 12 pm) will contain no scheduled or unscheduled meetings unless absolutely necessary. A couple of benefits: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Teammates will feel free to tackle problems because they understand they won't be interrupted by a pop-up meeting.&lt;/li&gt;
&lt;li&gt;The team will feel like the work they are doing is valued because specific time is allocated for it.&lt;/li&gt;
&lt;li&gt;Other entities trying to schedule meetings with your entire team will have a better understanding of what your availability looks like.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Establish team meeting norms 
&lt;/h3&gt;

&lt;p&gt;Meet as a team to establish what meetings look like internally. Does everyone need to have their webcam on? What meetings are recurring? Where do we keep track of our "parking lot" topics for later? What do we do when a meeting is going over time?&lt;/p&gt;

&lt;p&gt;Solidifying and writing down these expectations will help the team have a better idea of what meetings will look like. They should understand what meetings happen every week, and what unexpected meetings with other groups will look like. Make it a collaborative effort so that meetings no longer feel like they are owned by just one person, they should be owned by the team!&lt;/p&gt;

&lt;p&gt;Re-visit these norms every once in a while so that new members can feel like their input is valued as well, and things to get too stagnate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Always have an agenda
&lt;/h3&gt;

&lt;p&gt;If you've ever gotten an invite from your boss with the only subject being "1:1 time" you know the pain of the unknown. You begin to search your mind for any possibility of what you did wrong, or what happened recently that could bring this topic up. A clear meeting agenda should dissipate those worries, and have the topics laid out in the open.&lt;/p&gt;

&lt;p&gt;If everyone is on the same page before the meeting even starts it will be much easier to stay on topic, stay focused, and ask the right questions. It should contain the problem being addressed, who is invited, and how long the meeting is expected to go.&lt;/p&gt;

&lt;p&gt;All this will establish who needs to be at the meeting, if it's strictly a technical meeting, it should be noted that only developers need to attend. This crucial information will let everyone know what to expect and facilitation will be much easier as you can parking lot many topics by referencing the agenda.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Developer's Role
&lt;/h2&gt;

&lt;p&gt;If you're a developer in all this, you shouldn't feel excluded from encouraging these ideas. Your opinion should matter in how meetings are handled even if you're just attending!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encourage good meeting practice by speaking up when you feel the discussion is off topic&lt;/li&gt;
&lt;li&gt;Voice your opinion on how recurring meetings are being handled. If they aren't effective, ask to collaborate as a team on fixing them&lt;/li&gt;
&lt;li&gt;Participate in discussions - unique perspectives are often the key to coming up with solutions. Your point of view could be the answer!&lt;/li&gt;
&lt;li&gt;Actively advocate for core working time if you feel you don't have enough time in the day to produce effective code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Developers can become undervalued and overworked if the leaders don't understand how even simple meetings are taking away from work. It's not always understood how much work is done just to get things up and running sometimes, so be an advocate for yourself and make your opinion known.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Meetings can be incredibly useful, but also incredibly arduous, we should all strive to make them effective. We should constantly be evaluating how we are conducting them to make sure we haven't slipped into ineffective habits.&lt;/p&gt;

&lt;p&gt;These tips are nothing groundbreaking, but they are good reminders to look at how we are respecting our and our coworker's time. &lt;/p&gt;

&lt;p&gt;Hopefully, you can bring these to your team and see a positive change in how you work together. Good luck! &lt;/p&gt;




&lt;p&gt;…Until Next time =)&lt;/p&gt;

&lt;p&gt;Originally posted on &lt;a href="https://medium.com/@livelongandponder/membership"&gt;Medium&lt;/a&gt;&lt;br&gt;
Photo by Campaign Creators on Unsplash&lt;/p&gt;

</description>
      <category>devops</category>
      <category>development</category>
      <category>learning</category>
      <category>productivity</category>
    </item>
    <item>
      <title>This Week in Learning 5 - 9 June</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Fri, 09 Jun 2023 20:18:45 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/this-week-in-learning-5-9-june-2757</link>
      <guid>https://forem.com/livelong_ponder/this-week-in-learning-5-9-june-2757</guid>
      <description>&lt;p&gt;Interested in what I learned this week? Yes? No? Well I'm going to tell you anyway! Some programming concepts, but also some real-world ideas too.😊&lt;/p&gt;

&lt;h3&gt;
  
  
  General
&lt;/h3&gt;

&lt;p&gt;When you're working on creating forms that will be displayed by the browser and you want to do your own custom validation (like YUP or Zod) be aware of including the &lt;code&gt;required&lt;/code&gt; attribute on your element. When Chrome sees this, it will usually throw an error and say something to the effect of &lt;code&gt;Please Fill Out This Field&lt;/code&gt; before hitting your validation messages. It can be a frustrating experience as a user, but there's one easy solution!&lt;/p&gt;

&lt;p&gt;Just include a &lt;code&gt;noValidate&lt;/code&gt; as an attribute in your form and your own validation should run without Chrome yelling at you first. 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;&amp;lt;Form onSubmit={handleSubmit} noValidate&amp;gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Firefox does it as well, but this fixes it there too! Tell those browsers to shush.&lt;/p&gt;

&lt;h3&gt;
  
  
  DTOs and MVC 
&lt;/h3&gt;

&lt;p&gt;I've been trying to wrap my head around Model-View-Controller (MVC) patterns in general and the pattern that includes a service layer. A service layer would sit in between a Controller and Model tasked to complete any domain-specific logic that doesn't exactly fit into just a model or controller.&lt;/p&gt;

&lt;p&gt;In that model, there will be Data Transfer Objects (DTOs) that encapsulate data to send from one place to another within an application. This can help reduce the number of calls by basically combining multiple calls into one. There's some logic to help assemble/disassemble these, but that's covered much more in-depth in resources like these.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://martinfowler.com/bliki/LocalDTO.html"&gt;Martin Fowler Post&lt;/a&gt;&lt;br&gt;
&lt;a href="https://martinfowler.com/eaaCatalog/dataTransferObject.html"&gt;DTO Explained&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've only just started diving into these concepts, but DTOs while powerful need to be used in correct situations so that their greatest benefit shines, rather than introducing unnecessary complexity. If you read into Fowler's post you'll see a few examples of when implementing a DTO is a good idea, and when it's not.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to Separate React Components ⚛
&lt;/h3&gt;

&lt;p&gt;I found a problem this week when using &lt;code&gt;react-hook-form&lt;/code&gt; where the whole form kept re-rendering on a change rather than just the field I wanted to change. One solution I found was to separate the problem components out into their own place so that the re-rendering would stop. I was left with a pretty basic form, with other logic held in different files. It worked, but it didn't completely sit right with me. If this happens in other forms and I keep separating things out, at what point does it become an anti-pattern? I want the code to be clean, organized, and concise but how can I do that if I keep moving components out of forms?&lt;/p&gt;

&lt;p&gt;I think the culprits were &lt;code&gt;useWatch&lt;/code&gt; and &lt;code&gt;useFormContext&lt;/code&gt; and not fully understanding &lt;code&gt;controller&lt;/code&gt; in that library. If you have any ideas or thoughts on this problem let me know! I'm still learning that library so any ideas or thoughts on understanding are welcome.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thoughts 💡
&lt;/h3&gt;

&lt;p&gt;While there were a lot of programming findings, I also wanted to document some thoughts on life.&lt;br&gt;
Be kind and patient to those you interact with, because you don't know everything going on in their lives, and they don't know everything in yours. Work can be stressful, but outside life can be even more strenuous, and everyone processes those 2 things very differently. Sometimes happy events for others can remind people of past pains, and all we can do is have an open heart for our fellow humans.&lt;/p&gt;




&lt;p&gt;Keep an open mind to learning in all things, whether it's about programming or the person next to you, you never know what beauty you'll find within!&lt;br&gt;
…Until Next time =)&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>learning</category>
      <category>react</category>
    </item>
    <item>
      <title>The Codewars Experience</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Thu, 16 Mar 2023 14:41:15 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/the-codewars-experience-3ne7</link>
      <guid>https://forem.com/livelong_ponder/the-codewars-experience-3ne7</guid>
      <description>&lt;h2&gt;
  
  
  What is Codewars?
&lt;/h2&gt;

&lt;p&gt;Codewars is a platform where you can practice your coding skills by attempting various problems in the languages of your choice. You will be given prompts with varying difficulties, and the way that you "solve" them is by passing all the pre-defined tests. &lt;/p&gt;

&lt;p&gt;You can test your code before submission against a couple of easy tests and then submit for a larger set of more obscure cases to make sure you have everything covered. The tests are great for debugging, and they give you space to try creating your own!&lt;/p&gt;

&lt;p&gt;After you submit, you can examine what everyone else has come up with, and see where your implementation landed. Popular solutions will be labeled with "Best Practice" to highlight people who solved the code optimally and with solid programming techniques. "Clever" solutions solve the problem in creative ways, such as importing some library that solves the problem in a niche way. It's helpful to examine what others have done and see where you could've improved.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience
&lt;/h2&gt;

&lt;p&gt;Codewars is a helpful practice tool. I've been doing Javascript and Python problems and it's finally helped me feel like I'm back into the engineering headspace.  Recently I have been starting my day by solving one or two just to get my brain warmed up, which has helped me establish a healthy morning habit.&lt;/p&gt;

&lt;p&gt;After college, I was having a hard time just thinking of problems that I wanted to solve to get back into a problem-solving mindset. I wanted to turn back to the projects that I used back in school, but did I want to crack open that old laptop and try to understand what my college brain was doing? Plus, I think I lost the charger...&lt;/p&gt;

&lt;p&gt;Codewars has helped me look at problems and try to solve them in creative ways. I usually start with a way that won't solve the problem optimally but establish a "good enough" understanding, and then implement a more efficient solution by researching. For example, if I know I need to iterate over something, my first solution would be to use a regular For loop. I can break it down in a traditional and readable manner, and then address how to optimize it after. When I have a solution passing some tests, I can go back and examine the loop to maybe incorporate List comprehension in the case of Python. Or in Javascript, try to utilize the map() method. This helps me learn how to examine my solutions for readability and implementation. Using this method I've gotten close to some of the one-line "Clever" solutions, and it feels really good to have implemented something efficiently. &lt;/p&gt;

&lt;p&gt;Doing these problems have led me to find some new websites that have become helpful resources, like &lt;a href="https://realpython.com/"&gt;RealPython&lt;/a&gt; or &lt;a href="https://www.geeksforgeeks.org/"&gt;GeeksforGeeks&lt;/a&gt;, but also reinforced the obvious ones like &lt;a href="https://stackoverflow.com/questions/1301346/what-is-the-meaning-of-single-and-double-underscore-before-an-object-name"&gt;stackoverflow&lt;/a&gt; and &lt;a href="https://www.w3schools.com/js/default.asp"&gt;w3schools&lt;/a&gt;. Each website has its way of explaining concepts and sometimes I found it easier to comprehend one site compared to the other. &lt;/p&gt;

&lt;p&gt;For example, I found w3schools explanation of &lt;a href="https://www.w3schools.com/python/python_lists_comprehension.asp"&gt;list comprehension&lt;/a&gt;  a lot more concise and easier to understand than &lt;a href="https://www.geeksforgeeks.org/python-list-comprehension/"&gt;GeeksforGeeks explanation&lt;/a&gt;.&lt;br&gt;
Both explain the same concept differently and it might change per person. In my case, I wanted a quick and dirty solution and mostly syntax, which I felt like w3schools provided, while g4g provided a lot of in-depth examples. If I wanted to take the time and dive a little deeper into the subject, I would definitely return there. &lt;/p&gt;

&lt;p&gt;Now I feel like I'm sharpening my programming skills as well as my research skills. So many resources can give a correct way to solve a problem, but sometimes you just need to cater the results in a way that makes the most sense to you. The more I practice that, the faster I can recognize what will be useful to me in the future, and save me time in the long run.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap-up
&lt;/h2&gt;

&lt;p&gt;All of this to say, I think Codewars has been an awesome place to hone my skills in not only problem-solving but also research and selection. Being able to find the right documentation, at the right time is an invaluable skill, and also one that will never be fully perfected. New content and ways of thinking are always progressing, just recognizing where you are and what you want to learn are key to making that leap. &lt;br&gt;
I will be attending a hackathon soon and I'm really excited.&lt;/p&gt;

&lt;p&gt;Have you had similar experiences in Codewars? Have you had a negative reaction? What other sites have you found impactful on your journey whether or not you're a beginner or an expert?&lt;/p&gt;

&lt;p&gt;If you're also interested in solving problems together, let's all collaborate and solve Codewars or project euler(next) together! Community and teamwork are extremely important in our field, so let's encourage each other! &lt;br&gt;
Comment down below and reach out!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>React Stateless and Stateful Components</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Fri, 03 Mar 2023 20:00:06 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/react-stateless-and-stateful-components-1k23</link>
      <guid>https://forem.com/livelong_ponder/react-stateless-and-stateful-components-1k23</guid>
      <description>&lt;p&gt;So far I've learned a few of the basics of React, and starting to get a better grasp on State. My last post covered a little on the initial uses of state and hooks in React, but now I'm learning about how state should be updated between components so that things are done cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stateful vs Stateless components
&lt;/h2&gt;

&lt;p&gt;A stateful component is just a component that houses state, while a stateless component does not. Pretty intuitive naming there :). While one houses state and the other doesn't, both can still utilize props. &lt;br&gt;
If you're unfamiliar with props the terms can get a bit confusing. Props is the name of the object that holds passed-in information about a component, while &lt;code&gt;this.props&lt;/code&gt; is the expression used to call that information. You'll often times see props used as a way to reference other passed in data, so try and be mindful of what context you're reading about props in, as it can get a little twisted sometimes.&lt;/p&gt;

&lt;p&gt;At first I didn't understand how the information was passed between the components, did it matter if one had state and the other didn't? Is state supposed to be passed between them? Then this statement from Codecademy.org made it all come together: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A React component should use &lt;code&gt;props&lt;/code&gt; to store information that can be changed, but can only be changed by a different component.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A React component should use &lt;code&gt;state&lt;/code&gt; to store information that the component itself can change.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing this will arm you with the core knowledge to build stateless and stateful components correctly in React.&lt;/p&gt;
&lt;h3&gt;
  
  
  Parent/Child relationship
&lt;/h3&gt;

&lt;p&gt;To get a better idea of how the information is passed between components, its helpful to think of the relationship between these components as Parent and Child to begin with. In this relation the parent will be handling state the child will be receiving information that can be changed by the parent component. &lt;/p&gt;

&lt;p&gt;Lets look at the job of each of piece broadly, then show some examples.&lt;/p&gt;
&lt;h3&gt;
  
  
  Parent
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Defines state &lt;/li&gt;
&lt;li&gt;Defines method to update state

&lt;ul&gt;
&lt;li&gt;If it's a class component don't forget to bind the method to the constructor for the current instance&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Passes method on to Child&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Child
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Receives method to update state&lt;/li&gt;
&lt;li&gt;Calls method by using props&lt;/li&gt;
&lt;li&gt;Which in turn calls the parent to update the state
Info is updated to user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Conceptually, that all makes sense, now lets look at an example and break it down. &lt;/p&gt;
&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;

&lt;p&gt;Starting with the parent, we remember it defines state, establishes a way to change that state, and passes that long to the child.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Parent.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ReactDOM&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react-dom&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Child&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;./Child&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Parent&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;changeFood&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;changeFood&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Steak&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// without the function breaking down the event object, this newFood would be a full event Object &lt;/span&gt;
  &lt;span class="nx"&gt;changeFood&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newFood&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;food&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;newFood&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Child&lt;/span&gt; &lt;span class="na"&gt;food&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;food&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;changeFood&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;ReactDOM&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Parent&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;app&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Setting the state is accomplished within the &lt;code&gt;constructor&lt;/code&gt;, and since this is a class component, we also use the &lt;code&gt;this.chageFood.bind(this)&lt;/code&gt; statement for our event listener. We make sure to do this so that we don't run into an error but it has to do with Javascript binding and how &lt;code&gt;this&lt;/code&gt; is invoked. If you'd like to take a look into an article that dives deeper into it, I found this one helpful: &lt;br&gt;
&lt;a href="https://www.freecodecamp.org/news/this-is-why-we-need-to-bind-event-handlers-in-class-components-in-react-f7ea1a6f93eb/"&gt;FreeCodeCamp Explanation&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;After that, our parent establishes a way to change our state, which is done with our &lt;code&gt;changeFood&lt;/code&gt; method. This method uses &lt;code&gt;setState&lt;/code&gt; as a way to make an update to our state. &lt;/p&gt;

&lt;p&gt;Now we can see in the Parent's render function, we have an attribute of &lt;code&gt;food&lt;/code&gt; and an event listener &lt;code&gt;onChange&lt;/code&gt; which calls will call our state setter function.&lt;/p&gt;

&lt;p&gt;Now that we have a decent idea of what our parent handling state looks like, we'll take a look at the child component.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// child.js&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;react&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nx"&gt;Child&lt;/span&gt; &lt;span class="kd"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;React&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Component&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;super&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bind&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// takes event object as parameter, extracts the piece from the event object, and then passes the correct piece back to the original parent funciton&lt;/span&gt;
  &lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;food&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          My favorite food is &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;food&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;!
        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"yummy-snacks"&lt;/span&gt; &lt;span class="na"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Steak"&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Steak
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Pizza"&lt;/span&gt; &lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Pizza
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Burgers"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Burgers
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt; &lt;span class="na"&gt;value&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"Not Healthy Food"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
            Not Healthy Food
          &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;option&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;

        &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;select&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Remember, the props here in Child are used to store information that can be updated by other components but not itself. &lt;/p&gt;

&lt;p&gt;Here the child received the state setting method from the parent, and will use &lt;code&gt;this.props&lt;/code&gt; to call it, there's just one issue. If we just used &lt;code&gt;this.props.onChange&lt;/code&gt; in the child, we'd run into an error because we'd be passing back an event object to be displayed while the parent is expecting a string. &lt;/p&gt;

&lt;p&gt;That's why we have the &lt;code&gt;this.handleChange&lt;/code&gt; method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;  &lt;span class="nx"&gt;handleChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;food&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;value&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;props&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onChange&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;food&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows us to take the event object as a parameter, and pull out the value we need (food), to then pass as an argument to our onChange method.&lt;/p&gt;

&lt;p&gt;Don't forget the ever important &lt;br&gt;
&lt;code&gt;this.handleChange = this.handleChange.bind(this);&lt;/code&gt;&lt;br&gt;
since we are using a method utilizing &lt;code&gt;this&lt;/code&gt; we need to include this within our constructor.&lt;/p&gt;

&lt;p&gt;Now when the parent receives the information from the child (our food of choice) it can accurately update and display the new state. This is done by this method in the Parent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;  &lt;span class="nx"&gt;changeFood&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;newFood&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setState&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
      &lt;span class="na"&gt;food&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;newFood&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now whenever the user selects an option from the drop down, our app will be able to handle the change in state, and correctly render a new value. Our Child component is doing it's job, by utilizing props that are updated by the Parent. Our Parent is doing it's job by setting and updating the state, and focusing less on displaying info to the user.&lt;/p&gt;

&lt;h3&gt;
  
  
  Siblings
&lt;/h3&gt;

&lt;p&gt;An additional way to handle this situation is by using Sibling component updates, where you would utilize one component to display the information, and one component to display a way  to change the information. Meaning, one Stateful Parent, with 2 stateless Children. One stateful child would pull in the props and display it to the user, while the other would display a way to update the state. &lt;/p&gt;

&lt;p&gt;To apply it to our example, one Child would hold the logic for the dropdown and display ways to change our food, while the other would simply display what had been selected by using the props.&lt;br&gt;
This can help separate the logic and make it a little cleaner and easier to read. &lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap up
&lt;/h2&gt;

&lt;p&gt;Thanks for coming along with me on learning about Stateless vs Stateful components. Let me know what else you think I should've included, or if I got something wrong! This is just a wrap up of a topic I learned about this week and wanted to share it with you all, as well as connect with people who may be learning the same thing. &lt;/p&gt;




&lt;p&gt;Life is a long journey of learning, and I’m just happy to be sharing my stories with you.&lt;/p&gt;

&lt;p&gt;…Until next time =)&lt;/p&gt;

</description>
      <category>react</category>
      <category>beginners</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Arrow Functions and State in React</title>
      <dc:creator>Live Long &amp; Ponder</dc:creator>
      <pubDate>Mon, 13 Feb 2023 20:45:10 +0000</pubDate>
      <link>https://forem.com/livelong_ponder/arrow-functions-and-state-in-react-2ama</link>
      <guid>https://forem.com/livelong_ponder/arrow-functions-and-state-in-react-2ama</guid>
      <description>&lt;p&gt;Learning React has been interesting, but I've found myself having a hard time understanding State and Hooks. Partly because I'm new to understanding arrow functions. &lt;/p&gt;

&lt;p&gt;Seeing something that is so engrained in my mind like a simple example function: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 javascript
(function (a) {
  return a + 100;
});


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

&lt;/div&gt;
&lt;p&gt;Transformed into this:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 javascript
a =&amp;gt; a + 100


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

&lt;/div&gt;
&lt;p&gt;has been a little mind blowing. I love the simplicity of it, but it can get a bit confusing after being so used to "function { ... return... }"&lt;/p&gt;

&lt;p&gt;A trick that has helped me is that if a function is simple enough, like the example above, an arrow function is removing the words function and return and simply splitting the parameters from the expression to be returned by using an arrow. When there are no parameters, you'll just see ().&lt;/p&gt;

&lt;p&gt;Combining that logic with the idea that functions in Javascript can be assigned names, just like you assign a variable to a value, it gets a little easier to understand arrow the below arrow function.  &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 React
const increment = () =&amp;gt; setCount(prevCount =&amp;gt; prevCount + 1);


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

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;Increment&lt;/code&gt; is the name of the function&lt;br&gt;
&lt;code&gt;()&lt;/code&gt; just means there are no parameters&lt;br&gt;
&lt;code&gt;=&amp;gt;&lt;/code&gt; indicates everything to the right is logic to be calculated to return some value.&lt;/p&gt;

&lt;p&gt;Now what is the &lt;code&gt;setCount&lt;/code&gt; and why is it calling &lt;code&gt;prevCount&lt;/code&gt;? This brings us to tracking state, and understanding it with arrow functions simplifying the logic.&lt;/p&gt;
&lt;h2&gt;
  
  
  State and Hooks
&lt;/h2&gt;

&lt;p&gt;React hooks help us keep track of State, by providing an easier way to manage internal tracking of a components current value. Hooks allow you to do all this without having to use component classes, and the dreaded &lt;code&gt;this&lt;/code&gt; keyword.&lt;/p&gt;

&lt;p&gt;One of the beginning methods called is &lt;code&gt;useState()&lt;/code&gt;. When called, it will return an array defining a current state, and a state setter. &lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 React
const [count, setCount] = useState(0);


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

&lt;/div&gt;
&lt;p&gt;&lt;code&gt;count&lt;/code&gt; is the current state&lt;br&gt;
&lt;code&gt;setCount&lt;/code&gt; will be the function to update our state&lt;br&gt;
&lt;code&gt;0&lt;/code&gt; is initializing the state&lt;/p&gt;

&lt;p&gt;If you're unfamiliar with the syntax, you can look into array destructuring here. &lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
      &lt;div class="c-embed__cover"&gt;
        &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" class="c-link s:max-w-50 align-middle" rel="noopener noreferrer"&gt;
          &lt;img alt="" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper.mozilla.org%2Fmdn-social-share.d893525a4fb5fb1f67a2.png" height="auto" class="m-0"&gt;
        &lt;/a&gt;
      &lt;/div&gt;
    &lt;div class="c-embed__body"&gt;
      &lt;h2 class="fs-xl lh-tight"&gt;
        &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment" rel="noopener noreferrer" class="c-link"&gt;
          Destructuring assignment - JavaScript | MDN
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;p class="truncate-at-3"&gt;
          The destructuring assignment syntax is a JavaScript expression that makes it possible to unpack values from arrays, or properties from objects, into distinct variables.
        &lt;/p&gt;
      &lt;div class="color-secondary fs-s flex items-center"&gt;
          &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdeveloper.mozilla.org%2Ffavicon-48x48.bc390275e955dacb2e65.png"&gt;
        developer.mozilla.org
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;The nice thing about useState() is that it will automatically call render() indicating that the component will need to re-render, without us having to include that in the code.  Just be careful to not include it within the render function or you'll be stuck in an infinite loop. It also allows us to keep track of state from one value to the next.&lt;/p&gt;

&lt;p&gt;When a component is initialized, React will use whatever initial value is passed as an argument in &lt;code&gt;useState()&lt;/code&gt;. But, this means when the component is re-rendered using &lt;code&gt;setState()&lt;/code&gt;, React will use the previous state to update the component! &lt;/p&gt;

&lt;p&gt;When needing to update your state, you'll often need to call upon the current state to calculate the value of what you want set next. In this case, it is best practice to update state with a callback function.&lt;/p&gt;

&lt;p&gt;In JavaScript, a callback function is a function that is passed into another function as an argument. &lt;/p&gt;

&lt;p&gt;Take a look at the following example that combines all of the concepts. &lt;br&gt;
When our state setter (&lt;code&gt;setCount&lt;/code&gt;) calls the callback function, the state setter callback function takes our previous count as an argument. The value returned by this state setter callback function is used as the next value of count (in this case prevCount + 1).&lt;/p&gt;

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

export default function Counter() {
  const [count, setCount] = useState(0);

  const increment = () =&amp;gt; setCount(prevCount =&amp;gt; prevCount + 1);

  return (
    &amp;lt;div&amp;gt;
      &amp;lt;p&amp;gt;Keep clicking the button, you've done it : {count} times&amp;lt;/p&amp;gt;
      &amp;lt;button onClick={increment}&amp;gt;Click me&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );


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

&lt;/div&gt;

&lt;p&gt;Every time the user clicks the button, the count will be updated by 1, and the component will re-render with the current number of clicks. &lt;/p&gt;

&lt;p&gt;Here the logic is separated out from the return statement, but this could be calculated within the button and would look like this&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 React
&amp;lt;button onClick={() =&amp;gt; setCount((prevCount) =&amp;gt; prevCount + 1)}&amp;gt;Click me&amp;lt;/button&amp;gt;


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

&lt;/div&gt;

&lt;p&gt;It is more readable and cleaner to handle it the first way, but it can be done within the  if desired.&lt;/p&gt;

&lt;h2&gt;
  
  
  That was a quick recap of a couple things I learned last week, and I'm hoping to show a similar recap each week. Let me know if you have any tips/tricks or any topics you'd like me to look into! I look forward to learning with you all.
&lt;/h2&gt;

&lt;p&gt;I want to use this space to show what I'm learning, and speak with people who are learning themselves! Also, if you're a React expert and have feedback about what could be done better or is incorrect, please feel free to comment. &lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
