<?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>DEV Community: CarolinaCobo</title>
    <description>The latest articles on DEV Community by CarolinaCobo (@carolinacobo).</description>
    <link>https://dev.to/carolinacobo</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%2F369301%2F4309ad1b-390e-4da6-91fc-e7929fcc3ad6.jpg</url>
      <title>DEV Community: CarolinaCobo</title>
      <link>https://dev.to/carolinacobo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/carolinacobo"/>
    <language>en</language>
    <item>
      <title>Callbacks, Promises &amp; Async/Await</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Thu, 08 Sep 2022 19:04:05 +0000</pubDate>
      <link>https://dev.to/carolinacobo/callbacks-promises-asyncawait-2h3g</link>
      <guid>https://dev.to/carolinacobo/callbacks-promises-asyncawait-2h3g</guid>
      <description>&lt;p&gt;I’m currently diving more deeply into how JS works and I’ve been watching Will Sentance’s JavaScript: The Hard Parts &lt;a href="https://frontendmasters.com/courses/javascript-hard-parts-v2/"&gt;course&lt;/a&gt;. One of the sections is about Promises and Async/Await and I have to say it still was a bit of a mystery for me, so after watching the section of the course I decided I’d like to do a bit more reading on it on the MDN docs.&lt;/p&gt;

&lt;p&gt;I think to start, callbacks would make sense to see how it’s improved with promises and made our life easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Callbacks
&lt;/h2&gt;

&lt;p&gt;Function passed inside another function as an argument, that is then called in that function to perform a task.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log('First');
console.log('Second');

setTimeout(()=&amp;gt;{
    console.log('Third');
},2000);

console.log('Last');
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This snippet would return this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;First
Second
Last
Third  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is because the setTimeout is set up to wait for 2 seconds so the threat of execution will continue, and then come back to it. This method was good until you needed to make multiple calls, and to do so you’d have to nest the functions to get the desired behaviour. This would cause end up in what was referred to as Callback Hell or Callback Pyramid of Doom.&lt;/p&gt;

&lt;h2&gt;
  
  
  Promises
&lt;/h2&gt;

&lt;p&gt;The MDN docs define a Promise as an object that represents the eventual completion or failure of an asynchronous operation.&lt;/p&gt;

&lt;p&gt;A promise is a returned object to which you attach callbacks, instead of passing callbacks into a function.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why use them?
&lt;/h3&gt;

&lt;p&gt;Using promises will guarantee you some outcomes that you wouldn’t get from callbacks such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If the callback is added with a .then() it will never be invoked before the current event loop run has been completed.&lt;/li&gt;
&lt;li&gt;The callbacks will be invoked even if they were added after the asynchronous operation that the promise represents has succeeded or failed.&lt;/li&gt;
&lt;li&gt;You can add multiple callbacks just by calling .then() several times. They will be invoked one after another, in the order in which you placed them in the code block.&lt;/li&gt;
&lt;li&gt;Chaining, which is worth getting into more detail.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Chaining
&lt;/h3&gt;

&lt;p&gt;Chaining will happen when you need to execute more than one consecutive asynchronous operation and each following operation starts when the previous one succeeds. In the promise chain the then() returns a new promise, different from the original.&lt;/p&gt;

&lt;p&gt;Nowadays, we attach our callbacks to the returned promises instead, forming a promise chain.&lt;/p&gt;

&lt;p&gt;Keep in mind that you can chain after a catch as well.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new Promise((resolve, reject) =&amp;gt; {
  console.log("Start");

  resolve();
})
  .then(() =&amp;gt; {
    throw new Error("Something went wrong");

    console.log("This first");
  })
  .catch(() =&amp;gt; {
    console.error("This second");
  })
  .then(() =&amp;gt; {
    console.log("Do this regardless of what happened");
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Important: Always return results, otherwise callbacks won’t catch the result of a previous promise. If the previous handler started a promise but did not return it, there's no way to track it anymore, and the promise is said to be "floating". It could get worse if you have racing conditions as the result that the next then is reading could be incomplete.&lt;/p&gt;

&lt;p&gt;While in callbacks we have to track errors multiple times, in promises if there’s an error the browser will go to the .catch() block.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;try {
  const result = syncDoSomething();
  const newResult = syncDoSomethingElse(result);
  const finalResult = syncDoThirdThing(newResult);
  console.log(`Got the final result: ${finalResult}`);
} catch (error) {
  failureCallback(error);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And this is pretty similar to how synchronous code works, so its similarities to asynchronous build up the async/await syntax.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async function foo() {
  try {
    const result = await doSomething();
    const newResult = await doSomethingElse(result);
    const finalResult = await doThirdThing(newResult);
    console.log(`Got the final result: ${finalResult}`);
  } catch (error) {
    failureCallback(error);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Async/Await
&lt;/h2&gt;

&lt;p&gt;The purpose of async and await is to simplify working with asynchronous code using promises by making it look like it is synchronous code (see above).&lt;/p&gt;

&lt;p&gt;This will make it easier to build an operation from a series of consecutive asynchronous function calls, avoiding the need to create explicit promise chains, and allowing you to write code that looks just like synchronous code.&lt;/p&gt;

&lt;p&gt;Even though the return value of an async function behaves as if it’s wrapped in a Promise.resolve, they are not equivalent.&lt;/p&gt;

&lt;p&gt;An async function will return a different reference, but thePromise.resolve* returns the same reference if the given value is a promise.&lt;/p&gt;

&lt;p&gt;*Promise.resolve resolves a given value to a promise, if that value is a promise, then that promise is returned.&lt;/p&gt;

&lt;p&gt;This difference can cause problems when you want to check the equality of a promise and the return value of an async function.&lt;/p&gt;

&lt;p&gt;Keep in mind that just like a promise chain, await forces asynchronous operations to be completed in series. This is necessary if the result of the next operation depends on the result of the previous one but if that's not the case, using Promise.all() would be more efficient.&lt;/p&gt;




&lt;p&gt;To summarise, promises solve a fundamental problem we faced using the callback structure. They allow us to chain and simplify catching all errors, even thrown exceptions and programming errors.&lt;/p&gt;

&lt;p&gt;Async/await simplifies working with asynchronous code by making it look like synchronous code, remember it will return a different reference than a promise which could lead to issues.&lt;/p&gt;




&lt;p&gt;Thanks for reading, I appreciate your time. If you need any help or have any questions please reach out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;/p&gt;

&lt;p&gt;Have a nice day!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React Hooks 3: New Hooks in React 18</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Thu, 08 Sep 2022 18:59:28 +0000</pubDate>
      <link>https://dev.to/carolinacobo/react-hooks-3-new-hooks-in-react-18-d83</link>
      <guid>https://dev.to/carolinacobo/react-hooks-3-new-hooks-in-react-18-d83</guid>
      <description>&lt;p&gt;I’m still familiarising myself with the new updates in React 18 such as Concurrency, Automatic Batching, and the new Transitions and Suspense features (I might write about it). Still, to finish this section I’m going to go over the new Hooks in React 18.&lt;/p&gt;

&lt;h2&gt;
  
  
  useId
&lt;/h2&gt;

&lt;p&gt;This new Hook will generate a unique ID on both sides, client and server while avoiding hydration mismatches.&lt;/p&gt;

&lt;p&gt;This Hook will be useful mostly in component libraries that are integrated with Accessibility APIs that require unique IDs.&lt;/p&gt;

&lt;p&gt;Remember: useId is not for generating keys in a list, the keys should be generated from your data.&lt;/p&gt;

&lt;p&gt;For a basic example, pass the id directly to the elements that need it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function Checkbox() {
  const id = useId();
  return (
    &amp;lt;&amp;gt;
      &amp;lt;label htmlFor={id}&amp;gt;This is an Example&amp;lt;/label&amp;gt;
      &amp;lt;input id={id} type="checkbox" name="react"/&amp;gt;
    &amp;lt;/&amp;gt;
  );
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For multiple IDs in the same component, append a suffix using the same id:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function NameFields() {
  const id = useId();
  return (
    &amp;lt;div&amp;gt;
      &amp;lt;label htmlFor={id + '-firstName'}&amp;gt;First Name&amp;lt;/label&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;input id={id + '-firstName'} type="text" /&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;label htmlFor={id + '-lastName'}&amp;gt;Last Name&amp;lt;/label&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;input id={id + '-lastName'} type="text" /&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  useTransition and startTransition
&lt;/h2&gt;

&lt;p&gt;They will allow you to mark some state updates as not urgent, some updates might be considered urgent by default (updating a text input) and these ones will be allowed to interrupt the non-urgent ones.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const [isPending, startTransition] = useTransition();
//startTransition lets you mark updates in the provided callback as transitions:
startTransition(() =&amp;gt; {
  setCount(count + 1);
})
//isPending indicates when a transition is active to show a pending state:
function App() {
  const [isPending, startTransition] = useTransition();
  const [count, setCount] = useState(0);

  function handleClick() {
    startTransition(() =&amp;gt; {
      setCount(c =&amp;gt; c + 1);
    })
  }

  return (
    &amp;lt;div&amp;gt;
      {isPending &amp;amp;&amp;amp; &amp;lt;Spinner /&amp;gt;}
      &amp;lt;button onClick={handleClick}&amp;gt;{count}&amp;lt;/button&amp;gt;
    &amp;lt;/div&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  useDeferredValue
&lt;/h2&gt;

&lt;p&gt;Accepts a value and returns a new copy of the value that will defer to more urgent updates. In case the current render is the result of an urgent update, such as user input, React will return the previous value and then render the new value after the urgent render has been completed.&lt;/p&gt;

&lt;p&gt;This one is similar to user-space hooks which use debouncing or throttling to defer updates. The benefits of using it are that React will work on the update as soon as other work finishes (instead of waiting for an arbitrary amount of time), and deferred values can be suspended without triggering an unexpected fallback for existing content.&lt;/p&gt;

&lt;p&gt;It also only defers the value that you pass to it. In case you want to prevent a child component from re-rendering during an urgent update, you must also memoize that component with React Memo or React useMemo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function Typeahead() {
  const query = useSearchQuery('');
  const deferredQuery = useDeferredValue(query);

  // Memoizing tells React to only re-render when deferredQuery changes,
  // not when query changes.
  const suggestions = useMemo(() =&amp;gt;
    &amp;lt;SearchSuggestions query={deferredQuery} /&amp;gt;,
    [deferredQuery]
  );

  return (
    &amp;lt;&amp;gt;
      &amp;lt;SearchInput query={query} /&amp;gt;
      &amp;lt;Suspense fallback="Loading results..."&amp;gt;
        {suggestions}
      &amp;lt;/Suspense&amp;gt;
    &amp;lt;/&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  useInsertionEffect (intended to be used in Libraries,)
&lt;/h2&gt;

&lt;p&gt;useInsertionEffect is a new hook that allows CSS-in-JS libraries to address performance issues of injecting styles in render. Unless you’ve already built a CSS-in-JS library it’s not likely you’ll ever use this.&lt;/p&gt;

&lt;p&gt;As the source of all this information and or further reference, you should review the &lt;a href="https://reactjs.org/docs/hooks-reference.html"&gt;React Hooks Documentation.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Thanks for reading, I appreciate your time. If you need any help or have any questions please reach out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;/p&gt;

&lt;p&gt;Have a nice day!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React Hooks 2: useMemo, useCallback, useLayoutEffect, useImperativeHandle, useDebugValue &amp; Custom Hooks</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Thu, 08 Sep 2022 18:56:40 +0000</pubDate>
      <link>https://dev.to/carolinacobo/react-hooks-2-usememo-usecallback-uselayouteffect-useimperativehandle-usedebugvalue-custom-hooks-2il4</link>
      <guid>https://dev.to/carolinacobo/react-hooks-2-usememo-usecallback-uselayouteffect-useimperativehandle-usedebugvalue-custom-hooks-2il4</guid>
      <description>&lt;p&gt;In this second part of the series, I covered the rest of Hooks just as an FYI as it might not be likely you’ll encounter this unless you’re building a library or you have a complex edge case.&lt;/p&gt;

&lt;p&gt;What you’ll come across more often are Custom Hooks, so if you are not too interested in the other ones, skip to the end to see an example that I’m using in one of my projects.&lt;/p&gt;

&lt;p&gt;Both 6. useCallback and 7. useMemo are similar as they both optimize performance. They should be used when a performance problem arises and not before or your application will have unnecessary complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  useMemo
&lt;/h2&gt;

&lt;p&gt;Memoizes expensive function calls so they will be only calculated when needed. useMemo will return a memoized value.&lt;/p&gt;

&lt;h2&gt;
  
  
  UseCallBack
&lt;/h2&gt;

&lt;p&gt;As mentioned, it’s quite similar to useMemo but useCallback returns a memoized function.&lt;/p&gt;

&lt;h2&gt;
  
  
  useLayoutEffect
&lt;/h2&gt;

&lt;p&gt;This one is really similar to useEffect, nearly the same, being the only difference it is synchronous to render instead of scheduled as they are with useEffect. For example, if you are migrating from class components to hooks this can be very useful as it runs at the same time as componentDidMount and componentDidUpdate, useEffect will come after. Remember this should be a temporary fix and the only time it should be used is to measure DOM nodes, for example for animations.&lt;/p&gt;

&lt;h2&gt;
  
  
  useImperativeHandle
&lt;/h2&gt;

&lt;p&gt;This one you might not ever use this one, but it might be in some libraries you use or to cover really rare scenarios.&lt;/p&gt;

&lt;p&gt;useImperativeHandle is very similar to useRef, when you use it you are given the instance value of the component the ref is attached to, which lets you interact with the DOM element directly.&lt;/p&gt;

&lt;p&gt;useImperativeHandle is very similar but also allows you to control the value that is returned instead of the instance element and you will explicitly state what return value it will be. And also lets you replace native functions such as blur or focus with your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  useDebugValue
&lt;/h2&gt;

&lt;p&gt;This hook extends the visualization of data about custom Hooks inside the component inspector of the React DevTools, &lt;a href="https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en"&gt;here&lt;/a&gt; is the Chrome Extension to it and &lt;a href="https://www.npmjs.com/package/react-devtools"&gt;here&lt;/a&gt; is the npm package installation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: Custom Hooks
&lt;/h2&gt;

&lt;p&gt;You can also build your own hooks extracting the logic into reusable functions.&lt;/p&gt;

&lt;p&gt;If you want to extract the logic and put it into a hook remember that it’s a JS function which name starts with the word “use” as you’ve seen above and the previous post.&lt;/p&gt;

&lt;p&gt;Here’s a custom Hook I created in one of my &lt;a href="https://github.com/colin5530/anasevmar/blob/master/components/Testimonials/TestimonialsSlider.js"&gt;projects&lt;/a&gt; and that I used for a Testimonial Carousel to show the different cards after 7 seconds&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, { useState, useEffect, useRef } from "react";
export default function useInterval(callback, delay) {
  const savedCallback = useRef();
// Remember the latest callback.
  useEffect(() =&amp;gt; {
    savedCallback.current = callback;
  }, [callback]);
// Set up the interval.
  useEffect(() =&amp;gt; {
    function tick() {
      savedCallback.current();
    }
    if (delay !== null) {
      let id = setInterval(tick, delay);
      return () =&amp;gt; clearInterval(id);
    }
  }, [delay]);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Thanks for reading, I appreciate your time. If you need any help please reach out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;/p&gt;

&lt;p&gt;Have a nice day!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>React Hooks 1: useState, useEffect, useContext, useRef &amp; useReducer</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Thu, 08 Sep 2022 18:51:44 +0000</pubDate>
      <link>https://dev.to/carolinacobo/react-hooks-1-usestate-useeffect-usecontext-useref-usereducer-2be2</link>
      <guid>https://dev.to/carolinacobo/react-hooks-1-usestate-useeffect-usecontext-useref-usereducer-2be2</guid>
      <description>&lt;p&gt;I have been working in React for about nine months, and after finishing Brian’s Holt &lt;a href="https://frontendmasters.com/courses/complete-react-v7/"&gt;Complete Intro to React&lt;/a&gt; and &lt;a href="https://frontendmasters.com/courses/intermediate-react-v3/"&gt;Intermediate React&lt;/a&gt; and digging into the React Docs, I thought I would put together a summary of React Hooks and also my personal experience using some of them.&lt;/p&gt;

&lt;p&gt;In this first part, I’ll cover useState, useEffect, useContext, useRef and useReducer, being the two first ones the ones use mostly at the moment.&lt;/p&gt;

&lt;p&gt;Reusing state between components in React is hard. With Hooks, it’s possible to extract stateful logic from a component, this makes it possible to be tested independently and reused.&lt;/p&gt;

&lt;p&gt;In conclusion, Hooks allow you to reuse stateful logic without changing your component hierarchy.&lt;/p&gt;

&lt;p&gt;I’m going to list them all but first, I’ll go into more detail about the ones I use every day at work, useState and useEffect.&lt;/p&gt;

&lt;h2&gt;
  
  
  useState
&lt;/h2&gt;

&lt;p&gt;useState allows you to make components stateful. In older React to do so, it required using a class component. Hooks give the ability to write it using just functions.&lt;/p&gt;

&lt;p&gt;This allows us to have more flexible components. In the example component below, every time the user clicks on the h1, it’ll change colours. It’s doing this by keeping that bit of state in a hook which is being passed that new value every render, so it always has and displays the latest state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function Counter({initialCount}) {
  const [count, setCount] = useState(initialCount);
  return (
    &amp;lt;&amp;gt;
      Count: {count}
      &amp;lt;button onClick={() =&amp;gt; setCount(initialCount)}&amp;gt;Reset&amp;lt;/button&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; setCount(prevCount =&amp;gt; prevCount - 1)}&amp;gt;-&amp;lt;/button&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; setCount(prevCount =&amp;gt; prevCount + 1)}&amp;gt;+&amp;lt;/button&amp;gt;
    &amp;lt;/&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  useEffect
&lt;/h2&gt;

&lt;p&gt;Compared to old React, Effects are how you recreate componentDidMount, componentDidUpdate, and componentDidUnmount.&lt;/p&gt;

&lt;p&gt;Inside useEffect, you can do any sort of side effect action that you would have previously done in one of React's lifecycle methods. With it, you can fire API requests, integrate with third-party libraries (like jQuery), or do anything else that you need to happen on the side for your component.&lt;/p&gt;

&lt;p&gt;A good example I’m going to use is a clock. We want our component to continually update to show the time so we use setTimeout inside our effect. After the timeout calls the callback, it updates the state. After that render happens, it schedules another effect to happen, and that’s why it continues to update.&lt;/p&gt;

&lt;p&gt;You could also provide a second parameter of [] to useEffect (after the function) which would make it only update once. This second array is a list of dependencies and it will only re-run this effect if one of these parameters changes. In our case, we want to run after every render so we don't give it this second parameter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function Timer() {
  const [count, setCount] = useState(0);

  useEffect(() =&amp;gt; {
    setTimeout(() =&amp;gt; {
      setCount((count) =&amp;gt; count + 1);
    }, 1000);
  });

  return &amp;lt;h1&amp;gt;I've rendered {count} times!&amp;lt;/h1&amp;gt;;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  useContext
&lt;/h2&gt;

&lt;p&gt;A problem you might encounter while building a React app is thee called “prop drilling”. This will happen when you have a parent component and a child component way down let’s say level four which also needs that data available.&lt;/p&gt;

&lt;p&gt;We could pass the data to the children in levels one, two and three but that will mean that they will know about this data even when it’s not relevant to them as the one that needs it is a child of theirs. This would be prop drilling, having unnecessary intermediaries.&lt;/p&gt;

&lt;p&gt;There is when context comes in, it would create a passage for the data from the parent component to the child component, so the components in the middle don’t know about it.&lt;/p&gt;

&lt;p&gt;Also, you don’t need to use useState and useContext together (data can have different shapes, not just useState) but you might find it convenient when child components need to also update the context as well.&lt;/p&gt;

&lt;p&gt;Often using Context adds complexity to an application, and also a bit of drilling is usually fine. Try to only put things that are truly application-wide state in context, such as user information or keys and then use the local state for the rest.&lt;/p&gt;

&lt;p&gt;As mentioned above those two are the ones that I use pretty much every day at work. I use useEffect to get all the data I need from the APIs and display and then useEffect to work on what should render depending on the state or let the user modify the state through inputs.&lt;/p&gt;

&lt;h2&gt;
  
  
  useRef
&lt;/h2&gt;

&lt;p&gt;Refs aver are useful for different things, but before you understand why it’s needed to understand how closure works.useRef returns a mutable ref object whose .current property is initialized to the passed argument (initialValue). The returned object will persist for the full lifetime of the component.&lt;/p&gt;

&lt;p&gt;A common use case is to access a child imperatively:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function App() {
  const [inputValue, setInputValue] = useState("");
  const count = useRef(0);

  useEffect(() =&amp;gt; {
    count.current = count.current + 1;
  });

  return (
    &amp;lt;&amp;gt;
      &amp;lt;input
        type="text"
        value={inputValue}
        onChange={(e) =&amp;gt; setInputValue(e.target.value)}
      /&amp;gt;
      &amp;lt;h1&amp;gt;Render Count: {count.current}&amp;lt;/h1&amp;gt;
    &amp;lt;/&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can think of useRef as a “box” that can hold a mutable value in its .current property.&lt;/p&gt;

&lt;p&gt;You probably have seen refs used primarily as a way to access the DOM. If you pass a ref object to React with &lt;/p&gt;, its.current property will be set to the corresponding DOM node whenever that node changes.

&lt;p&gt;But this hook is useful for more than the ref attribute. It’s handy for keeping any mutable value around similar to how you’d use instance fields in classes.&lt;/p&gt;

&lt;p&gt;This works because useRef() creates a plain JavaScript object. The only difference between useRef() creating an {current: ...} object yourself is that useRef will give you the same ref object on every render.&lt;/p&gt;

&lt;p&gt;Also useRef won’t notify when its content has changed. Mutating the .current property doesn’t cause a re-render.&lt;/p&gt;

&lt;p&gt;I recently had to use it in a Popup component, that would be rendered when clicking a button, would close if clicking out of it and had edit and delete options linked to the ID of the selected element.&lt;/p&gt;
&lt;h2&gt;
  
  
  useReducer
&lt;/h2&gt;

&lt;p&gt;useReducer is an alternative to useState. It accepts a reducer of type (state, action) =&amp;gt; newStateand returns the current state paired with a dispatch method.&lt;/p&gt;

&lt;p&gt;It’s preferable touseState when you have complex state logic that involves multiple sub-values or when the next state depends on the previous one. It also allows you to optimize performance for components that trigger deep updates because you can pass dispatch down instead of callbacks.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const initialState = {count: 0};

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return {count: state.count + 1};
    case 'decrement':
      return {count: state.count - 1};
    default:
      throw new Error();
  }
}

function Counter() {
  const [state, dispatch] = useReducer(reducer, initialState);
  return (
    &amp;lt;&amp;gt;
      Count: {state.count}
      &amp;lt;button onClick={() =&amp;gt; dispatch({type: 'decrement'})}&amp;gt;-&amp;lt;/button&amp;gt;
      &amp;lt;button onClick={() =&amp;gt; dispatch({type: 'increment'})}&amp;gt;+&amp;lt;/button&amp;gt;
    &amp;lt;/&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Thanks for reading! As I mentioned above this is a summary for reference after completing Brian Holt courses and going over the official React Docs, so if you want to extend the information here I’d advise you to go check them out!&lt;/p&gt;

&lt;p&gt;Thanks for reading, I appreciate your time. If you need any help please reach out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;/p&gt;

&lt;p&gt;Have a nice day!&lt;/p&gt;

</description>
      <category>react</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>36 Useful Terminal Commands</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Thu, 08 Sep 2022 18:46:57 +0000</pubDate>
      <link>https://dev.to/carolinacobo/36-useful-terminal-commands-2624</link>
      <guid>https://dev.to/carolinacobo/36-useful-terminal-commands-2624</guid>
      <description>&lt;p&gt;Here is a little list of terminal commands that you can find useful, I use some of them a lot and others from time to time.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Print Current Working Directory. It will print the full path.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pwd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;List of current directory contents
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ls 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Change the directory
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd DirectoryName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;To change to zsh shell.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chsh -s /bin/zsh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Clear the terminal logs
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;clear or cls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Copy files from the current directory to a different directory
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cp source_file target_directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Move files from the current directory to a different directory
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mv 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Make a new directory
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir NameNewDirectory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Delete empty directories
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rmdir 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Delete directories and contents within them (*be careful when using it)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm DirectoryName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create a new blank file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Find a file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;locate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Search for files and directories within a given directory
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;find
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Search through all the text in a file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grep FileName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Perform tasks that need admin or root permissions
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Get a report on the systems disk space usage (% and KBs)
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;df 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Check how much space a file or a directory take
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;du 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;View the first few lines of a text file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;head
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Display the last ten lines of a text file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Compare the contents of two different files, line by line
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;diff 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Archive multiple files into a group of files collected together as one
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;tar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Change the read, write and execute permissions of files and directories
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chmod
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Transfer the ownership of a file to the specified username
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chown
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Display all current jobs along with their status
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;jobs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Terminate a program manually
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;kill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Check the connectivity status to a server
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ping
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Download files from the internet
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;wget 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Display a list of running processes and how much CPU each process uses
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;top
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Get information about a Linux command
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;man
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Move data into a file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;echo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Compress files into a zip file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Extract a zip file
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;unzip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Display the name of the host or network
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hostname
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Create a new user
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;useradd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Delete a user
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;userdel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;After creating a user, it can be used to set a password for that user
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;passed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Thanks for reading, I appreciate your time! 🎉 If you need any help please reach out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;/p&gt;

&lt;p&gt;Have a nice day!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Best projects to start coding</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Thu, 08 Sep 2022 18:40:21 +0000</pubDate>
      <link>https://dev.to/carolinacobo/best-projects-to-start-coding-5581</link>
      <guid>https://dev.to/carolinacobo/best-projects-to-start-coding-5581</guid>
      <description>&lt;p&gt;Looking back I wish I knew about this when I started coding.&lt;br&gt;
Starting anything in life seems really complicated and even more if it's deciding what you want to have as part of your portfolio.&lt;br&gt;
I've been talking to other people like me who decided to change careers and some of them picked to do a CS degree and feel they might not have any work to show. And that has been proved to be the best way to get the first job in tech. Said that I think there's no harm in learning CS fundamentals and a lot of the topics that people learn while doing a college degree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;It seems odd starting here, but if you have no ideas it's a great start. It might seem odd if you don't have much but it's the perfect thing to build on plain HTML and CSS. It's also you can keep working on and will be a good exercise to practice new skills once you acquire them.&lt;br&gt;
As always &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.freecodecamp.org%2Fnews%2Fhow-to-create-a-portfolio-website-using-html-css-javascript-and-bootstrap%2F"&gt;FreeCodeCamp&lt;/a&gt; for the win. In that link, you can see examples of portfolios using HTML, CSS and Bootstrap.&lt;br&gt;
&lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.w3schools.com%2Fhowto%2Fhowto_website_create_portfolio.asp"&gt;W3Schools&lt;/a&gt; has also a good few ideas on how to start and build a basic portfolio and also the theory you should learn about HTML syntax and structures.&lt;/p&gt;

&lt;h2&gt;
  
  
  Games
&lt;/h2&gt;

&lt;p&gt;Games are probably one of the hardest programming challenges you could face, but as with all challenges it comes with plenty of learning.&lt;br&gt;
The second biggest project I built was a game in JavaScript and I don't think there's anyone better than Ania Kubow, here's a &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fselftaughttxg.com%2F2022%2F03-22%2Fania_kubow-tetris%2F"&gt;video&lt;/a&gt; on how to build Tetris on JS. If you are more into Python, this &lt;a href="https://medium.com/r/?url=https%3A%2F%2Frealpython.com%2Ftutorials%2Fgamedev%2F"&gt;website&lt;/a&gt; has great resources as well.&lt;/p&gt;

&lt;h1&gt;
  
  
  To-do list App
&lt;/h1&gt;

&lt;p&gt;This is good practice but also handy to use in your day to day! You can do a shopping list or a tasks list, anything that could suit you.&lt;br&gt;
Again, W3Schools has their own &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.w3schools.com%2Fhowto%2Fhowto_js_todolist.asp"&gt;tutorial&lt;/a&gt;, also I found &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMkESyVB4oUw%26t%3D32s"&gt;this one&lt;/a&gt; interesting. But there are millions of them out there.&lt;br&gt;
If you want to take it to the next level then you could try to build a Flask and MongoDB one, this &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DxjHEcmjlD-Y"&gt;tutorial&lt;/a&gt; will help you to achieve that. For me getting started with Flask and MongoDB was a big learning curve.&lt;br&gt;
I enjoyed building this one using &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DaVWJt7tigVw"&gt;Python and Google Sheets&lt;/a&gt;, getting exposure to Google APIs is always a good idea to familiarise yourself with how they work.&lt;/p&gt;

&lt;h2&gt;
  
  
  API Project
&lt;/h2&gt;

&lt;p&gt;This is something I didn't realise when I started but learning how to get data from APIs, and how to reshape it or use it will be a big part of your day to day job as a developer. The sooner you start the better.&lt;br&gt;
For my current job, the technical challenge I had to complete was using &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fnews.ycombinator.com%2F"&gt;HackerNews&lt;/a&gt; Api data, making it look better and filtering by Top, New and Best Stories and adding pagination. Here's the &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fhacker-news-challenge.vercel.app%2F"&gt;result&lt;/a&gt;, if you are curious.&lt;br&gt;
To give you some ideas, here you have &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fniall.af%2Fblog%2Ften-fun-apis-to-play-with"&gt;10 Fun Api Ideas&lt;/a&gt; to play with.&lt;/p&gt;

&lt;h2&gt;
  
  
  E-Commerce
&lt;/h2&gt;

&lt;p&gt;Those kinds of projects are probably the most complex but also learning how to work with payment platforms such as Stripe, to pull a lot of data for the different products, personal areas, emails confirming the payments, etc. Will teach you a lot! Also, you could sell it to someone looking to have their own online business.&lt;br&gt;
Here's a great tutorial you can follow to build a Python Django E-Commerce site.&lt;/p&gt;




&lt;p&gt;Thanks for reading, I really appreciate your time! 🎉 If you need any help please reach out!&lt;br&gt;
If you have any questions feel free to drop me a message on &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fcarolina-cobo%2F"&gt;https://medium.com/r/?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fcarolina-cobo%2F&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;br&gt;
Have a nice day!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>webdev</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Getting a job in tech part 4: Make every Hiring Manager want to hire you</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Tue, 19 Apr 2022 08:03:04 +0000</pubDate>
      <link>https://dev.to/carolinacobo/getting-a-job-in-tech-part-4-make-every-hiring-manager-want-to-hire-you-55gp</link>
      <guid>https://dev.to/carolinacobo/getting-a-job-in-tech-part-4-make-every-hiring-manager-want-to-hire-you-55gp</guid>
      <description>&lt;p&gt;After recruiting for several engineering companies including MongoDB, there’s something every hiring manager looked for when interviewing and that helped a lot of candidates to get hired even if they didn’t do great in all the interviews.&lt;br&gt;
Cultural fit is one of the most important deal-breakers when interviewing, if the team feels that someone won’t fit well even though technically they can be the perfect fit they might not hire that person. The technical part can be learnt, the personal one, not as much.&lt;br&gt;
Getting ready for cultural fit questions is key to success in an interview process on both sides, yours and the company you might be interviewing for.&lt;br&gt;
I wanted to put together some information I always gave to my candidates when interviewing and it is applicable for anyone you might be meeting with. But remember that, usually, Hiring Managers are the ones who would make the final decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Check their LinkedIn profile
&lt;/h2&gt;

&lt;p&gt;Yes, that’s the recruiter in me talking, but after checking how long they’ve been in the company for, if they have been promoted in that company, or anything else you can relate with, like maybe projects they’ve worked on or volunteered, it won’t be as scary to talk to them. It’s also easier to build rapport when having things in common.&lt;/p&gt;

&lt;p&gt;In my opinion, having also knowing the face of the person you are talking to will ease your nerves a little bit and will put you in a more similar position as they know things about you before your meeting.&lt;/p&gt;

&lt;p&gt;This would also give you the chance of coming up with questions that will help you to figure out if the team and the company is a good fit for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Find opinions of the company online
&lt;/h2&gt;

&lt;p&gt;This might not be always possible, but I believe that if you search hard enough you’ll always find information about a company. Also, sometimes no information might be a good sign because people are more willing to share information on bad experiences.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.glassdoor.ie/member/home/index.htm"&gt;Glassdoor&lt;/a&gt; is the most popular place to look for information. It’s a bit of work because to have full access to the information you will have to register and give information in a previous company you’ve worked for.&lt;/p&gt;

&lt;p&gt;Regardless of the work that requires it provides a lot of info like opinions, salary bands, benefits, but more importantly, questions asked to other people on their interviews. In my experience, they usually are similar so there’s no harm going in there and taking a look.&lt;/p&gt;

&lt;p&gt;Another really interesting site is &lt;a href="https://www.teamblind.com/"&gt;Blind&lt;/a&gt;, here you can find information but also ask questions blindly about the compensation you’ve been offered or even if you want to know what to choose if you have a few offers.&lt;/p&gt;

&lt;p&gt;There you could find a lot of cultural related questions and answers as well as technical, but this will help you to set up your expectations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Company values
&lt;/h2&gt;

&lt;p&gt;Quite honestly, I didn’t think about this myself but after working as a recruiter I can tell you that’s the key to knowing what to expect about the company and potential competency-based questions.&lt;/p&gt;

&lt;p&gt;Being aligned with the company values will be also evaluated as part of the process, and most likely is how your performance will be evaluated (or at least part of it). Reading them and finding experiences that might resonate with them would be good for two reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You will know early on if the company is a good fit for you as those values is what they will be seeking for people who join the company.&lt;/li&gt;
&lt;li&gt;You can be prepared for competency-based questions where you’ve shown those values.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some examples here such as &lt;a href="https://www.aboutamazon.com/about-us/leadership-principles"&gt;Amazon’s&lt;/a&gt;, &lt;a href="https://about.google/philosophy/"&gt;Google’s&lt;/a&gt; or &lt;a href="https://www.mongodb.com/company"&gt;MongoDB’s&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Competency-based questions
&lt;/h2&gt;

&lt;p&gt;As well as a technical part in the interview process there will be more soft-skills/competency-based related questions.&lt;br&gt;
To prepare for this kind of interview I think it’s good to look at the old (and probably overused) &lt;a href="https://ie.indeed.com/career-advice/interviewing/star-interview-technique"&gt;STAR Technique&lt;/a&gt;, which stands for Situation, Task, Action and Result.&lt;/p&gt;

&lt;p&gt;Even if questions are not as straightforward as Tell me of a time when you… But any question can be answered using the star technique. What I would do is think about more general situations that can be applied to different scenarios. Then I would go step by step with every step of the STAR.&lt;/p&gt;

&lt;p&gt;You can think about how to answer those questions by looking into the values of the company, so you should tweak your answers a little bit depending on what areas you are interested in making shine.&lt;/p&gt;

&lt;p&gt;Try to think of times where you were a team player, mentored someone or make an impact in your work by implementing changes or new approaches in how things are done.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions to ask
&lt;/h2&gt;

&lt;p&gt;Something that will happen over and over is the “Do you have any questions?” part. Making different questions will also make them remember you. So some of the ones I ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;**What do you like the most and the least about working here? **This might startle them a little bit but they will answer quite honestly so whatever they say it will be good to know.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What does a successful employee look like in the company?&lt;/strong&gt; This might tell you how they help with the growth of their employees.
-** What are the long term plan for this role and the team?** Show how keen you are in the role and in your personal growth.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If they haven’t given you some information about the role, the team or the day to day role you should as well, but if you can come up with something different they’ll appreciate it and it’s your time to take more control of the interview.&lt;/p&gt;

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

&lt;p&gt;I can guarantee you, it will be very hard the first few interviews you have, but it will get easier with practice and you will polish your answers in every interview you do.&lt;br&gt;
More importantly, don't be scared of asking something that you might not have understood or that is not clear, so if you get hired you’ll know everything beforehand and in case you need to compare offers you can make a decision easily.&lt;br&gt;
Hiring managers always appreciate when candidates praise the company and have done their homework about how the company is doing, any news, new releases or anything that people who work for the company are proud of. Lookup for information and make sure you mention it during the process to show how keen you are on getting hired.&lt;/p&gt;




&lt;p&gt;Thanks for reading, I really appreciate your time! 🎉 If you need any help please reach out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;br&gt;
Have a nice day!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Getting a job in tech part 3: GitHub and articles</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Mon, 07 Mar 2022 21:33:39 +0000</pubDate>
      <link>https://dev.to/carolinacobo/getting-a-job-in-tech-part-3-github-and-articles-4klf</link>
      <guid>https://dev.to/carolinacobo/getting-a-job-in-tech-part-3-github-and-articles-4klf</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u9019Klm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sxsooh0d7ch7tk1r3voj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u9019Klm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sxsooh0d7ch7tk1r3voj.png" alt="Image description" width="880" height="587"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having a well-rounded profile will take you a long way. Today I wanted to cover the new option for a &lt;strong&gt;personalised Readme file.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bringing attention to your code is important as well if some potential employers might be looking at your work, but you will definitely leave an impression if your profile is more personalised.&lt;/p&gt;

&lt;p&gt;I think there’s no one better to explain how to do it than GitHub themselves, so here’s the documentation on how to change your home Readme file.&lt;/p&gt;

&lt;p&gt;Said that there are other tweaks you can add that will make it stand out.&lt;/p&gt;

&lt;h2&gt;
  
  
   GIFs
&lt;/h2&gt;

&lt;p&gt;That’s right, you can add GIFs. Here’s my little cute one greeting whoever visits my page, the code for how to use it is below.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GOkI3WSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y6qzirx551y3wq8oxwbw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GOkI3WSL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y6qzirx551y3wq8oxwbw.gif" alt="Image description" width="498" height="362"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;img src=”https://media.giphy.com/media/Wj7lNjMNDxSmc/giphy.gif" width=”90px”&amp;gt;&lt;br&gt;
&lt;/code&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Badges
&lt;/h2&gt;

&lt;p&gt;There are badges for s lot of things, languages, frameworks, editors, etc. and also in different styles. Here some links to different sources where you can find them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/badges/shields"&gt;Shields.io&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://badgen.net/"&gt;Badgen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Ileriayo/markdown-badges"&gt;Ileryayo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;This a great &lt;a href="https://dev.to/envoy_/150-badges-for-github-pnk"&gt;article&lt;/a&gt; with some good resources too.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
   Icons
&lt;/h2&gt;

&lt;p&gt;If for your social media instead of using badges you prefer to use icons, you can create them adding them to a folder, &lt;a href="https://github.com/yushi1007/yushi1007/tree/main/images"&gt;here&lt;/a&gt; you have one to make things easy for you.&lt;br&gt;
The code to include this in your Readme:&lt;br&gt;
&lt;code&gt;&amp;lt;a href=”https://www.linkedin.com/in/USERNAME/"&amp;gt;&amp;lt;img align=”left” src=”https://raw.githubusercontent.com/username/reponame/branch/foldername/icon.svg" alt=”icon | LinkedIn” width=”21px”/&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
   Stats card
&lt;/h2&gt;

&lt;p&gt;It’s a good way to summarise all the contributions you’ve done in a really visual way, you can change colors and personalise it as well.&lt;/p&gt;

&lt;p&gt;To add it use the code below:&lt;br&gt;
&lt;code&gt;![YOUR-USERNAME’s GitHub stats](https://github-readme-stats.vercel.app/api?username=YOUR-USERNAME&amp;amp;theme=omni&amp;amp;show_icons=true)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make sure to change the GitHub username to your GitHub username.&lt;br&gt;
You can change the themes to any other you like.&lt;a href="https://github.com/anuraghazra/github-readme-stats"&gt;Here’s&lt;/a&gt; the documentation so you can pick any other style you might like.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
   Body
&lt;/h2&gt;

&lt;p&gt;For the rest of the body you can use normal markdown. &lt;a href="https://www.markdownguide.org/basic-syntax/"&gt;Here’s&lt;/a&gt; the guide from the official site in case you want it handy as well.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Here’s mine as usual if you want to take a look:&lt;br&gt;
*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YQBft_KC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ecmcdh1ai884twww992k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YQBft_KC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ecmcdh1ai884twww992k.png" alt="Image description" width="721" height="1072"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: start writing
&lt;/h2&gt;

&lt;p&gt;This is something that not everyone enjoy and it’s really not necessary to do but I really enjoy being able to share some of my knowledge or experiences with other people that might be helpful.&lt;/p&gt;

&lt;p&gt;Writing is probably the best way to do it (I’m also always available on LinkedIn or my email if you need any help). But clearly writing it’s easier to have a bigger reach.&lt;/p&gt;

&lt;h2&gt;
  
  
   How to start?
&lt;/h2&gt;

&lt;p&gt;You might feel as I felt thinking I had no idea of what to write about, so for me to start it’s been either problems I faced such as understanding what was the &lt;strong&gt;&lt;a href="http://difference%20between%20em%20and%20rem-%20css/"&gt;difference between em and rem&lt;/a&gt;&lt;/strong&gt; or &lt;a href="https://ccobo.medium.com/oh-s-t-i-deleted-all-my-git-history-4fffef4d9eb6"&gt;how I learnt not to use -f in my commits on Git.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But also things I knew for my previous role as recruiter, such as &lt;strong&gt;&lt;a href="https://ccobo.medium.com/how-do-recruiters-search-for-people-665e91a39618"&gt;how exactly recruiters use LinkedIn to find people&lt;/a&gt;&lt;/strong&gt; and how to improve your profile.&lt;/p&gt;

&lt;p&gt;And I can tell you that have and endless list of other things I didn’t know and had to learn that I want to write about. But I wanted to start sharing my journey to *&lt;em&gt;become a software developer and h&lt;a href="https://ccobo.medium.com/switching-careers-my-first-month-as-software-engineer-3def49fd6665"&gt;ow my first month as one was&lt;/a&gt;. *&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So I’m sure you have a lot of interesting ideas, problems or experiences you that you could share with other people, and writing about them is probably the best way to get a better reach.&lt;/p&gt;

&lt;p&gt;Thanks for reading, I really appreciate your time! 🎉 If you need any help please reach out!&lt;br&gt;
Next week I’ll be sharing another post about how to prepare for interviews, so please subscribe so you will receive it on your email when it’s out!&lt;br&gt;
If you have any questions feel free to drop me a message on &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/carolina-cobo/"&gt;LinkedIn&lt;/a&gt;&lt;/strong&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;br&gt;
Have a nice day!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>2022, my first year as a professional Software Developer</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Mon, 07 Mar 2022 20:57:44 +0000</pubDate>
      <link>https://dev.to/carolinacobo/2022-my-first-year-as-a-professional-software-developer-opc</link>
      <guid>https://dev.to/carolinacobo/2022-my-first-year-as-a-professional-software-developer-opc</guid>
      <description>&lt;p&gt;It still amazes me I'm writing this as a Software Engineer. 2022 is going to be my first year as a professional developer and funny enough, I'll be turning 30 as well. &lt;/p&gt;

&lt;p&gt;For a bit of context, I'm a career switcher. Until October last year, I was a Recruiter. But I wasn't happy with that path. &lt;/p&gt;

&lt;h2&gt;
  
  
  Bias on myself
&lt;/h2&gt;

&lt;p&gt;Unfortunately, I've always been biased towards myself as well, as I think a lot of people are. I was for various reasons: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I studied HR, both my degree and my master's. Yes, about 6 years studying so it felt like I had to work on that to get that time back somewhat. &lt;/li&gt;
&lt;li&gt;I'm from Spain, and there, if you have a job you are lucky if you get one in what you have studied it's like you won the lotto. So even though you might be unhappy you are lucky so you would never quit or change careers. &lt;/li&gt;
&lt;li&gt;Also, even if my English is good enough it always feel like being an outsider when living and working in a foreign country where you speak a different language. But those experiences, that different way or working make me good at working, adaptable and ready to face any challenge.&lt;/li&gt;
&lt;li&gt;I was really bad at maths, but really, really bad. I never thought I could be doing software development for that reason. &lt;/li&gt;
&lt;li&gt;I didn't think I could be able to pull it off and be a Developer, me? Never. I thought I wasn't that smart to do it, but there's the other way, work hard.&lt;/li&gt;
&lt;li&gt;I'm too emotional and empathetic. Development is always pictured as analytical, solitary and complex. But it's quite the opposite. It's creative, the more empathetic and communicative you are the better. So it turned out that the things that worried me were some of my best traits to be successful as a Developer. Understanding what other people think and feel while using software is actually really powerful. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;: All the things I thought were not good traits for being a good engineer are actually the opposite. &lt;br&gt;
Keep that in mind, just being aware of it will help you to get better with time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How did I get here? 
&lt;/h2&gt;

&lt;p&gt;If you are not happy in your current career and development  feels like the right path, my first recommendation is, to go to the community, talk to people and they'll help you to avoid mistakes they've made. &lt;/p&gt;

&lt;p&gt;Think what's your ultimate goal to get there, plan ahead and with a plan in place you'll get there. Also be aware that plan will and has to change until you reach that point you are looking for.&lt;/p&gt;

&lt;p&gt;I joined a Bootcamp where I met a lot of great people, and had a more defined path, but the more I've been part of this world, the more I realise people want to genuinely help other people to succeed all over the internet. &lt;/p&gt;

&lt;p&gt;I'm not going to say you won't find people who say that being a woman or being different won't fit in this environment, but it's very rare, and also that's not the kind of environment where you'd belong, anyway. &lt;/p&gt;

&lt;p&gt;Seeing yourself changing careers feels like an impossible at first, I didn't think I could. But having worked for years will give you valuable experience that could be applied to anything you want. &lt;/p&gt;

&lt;h2&gt;
  
  
  The biggest challenges I faced
&lt;/h2&gt;

&lt;p&gt;Technically speaking, I think anyone who is learning development will face the same days when nothing works, you feel like it will ever do and when it does it feels like magic, but with patience you'll get there.&lt;/p&gt;

&lt;p&gt;I almost quit (a few times), I struggled so much to keep my spirits up when I was being rejected, or not getting any calls after applying for jobs. But what did I do when I was ready to quit, and give up all the work? I shared this thoughts with people around me to get support and help to keep me going. It has paid off and now I know I would have regretted it forever. &lt;/p&gt;

&lt;p&gt;I'm am also an insecure person, I'll always think I'm not right and the other person is. So I've had to be conscious of that and keep reminding myself that I'm hard working and strong and I'll get there. &lt;/p&gt;

&lt;h2&gt;
  
  
  What have I learnt through this process?
&lt;/h2&gt;

&lt;p&gt;I'm not perfect, I will never be, but neither is. Honest work and effort will be rewarded in the long term.&lt;br&gt;
I should always apply for any job I like, even I might not be a perfect fit, I can learn anything in the appropriate environment.&lt;br&gt;
Putting a job over my mental health. I tried this when I was a recruiter and it only burnt me out, but it also propelled me to change careers. Even tough the outcome was positive, I will never do it again and I'll prioritise myself. &lt;br&gt;
To not compare myself with other people, this is hard when you see people who are doing similar things to you do better, but remember everyone has a different situation and the only person you should be competing with is yourself. &lt;/p&gt;

&lt;h2&gt;
  
  
   "Remember you are great" tricks
&lt;/h2&gt;

&lt;p&gt;Sometimes it's easier to remember the bad things that happened, the negative feedback you've received or how something took you a week to solve. But we forget the successes pretty quickly. To avoid that I've been: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I got &lt;a href="https://butterslip.com/product/five-year-memory-book-one-line-a-day/"&gt;One Line a Day&lt;/a&gt;. You can have some lines of your days for 5 years. I write down anything positive someone tells me, like positive feedback on my work, finishing tasks or learning something new. &lt;/li&gt;
&lt;li&gt;I ask for feedback and I embrace it! It's great to hear good things but I think also negative points, those help you grow. &lt;/li&gt;
&lt;li&gt;Share your work, write, talk to other people who are starting. That will help you to see what you give back, and it's a great feeling!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  I pledge to support women, non-binary, and other minorities in tech by…
&lt;/h2&gt;

&lt;p&gt;Being here for anyone who needs help. Anything, CV tips, interview preparation, or just a chat to share the struggles of changing careers in tech.&lt;br&gt;
Write, get content out to show people that is possible and there are others like them that will be happy to help.&lt;br&gt;
Advocate for having more diversity in the teams and companies I work for.&lt;/p&gt;

&lt;h2&gt;
  
  
  And remember
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Everyone deserves to do better, so if you are not happy just keep going, there will be bad and good days but eventually you'll get there.&lt;/li&gt;
&lt;li&gt;Don't be scared of asking for help. Worst case scenario someone might not get back to you but I can promise you, most people will. &lt;/li&gt;
&lt;li&gt;Apply for that job even if you don't qualify on everything, you have the no already, what if you get a yes? 
Being different is hard sometimes, but the value you'll add to any team will be much bigger than from people who think alike. &lt;/li&gt;
&lt;li&gt;If you get there, help other people to succeed!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thanks for reading, and as I said, I'm always happy to help with whatever it might be, so please send me a message and I'd love to connect!&lt;/p&gt;

</description>
      <category>wecoded</category>
    </item>
    <item>
      <title>Getting a job in tech part 2: Portfolio</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Thu, 24 Feb 2022 08:07:05 +0000</pubDate>
      <link>https://dev.to/carolinacobo/getting-a-job-in-tech-part-2-portfolio-66f</link>
      <guid>https://dev.to/carolinacobo/getting-a-job-in-tech-part-2-portfolio-66f</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijazzsrohxrdc5h5ixxf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fijazzsrohxrdc5h5ixxf.jpeg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As important as having a good CV is, having a place showing the work you are doing, or you have done might be more important. If you only have it on a repo on Github or saved on your laptop, it’s no good if you don’t show it.&lt;/p&gt;

&lt;p&gt;It might be scary at first, and you might feel unsure what you have is worth sharing but it’s for different reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can keep track of your progress and really compare what you could achieve months or years ago and appreciate all the progress you’ve made.&lt;/li&gt;
&lt;li&gt;It will force you to practice more.&lt;/li&gt;
&lt;li&gt;It will show what you are capable of.&lt;/li&gt;
&lt;li&gt;Also, recruiters prefer to see something pretty or interesting (or both) in the middle of reviewing CVs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  My first portfolio
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Inspiration
&lt;/h3&gt;

&lt;p&gt;Where to start and how to organise all the ideas might be tough and overwhelming. A habit I’ve got is to check &lt;a href="https://dribbble.com/" rel="noopener noreferrer"&gt;Dribbble&lt;/a&gt;. I’m still training my eye so definitely this helps massively to see what is a trend or a good way to organise your site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tech stack
&lt;/h3&gt;

&lt;p&gt;Checking on Github it’s been nearly a year I’ve built my first portfolio which you can find &lt;a href="https://carolinacobo.github.io/portfolio/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;br&gt;
I built this portfolio using mostly &lt;strong&gt;&lt;a href="https://tailwindcss.com/" rel="noopener noreferrer"&gt;Tailwind CSS&lt;/a&gt;&lt;/strong&gt; and plain HTML. I decided to pick Tailwind over other options such as Bootstrap or Materialize, just to learn something new. I think that’s one of the wonders of tech, you can pick something new and give it a go.&lt;/p&gt;

&lt;p&gt;Even though I used mostly Bootstrap in my Bootcamp projects I decided I wanted to try Tailwind as everyone I follow on Twitter was talking wonders about it, and now I know why.&lt;br&gt;
Tailwind is way more flexible and not as opinionated as Boostrap (you might end up having to use !important way too often on your CSS) and it often behaves in unexpected ways. With Tailwind you’ll have all the control over your classes and your CSS will be really small or even inexistent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;p&gt;If your site is static and your budget is tight you can always deploy it on Github Pages your URL will include your username and the name of your repo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://carolinacobo.github.io/portfolio/" rel="noopener noreferrer"&gt;https://carolinacobo.github.io/portfolio/&lt;/a&gt;Once you push to it it will automatically deploy or redeploy, easy right?&lt;/p&gt;

&lt;p&gt;But if you are willing to pay for a domain you can always get a more personal one with your name or something that you feel represents your brand. I used my name for my portfolio so if someone searches my name they’ll get to my portfolio.&lt;br&gt;
To do the deployment and get the domain I used &lt;a href="https://vercel.com/" rel="noopener noreferrer"&gt;Vercel&lt;/a&gt;. I found the domain I wanted and bought it for $20 a year, which for me has paid off. But there are great options that are free.&lt;/p&gt;

&lt;p&gt;You only need to go to the site, register, and in the Dashboard, you will find different options on the dashboard to buy the domain, then link your repo and configure the deployment.&lt;br&gt;
You can also have free domains on Github, and once it’s linked to your Github account it will be really similar to using Github Pages.&lt;/p&gt;

&lt;h2&gt;
  
  
  My new portfolio
&lt;/h2&gt;

&lt;p&gt;A few days ago I finished my new portfolio, which you can see here. You may notice that the structure is really similar to my first one, but there are major changes in what’s built on. The tech stack I used was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Tailwind CSS&lt;/li&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why did I use these technologies?
&lt;/h3&gt;

&lt;p&gt;React is one of the most used frameworks worldwide and also in my current role, I’m working with both &lt;strong&gt;React and Tailwind&lt;/strong&gt;. Any opportunity I might have to work with them I’ll take it, as I know it will benefit me in both my professional and personal work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next.js&lt;/strong&gt; is an open-source development framework that is built on top of Node.js. This allows React-based web applications functionalities such as server-side rendering and generating static websites, which for blogs or portfolios is great. This wasn’t entirely impossible to do before having Next.js, and it required a lot of tweaking with issues related to caching, server load, etc.&lt;/p&gt;

&lt;p&gt;On the technical side, &lt;strong&gt;Next.js&lt;/strong&gt; will only load the Javascript that is needed on every page, which makes for much faster page loading times as it won’t load for anything the user is not asking for.&lt;/p&gt;

&lt;p&gt;It can also help you with incremental static regeneration and static site generation. Another way of building more SEO friendly websites and applications, and that means that the site can be easily found.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other options
&lt;/h3&gt;

&lt;p&gt;There are other tools that can be used as I mentioned above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bootstrap might be easier if you are using it already in other projects. In my opinion, Tailwind is better and the documentation is easier to follow than in Bootstrap.&lt;/li&gt;
&lt;li&gt;Wix or WordPress are easy, and you can personalise them but you may have to pay to have a better layout that will look different to the free ones. Here you can find a tutorial on how to build on &lt;a href="https://www.wix.com/blog/creative/2018/04/how-to-make-online-design-portfolio-guide/" rel="noopener noreferrer"&gt;Wix&lt;/a&gt; and Portfolio Themes on &lt;a href="https://wordpress.com/themes/portfolio" rel="noopener noreferrer"&gt;WordPress&lt;/a&gt; if you want somewhere to start.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;If it’s your first attempt, start with something easy and simple, you can always improve it or just make it brand new! I think having a showcase of your work will take you a long way.&lt;/p&gt;

&lt;p&gt;You can also ask for help from other people, I did when I needed some support as it can be frustrating feeling stuck or not knowing how to solve some problems you might come across.&lt;/p&gt;

&lt;p&gt;Also, I know writing or working on side projects while working full time might be difficult, but it’s also really rewarding having it all together and showing the world what you are capable of!&lt;/p&gt;

&lt;p&gt;Thanks for reading, I really appreciate your time! 🎉 If you need any help please reach out!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next week I’ll be sharing another post about personalising the Readme file on Github and how I’m starting to get into the habit of writing,&lt;/strong&gt; so please subscribe so you will receive it on your email when it’s out!&lt;br&gt;
If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;/p&gt;

</description>
      <category>portfolio</category>
      <category>javascript</category>
      <category>nextjs</category>
    </item>
    <item>
      <title>Getting a job in tech part 1: CV</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Mon, 14 Feb 2022 21:50:26 +0000</pubDate>
      <link>https://dev.to/carolinacobo/getting-a-job-in-tech-part-1-cv-ck8</link>
      <guid>https://dev.to/carolinacobo/getting-a-job-in-tech-part-1-cv-ck8</guid>
      <description>&lt;p&gt;I’ll be sharing a few resources on what I did to switch careers. I’ll share my CV, Portfolio and GitHub.&lt;br&gt;
In my opinion, writing a CV that shows your skillset and opens the door to getting an interview is one of the hardest tasks while looking for a job. When starting you will probably get automated rejection emails, and therefore no room to ask for feedback (and remember all feedback is good feedback). But, it’s probably even harder if you are a career switcher or you don’t have much experience yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes I made
&lt;/h2&gt;

&lt;p&gt;I made a few more but probably the most important ones (jump to the last one if you want to see the one that after working on it helped to me get a lot of interviews):&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Focusing too much on my previous experience
&lt;/h3&gt;

&lt;p&gt;Or if you haven’t worked at all, you might feel you need to fill your CV with information that is not relevant but takes space.&lt;br&gt;
You might think “I’ve worked/studied really hard to achieve all I did”, but when you are changing or starting your career, you need to change your mindset and value the skills you’ve developed along the way, and not only the experience you have.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Thinking years of experience were more important than skills
&lt;/h3&gt;

&lt;p&gt;It sounds like a cliché, but it’s absolutely not. I can’t deny that working teaches you really valuable lessons and help with skills such as communication, working as part of a team and time management. But that doesn’t mean you can’t bring valuable skills to a company if you don’t have related experience or any at all.&lt;/p&gt;

&lt;h3&gt;
  
  
   3. Not giving importance to things I do out of work/study
&lt;/h3&gt;

&lt;p&gt;I love reading, I love drawing on Procreate (even if I’m really bad at it) and I’m sure you do love things that might seem not related. But I can assure you they are also teaching you valuable skills. So don’t be shy and bring it to the table! Give a full picture of who you are and what makes you you and I’m sure, that will help you to find a company that is a good fit for your skillset and personality.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Trying to fit everything on one page
&lt;/h3&gt;

&lt;p&gt;If you can, great! You’ll see my approach to this below, but don’t feel you have to do that. If you have relevant information don’t cut it out unless it’s not adding anything valuable.&lt;/p&gt;

&lt;h3&gt;
  
  
   5. Using a template
&lt;/h3&gt;

&lt;p&gt;This is a tricky one, let’s not forget it’s a CV and that we shouldn’t re-invent the wheel. So keeping a traditional layout, not using weird fonts or structures is worth remembering while doing it.&lt;br&gt;
Said that your goal is also to get the hiring team to look at it for more than 5 seconds, read it and most importantly remember it. Including other details or some examples of your work might be a game-changer.&lt;/p&gt;

&lt;h3&gt;
  
  
   6. Not having a portfolio
&lt;/h3&gt;

&lt;p&gt;I think it’s hard to envision this when you are starting, but this is what makes the real difference. Anything you are working on is worth sharing, maybe a project you built, completing 30 days of coding challenge, if you are writing a post, anything you are doing, share it! It will build up over time.&lt;br&gt;
Also, there are great tools like Wix or WordPress, or if you are into software development like myself, I used Tailwind to have something to share.&lt;br&gt;
Honestly, this is what made the real difference for me to start lining up interviews, so don’t be scared and share all the cool things you’ve done!&lt;br&gt;
Here, you have the last version of my CV that helped me to get my first Software Development job! You can absolutely use it as a template but give your personal touch or it will end up being another one on the pile.&lt;/p&gt;

&lt;h2&gt;
  
  
  My CV
&lt;/h2&gt;

&lt;p&gt;Please, take a minute to see my reasoning behind the final result so you can tweak it and make something even better.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftta6rmykyi5wj4mh92vw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftta6rmykyi5wj4mh92vw.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Key things I think made it stand out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The colour palette, it’s the same one I had on my portfolio so both matched and used it to include links to all the relevant sites.&lt;/li&gt;
&lt;li&gt;Direct links to my Portfolio, Github and LinkedIn to show all the work I’ve been doing.&lt;/li&gt;
&lt;li&gt;The summary about where I was coming from, and what is what I was looking for.&lt;/li&gt;
&lt;li&gt;Education related to this new career I was pursuing.&lt;/li&gt;
&lt;li&gt;My technical skillset and other related stuff I was doing like reading coding books or participating in Hackathons.&lt;/li&gt;
&lt;li&gt;And then, the key part, I made a screenshot of my projects and linked them. You can add links to your images, and then if you submit them in PDF format it will be really easy for people to click and open them. Bear in mind that this might be detrimental sometimes. If the software that is receiving the CV is not parsing it correctly for not being a .doc. Said that I was happy to assume that risk.
On the second page below you can see all my professional experience, I also left some room for the education I completed in the past as well as my interest and hobbies. 
I kept this part as lean as possible but I wanted to show also all the other skills I acquired in my previous roles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujdc3wq4djfffntzguph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujdc3wq4djfffntzguph.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;While writing a CV is always scary, just focus on what you can bring to a team, what you’ve worked on and how driven you are even outside of work or study.&lt;br&gt;
Ask your friends, classmates or even the people in the community what they think about it or any potential changes they’d make.&lt;br&gt;
And mostly, consider it as always a work in progress and keep changing it and tweaking it until people tell you that they really liked your CV when you are having an interview.&lt;/p&gt;

&lt;p&gt;Thanks for reading, I really appreciate your time! 🎉&lt;/p&gt;

&lt;p&gt;Next week I’ll be sharing another post about my first and my new portfolio, so please subscribe so you will receive it on your email when it’s out!&lt;/p&gt;

&lt;p&gt;If you have any questions feel free to drop me a message on &lt;a href="https://www.linkedin.com/in/carolina-cobo/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or send me an &lt;a href="//ccobo.dev@gmail.com"&gt;email&lt;/a&gt;. 😊&lt;/p&gt;

</description>
      <category>job</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Difference between em and rem - CSS</title>
      <dc:creator>CarolinaCobo</dc:creator>
      <pubDate>Sun, 13 Feb 2022 20:40:41 +0000</pubDate>
      <link>https://dev.to/carolinacobo/difference-between-em-and-rem-css-5e08</link>
      <guid>https://dev.to/carolinacobo/difference-between-em-and-rem-css-5e08</guid>
      <description>&lt;h2&gt;
  
  
  What are they?
&lt;/h2&gt;

&lt;p&gt;Both of them are CSS relative measurement units. Unlike for example, Pixels, which are fixed measurement.&lt;br&gt;
What is the main difference between them?&lt;br&gt;
ems will take the rems, that unlike ems, are consistent. They don’t depend on the values set by the parents of the current element. They set the size relative to the root element of the page, HTML in this case.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you use them?
&lt;/h2&gt;

&lt;p&gt;An ems unit is equal to the computed font-size for the element to which the em is applied. If no font size is defined anywhere in the CSS, the em unit will be equal to the browser’s default font size for the document, which is usually 16px.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;1em = 16px&lt;br&gt;
em size = pixel size/16&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We can calculate rems by the following formula if the font-size of the body element is 16px:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;rem = pixels/16&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On pxtoem.com you can convert Pixels to em easily, even customising your em needs.&lt;/p&gt;

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

&lt;p&gt;Using either of them would be better than pixel units because using it prevents the browser settings to make any size adjustments.&lt;br&gt;
Both of them give us flexibility in our design working similarly. Still, it’s important to be able to differentiate them because it is how the browser will determine the px value they translate into. Use one of the other will depend on what your needs are.&lt;/p&gt;

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