<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Real Estate Broker to Software Engineer]]></title><description><![CDATA[From reading leases to reading code. Loving the career switch and never going back. Guiding others on their journey to becoming software engineers.]]></description><link>https://www.blog.edmondhui.com</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 11:41:14 GMT</lastBuildDate><atom:link href="https://www.blog.edmondhui.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Easily debug frontend code with Chrome DevTools]]></title><description><![CDATA[The scariest thing when learning how to code is running into bugs. Early on in your coding journey, even the smallest bug may seem like an insurmountable challenge. 

Luckily, we have modern web browsers and tools to help us tackle these challenges. ...]]></description><link>https://www.blog.edmondhui.com/debug-with-chrome</link><guid isPermaLink="true">https://www.blog.edmondhui.com/debug-with-chrome</guid><category><![CDATA[Beginner Developers]]></category><category><![CDATA[debugging]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[JavaScript]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Sat, 24 Sep 2022 23:50:18 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1664058591799/G3Goeljit.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The scariest thing when learning how to code is running into bugs. Early on in your coding journey, even the smallest bug may seem like an insurmountable challenge. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663819492799/YsKd5cWpz.gif" alt="panic-scream.gif" class="image--center mx-auto" /></p>
<p>Luckily, we have modern web browsers and tools to help us tackle these challenges. Chrome provides developer tools that allow us to easily test, debug, and fix our frontend code. </p>
<p>This article will introduce the basic tools that you should have in your toolbox. Later I will write an article going in-depth about how to use these tools and other advanced tactics to help you squash any bug you encounter.</p>
<p>To get started with learning how to use the Chrome developer tools hit F12 if you're on a Windows computer or Option + Command + i if you're on a Mac.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663819660842/Ce3z2CTlM.png" alt="image.png" /></p>
<h2 id="heading-element-inspector">Element Inspector</h2>
<p>When your developer tools first open up you should be on the elements tab. This shows you all the HTML elements that are currently on your page. This allows you to easily inspect and change things on the page.</p>
<p>One of the most useful tools in this tab is the <strong>magnifying glass</strong>. Once you click on this you can hover over any element on the page and the dev tools will bring its HTML code into focus in the inspector window.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663819884727/dsgunWTHV.png" alt="image.png" class="image--center mx-auto" /></p>
<p>Once you are looking at an element, on the right you will see the style section. This will tell you all the styles currently affecting that HTML element. You can edit these CSS styles and they will be reflected on the page. You can also uncheck styles to deactivate them. </p>
<p>An easy way to preview CSS is to edit the styles of your HTML elements directly in this section. You can easily test out new styles without having to leave the page. Just remember that if you refresh the page you will lose all your progress.</p>
<p>Chrome has a great showcase and guide showing you everything you can do with this tool <a target="_blank" href="https://developer.chrome.com/docs/devtools/dom/">here</a>.</p>
<h2 id="heading-console">Console</h2>
<p>Within your developer tools, you should have a console. This allows you to run code in your chrome window and allows you to interact with elements on the page. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1664058288913/WKgk96vdk.png" alt="image.png" class="image--center mx-auto" /></p>
<p>Many times you will see errors (displayed in red) pop up in this console allowing you to pinpoint exactly where something went wrong. You can also put <code>console.log()</code> in your code and see your logs in the console. This is useful because it can tell you if the code is getting to that point in your code. It can also tell you what is in a variable at that time.</p>
<p>This is great when paired with <code>debugger</code> which sets a breakpoint in your code. Wherever you put your <code>debugger</code> will stop the execution of JavaScript in your browser if you have your development tools open. Then you can do whatever you want, like viewing the contents of objects or running functions.</p>
<p>You can see specific examples and read more about this on the chrome developer documentation site <a target="_blank" href="https://developer.chrome.com/docs/devtools/console/">here</a></p>
<h2 id="heading-network">Network</h2>
<p>The network tab in the dev tools is useful for inspecting requests made to your backend. You can see the specific payloads made to your browser on page load or specific requests such as Ajax requests that are made from your browser.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663874354104/oNSd7_dH5.png" alt="image.png" class="image--center mx-auto" /></p>
<p>You can glean tons of information from these requests. Most importantly you should look for the HTTP method, status code, and payload.</p>
<p>The HTTP methods will tell you what you are attempting to do with your request. The most commonly used methods are POST, GET, PUT, PATCH, and DELETE.</p>
<p>A GET is used for getting data from your server, the server will usually respond with a 200 OK back with the data you requested.</p>
<p>A POST is used to add data to the server. This causes a change in the state or causes a side effect on the server. Once the data is added the most common response is a 201 Created. </p>
<p>A PUT and PATCH are both used to update existing data on the server. PATCH is different from PUT because it is used to partially update a resource on the server. The usual response is a 204. </p>
<p>Last DELETE is used to delete data on the server. The usual response from the server for DELETE is 204.</p>
<p>When using the Network tab, you can click on any request to see the request and response body of any requests which will be extremely helpful during development. </p>
<h2 id="heading-cookies">Cookies</h2>
<p>When developing you may need to use cookies for logins, managing personalization preferences, and tracking user behavior. </p>
<p>You can find your cookies in the application tab in the Chrome developer tools. There you will find a table with fields for the values of a cookie. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663874381965/YrfraXGcJ.png" alt="image.png" class="image--center mx-auto" /></p>
<p>Here you can also edit cookies by double clicking them and changing the value to anything you need for testing. You can also delete them by selecting a cookie and clicking delete selected.</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>You can never experiment and truly learn how to code without failing. Learning how to debug code is one of the best ways to fully grok what you are doing and learn. </p>
<p>This article about frontend debugging tools is part of a series where I try to teach you everything you need to know as a software engineer to complete beginners. If you're interested in learning more check out my <a target="_blank" href="https://www.blog.edmondhui.com/series/beginners">series here</a>. I go over everything from setup to writing your first program and pushing it to Git!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1664058183777/zhSfPvDFP.png" alt="Thank you for Reading.png" class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[How to set up a developer environment on Mac and PC]]></title><description><![CDATA[The hardest part of becoming a software engineer is starting. New developers may feel overwhelmed and never take the first step.
Before writing a line of code every developer needs to first set up their dev environment. This article is to help non-de...]]></description><link>https://www.blog.edmondhui.com/developer-environment</link><guid isPermaLink="true">https://www.blog.edmondhui.com/developer-environment</guid><category><![CDATA[Beginner Developers]]></category><category><![CDATA[beginner]]></category><category><![CDATA[learning]]></category><category><![CDATA[newbie]]></category><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Fri, 16 Sep 2022 13:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1663306587060/4UE4tbWO9.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The hardest part of becoming a software engineer is starting.<strong> New developers may feel overwhelmed and never take the first step.</strong></p>
<p>Before writing a line of code every developer needs to first set up their dev environment. This article is to help non-devs dip their toes into the world of software development by <strong>providing an easy to follow step by step guide to set up every tool you need to start coding.</strong></p>
<p>I guarantee this will be the simplest introduction to development on the internet and that anyone will be able to follow this guide. </p>
<h2 id="heading-developer-environment-setup-for-windows">Developer environment setup for Windows</h2>
<p>To code on a windows device, you will need to download a Linux subsystem. This sounds much more daunting than it actually is. This is completely free and easy to set up. </p>
<p>You must have at least Windows 10 or higher to be able to set this up.</p>
<p>Microsoft has a really great guide <a target="_blank" href="https://docs.microsoft.com/en-us/windows/wsl/install">here</a> that you can follow. I will provide the same guide with pictures so you can follow along.</p>
<h3 id="heading-setting-up-windows-subsystem-for-linux-wsl">Setting up Windows Subsystem for Linux (WSL)</h3>
<ol>
<li>In your application bar search for "PowerShell" and run this application as an administrator.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663295216169/b9HCy_B2K.png" alt="image.png" class="image--center mx-auto" /></li>
<li>There should be a blue PowerShell terminal that opens up. Copy and paste this into the terminal and press enter:<pre><code>Enable<span class="hljs-operator">-</span>WindowsOptionalFeature <span class="hljs-operator">-</span>Online <span class="hljs-operator">-</span>FeatureName Microsoft<span class="hljs-operator">-</span>Windows<span class="hljs-operator">-</span>Subsystem<span class="hljs-operator">-</span>Linux
</code></pre><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663295338105/hO-FXlOQW.png" alt="image.png" class="image--center mx-auto" /></li>
<li>After this command finishes running restart your computer.</li>
<li>In your application bar search for "Microsoft Store" and open the application.</li>
<li>Find "Ubuntu" in the Microsoft Store and click "Get" then "Install"
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663295494996/jnR1f9tD9.png" alt="image.png" class="image--center mx-auto" /></li>
<li>It will install some files and then prompt you to "Enter new UNIX username", enter a username, and then it will prompt you for a password for your new user.</li>
<li>Once you have your user, this command which should update all your packages:<pre><code>sudo apt <span class="hljs-keyword">update</span>
</code></pre></li>
<li>Once that is done upgrade your packages by running:<pre><code><span class="hljs-attribute">sudo</span> apt upgrade
</code></pre></li>
<li>Next you have to configure Git by setting your git user name by running:<pre><code>git config <span class="hljs-operator">-</span><span class="hljs-operator">-</span>global user.<span class="hljs-built_in">name</span> <span class="hljs-string">"Your Name"</span>
</code></pre>You should replace "Your Name" with your name.</li>
<li>Next configure Git to use your email, you should use the email associated with your GitHub account:<pre><code>git config <span class="hljs-operator">-</span><span class="hljs-operator">-</span>global user.email <span class="hljs-string">"YourEmail@email.com"</span>
</code></pre>Replace "YourEmail@email.com" with your email.</li>
</ol>
<h3 id="heading-installing-and-configuring-visual-studio-code-vscode">Installing and configuring Visual Studio Code (VSCode)</h3>
<ol>
<li>You will need to install Visual Studio Code, you can do that by going to the <a target="_blank" href="https://code.visualstudio.com/download">VSCode website</a> and clicking download for Windows.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663303164811/VzsoFyr99.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Once VSCode is done installing open it and it should prompt you to install "Remote - WSL" since you have Window Linux Subsystem installed on your system. Click install.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663303287512/rMbLNSZFo.png" alt="image.png" class="image--center mx-auto" /></li>
<li>After it is done downloading close VSCode.</li>
<li>Open Ubuntu and run this to open VSCode from the command line:<pre><code><span class="hljs-attribute">code</span> .
</code></pre>This will install VSCode Server and open VSCode.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663303786107/5HXfrXkIG.png" alt="image.png" class="image--center mx-auto" /></li>
<li>You can use this method to open your VSCode or just search for the application in your application bar and run it.</li>
<li>That's it! You're all set up to start coding on your new code editor on a Window Subsystem for Linux.</li>
</ol>
<h2 id="heading-developer-environment-setup-for-macs">Developer environment setup for Macs</h2>
<p>To start coding on a Mac you have to download a few things. Instead of setting up a Linux subsystem like what we had to do on Windows, we will have to use Homebrew to use the command line to install software and tools. </p>
<h3 id="heading-installing-homebrew">Installing Homebrew</h3>
<p>Homebrew allows you to download applications and tools. It is a package manager for Macs that simplifies installing software on macOS. You can check their website out <a target="_blank" href="https://brew.sh/">here</a>. It is open-source and 100% safe as long as you know what you're downloading. </p>
<ol>
<li>Open your terminal.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663304614384/f2u5-LJry.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Run this command to install Homebrew:<pre><code><span class="hljs-operator">/</span>bin<span class="hljs-operator">/</span>bash <span class="hljs-operator">-</span>c <span class="hljs-string">"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"</span>
</code></pre>You will be prompted to continue or abort. Press <code>RETURN</code> to continue. </li>
</ol>
<h3 id="heading-using-homebrew-to-install-git">Using Homebrew to install Git</h3>
<ol>
<li>Install git using Homebrew by running:<pre><code><span class="hljs-attribute">brew</span> install git
</code></pre></li>
<li>Configure your git by setting your username:<pre><code>git config <span class="hljs-operator">-</span><span class="hljs-operator">-</span>global user.<span class="hljs-built_in">name</span> <span class="hljs-string">"Your Name"</span>
</code></pre>You should replace "Your Name" with your name.</li>
<li>Next configure Git to use your email, you should use the email associated with your GitHub account:<pre><code>git config <span class="hljs-operator">-</span><span class="hljs-operator">-</span>global user.email <span class="hljs-string">"YourEmail@email.com"</span>
</code></pre>Replace "YourEmail@email.com" with your email.</li>
</ol>
<h3 id="heading-install-visual-studio-code">Install Visual Studio Code</h3>
<p>You can go to <a target="_blank" href="https://code.visualstudio.com/download">Visual Studio Code's website</a> and click download for Mac. You should be able to unzip it and drag it into your applications. That's it, now you can start coding!
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663305348484/MLqDocPnq.png" alt="image.png" class="image--center mx-auto" /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Once you have these basic tools set up on your computer you will be ready to start coding whatever you like. You can always download more tools and software. For example, if you wanted to start doing Ruby development you could install rbenv and Ruby using Homebrew or WSL. </p>
<p>If you are a complete beginner starting to learn how to code I would recommend checking out my beginner developer series. The next article you should read is the <a target="_blank" href="https://www.blog.edmondhui.com/how-to-use-git">How to use Git and GitHub article</a> now that you have set up your development environment and are ready to start committing code.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1663306568906/pSzuDzRNG.png" alt="Thank you for Reading.png" /></p>
]]></content:encoded></item><item><title><![CDATA[A beginner's guide to functional programming]]></title><description><![CDATA[Functional programming is a way of programming that creates clean and maintainable code. It was something that I wanted to get into and have started to learn in these last few months. The company I am working at now uses functional programming heavil...]]></description><link>https://www.blog.edmondhui.com/functional-programming</link><guid isPermaLink="true">https://www.blog.edmondhui.com/functional-programming</guid><category><![CDATA[#week4]]></category><category><![CDATA[4articles4weeks]]></category><category><![CDATA[Functional Programming]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[learning]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Mon, 12 Sep 2022 03:07:40 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1662951481609/aC1ORTLLh.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Functional programming is a way of programming that creates clean and maintainable code.</strong> It was something that I wanted to get into and have started to learn in these last few months. The company I am working at now uses functional programming heavily. You can read about <a target="_blank" href="https://www.blog.edmondhui.com/first-developer-job">how I got my first developer job here</a>.</p>
<p>In this article, I will try to teach you everything I know about functional programming. <strong>It is a powerful tool to have in your belt that is used in many different languages. </strong></p>
<p><strong>One of my favorite things about functional programming is its ability to prevent side effects.</strong> Side effects happen when there is a modification of some kind of state. </p>
<p>Often in object-oriented programming objects have a state which is mutated causing side effects. The reason we don't want side effects is they can cause unpredictable results depending on the state when a function is run. We want to limit side effects and only use them when necessary. </p>
<h2 id="heading-pure-functions">Pure functions</h2>
<p>This is where pure functions come in with functional programming.<strong> These are functions that only rely on the input to the function to generate a predictable output. </strong>This means that if you pass in the same input one hundred times you will get the same result every time. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662951083131/xD9EXmYms.webp" alt="Majin_Buu_turns_guy_into_milk.webp" class="image--center mx-auto" /></p>
<p>Pure functions are the basic building blocks of functional programming because of their simplicity. </p>
<p>They are easier to debug than object-oriented programming because you do not have to use methods that interact with states which can change. </p>
<p>Here is the simplest example of a pure function:</p>
<pre><code>const double <span class="hljs-operator">=</span> (a) <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> a <span class="hljs-operator">*</span> <span class="hljs-number">2</span>
</code></pre><p>Now that you have a pure function which is a basic building block you can use them with other functions. This is because they have an input that will always return the same output. </p>
<h2 id="heading-higher-order-functions">Higher order functions</h2>
<p><strong>These are functions that can accept another function as an argument. </strong>You can use these functions to operate with other functions. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662950923529/IEH8Tbg6R.gif" alt="d41586-020-00060-1_17560840.gif" class="image--center mx-auto" /></p>
<p>Common examples of these kinds of functions in javascript are array methods like <code>map</code> or <code>filter</code>. This is where functional programming is the most useful. When working with data which is a collection of objects in an array you can use pure functions to easily manipulate the results with fewer bugs because there are no side effects.</p>
<p>A simple example of a higher order function using the pure function <code>double</code> we created above would look like this:</p>
<pre><code><span class="hljs-string">const</span> <span class="hljs-string">numbers</span> <span class="hljs-string">=</span> [<span class="hljs-number">1</span>,<span class="hljs-number">2</span>,<span class="hljs-number">3</span>,<span class="hljs-number">4</span>,<span class="hljs-number">5</span>]<span class="hljs-string">;</span>

<span class="hljs-string">const</span> <span class="hljs-string">doubledNumbers</span> <span class="hljs-string">=</span> <span class="hljs-string">numbers.map(double);</span>

<span class="hljs-string">console.log(doubledNumbers);</span> <span class="hljs-string">//</span> [<span class="hljs-number">2</span>,<span class="hljs-number">4</span>,<span class="hljs-number">6</span>,<span class="hljs-number">8</span>,<span class="hljs-number">10</span>]
</code></pre><h2 id="heading-first-class-functions">First class functions</h2>
<p>The next concept I want to go over is the first class function which will be used in the next section of this article.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662951212072/P8sk03Fiw.jpg" alt="6t2ark.jpg" class="image--center mx-auto" /></p>
<p><strong>First class functions are important since functions are treated like variables in functional programming.</strong> In functional programming, functions are often passed around and not always invoked. </p>
<p>They are called first class functions since they are treated as "first class" elements and act the same way as any other normal elements.</p>
<ul>
<li>Functions can be assigned to variables</li>
<li>Functions can be passed to other functions</li>
<li>Functions can be returned from functions</li>
<li>Functions can be included in data structures e.g. array</li>
</ul>
<p>The example above treats the double function as first class because it is being passed into the map function.</p>
<h2 id="heading-currying">Currying</h2>
<p>Last we have currying which is a way of <strong>creating functions that will return functions</strong> until it has all the parameters before doing something.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662950865991/CigoHlQIg.gif" alt="200w.gif" class="image--center mx-auto" /></p>
<p>It will be easier to understand with an example.</p>
<p>We can use our <code>double</code> function from earlier and change it into a curried function.</p>
<p>The easiest way of doing this would be changing it from <code>double</code> to <code>multiply</code> and taking in two parameters:</p>
<pre><code>const multiply <span class="hljs-operator">=</span> (a) <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> (b) <span class="hljs-operator">=</span><span class="hljs-operator">&gt;</span> a<span class="hljs-operator">*</span>b

const multiplied <span class="hljs-operator">=</span> multiply(<span class="hljs-number">1</span>)(<span class="hljs-number">2</span>) <span class="hljs-comment">// 2</span>
</code></pre><p>However, now that we have this multiply curried function we can now easily recreate our double function by calling it with a two:</p>
<pre><code><span class="hljs-keyword">const</span> <span class="hljs-keyword">double</span> = multiply(<span class="hljs-number">2</span>) <span class="hljs-comment">// double = (b) =&gt; 2 * (b)</span>
</code></pre><p>I hope this demonstrates the power that currying will have on your code. With currying you can:</p>
<ul>
<li>Clean up functions</li>
<li>Have less repetitive code</li>
<li>Have more reusable code</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>I hope this intro article to functional programming opens your eyes to the possibilities of using a new coding paradigm and inspires you to learn functional programming. </p>
<p>In future articles, I hope to expand on functional programming and write about an open-source library called CooperTS which was developed by the talented programmers at my current job. </p>
<p>If you didn't know I am a <a target="_blank" href="https://www.blog.edmondhui.com/software-engineer-in-3-months">real estate broker turned software engineer</a> and I hope to teach you everything I know about programming. Please follow me if you found this helpful to get more content like this. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662952012374/15fLJumPZ.gif" alt="Copy of Beginner Developer Tutorials (1).gif" class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[I made an automated blog writer powered by OpenAI and it was terrible]]></title><description><![CDATA[Writing blog articles is one of the most tedious and difficult things I have done. I'm sure a lot of you can relate if you're on Hashnode. If you don't know I also run another blog called Coffee Informer where I write articles about coffee. I've trie...]]></description><link>https://www.blog.edmondhui.com/filler-ai</link><guid isPermaLink="true">https://www.blog.edmondhui.com/filler-ai</guid><category><![CDATA[#week3]]></category><category><![CDATA[4articles4weeks]]></category><category><![CDATA[projects]]></category><category><![CDATA[AI]]></category><category><![CDATA[Artificial Intelligence]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Thu, 01 Sep 2022 18:10:19 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1662055216492/ao-rveGGn.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Writing blog articles is one of the most tedious and difficult things I have done. I'm sure a lot of you can relate if you're on Hashnode. If you don't know I also run another blog called Coffee Informer where I write articles about coffee. I've tried hiring writers to create content for me, but the quality wasn't there. A lot of the time I would hire someone to write an article and have to provide them with an outline, topic, and related articles about the topic. Afterward, I would still have to proofread and edit the articles to may sure they were publishable. I thought "there has to be a better way that is fully automated". <strong>That's when I had the idea to try automating the blog writing process with AI.</strong></p>
<p>With that, <a target="_blank" href="https://www.filler.ai/">filler.ai</a> was born. This was my first attempt trying to create a SAAS product and I definitely learned a lot of things when building the project that I want to revisit in the future.</p>
<p>Currently, it is functional but there are many improvements that need to be made. <strong>You can put in a topic and generate blog subheadings, full blog articles, article ideas, and video scripts. </strong>It does this using OpenAI's GPT-3. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661997670747/RECwyhYsP.png" alt="image.png" class="image--center mx-auto" /></p>
<p><strong>GPT-3 is a language generator that can produce human-like text with different parameters to fine-tune the results.</strong> My goal was to have it generate human-readable blog articles targeting specific SEO keywords in articles that were 1000 - 2000 words long. </p>
<p>I did this by first allowing the user to generate multiple headlines using a topic which GPT-3 would then generate an outline for targeting specific SEO keywords based on the inputted topic. Next GPT-3 would make an article based on the headline generated and then combine it all into a single article. This would be displayed to the user in an editable rich text editor so users can customize and change the article. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661998165573/DVWjaZJ24.png" alt="image.png" class="image--center mx-auto" /></p>
<p>Once the users were happy with the article they could download it as a PDF to send it to an editor or copy and paste it onto their blog. There is a possibility I could add an export as a markdown button in the future. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661998196934/m9Edqonjr.png" alt="image.png" class="image--center mx-auto" /></p>
<h2 id="heading-where-it-all-went-wrong">Where it all went wrong</h2>
<p>When I launched it and a few people used it.<strong> I immediately got feedback about the quality of the articles.
</strong> It also was not getting indexed by Google which was very concerning. These two issues were valuable learning experiences that I will share with you to take into your next project.</p>
<h3 id="heading-problems-with-articles">Problems with Articles</h3>
<p><strong>While the articles may look "readable" the content would be questionable.</strong> A lot of the time the AI could generate an article about a topic and state random incorrect statements as facts. The AI had no knowledge of whether it was right or wrong, and a lot of time it looked very authoritative until you tried fact-checking the article. Then you would realize that the AI had no idea what it was talking about. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662055597384/D-QXKsPbK.gif" alt="unnamed.gif" class="image--center mx-auto" /></p>
<p><strong>The AI would also repeat patterns and make very similar articles. </strong>This is because it was trained on a set of examples and it would reuse patterns in the training data. As a result, different articles would end up looking very similar and may have repeated patterns or phrases.</p>
<p><strong>GPT-3 also does not have any memory of previous articles that it has created. </strong>Suppose you want to generate two different articles about the same topic. The problem is that if you use the same topic with the same headings there is a very high possibility the article that is generated would look very similar to the previous article that was created. </p>
<p>I think there is still a lot of potential for AI-generated articles, but there would need to be a human touch. The article cannot be fully created by AI and would at least need to be edited by someone. </p>
<p><strong>In my opinion, the best use for GPT-3 for blogging at the moment would be creating short sentences about topics to insert into your articles so you don't have to write every single line. </strong>This could help you improve the word count while still looking like a human wrote the article.</p>
<h3 id="heading-not-using-server-side-rendering">Not using server-side rendering</h3>
<p><strong>Another thing that I didn't account for was the lack of server-side rendering because I am using React. </strong>If I could go back and restart the project I would probably use Next.js to have server-side rendering. </p>
<p>Because React does not have server-side rendering Google does not rank it highly since it is responding with JavaScript instead of HTML. JavaScript is slower than HTML and as a result, a slower page will lower the ranking on Google Search. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662055580644/_4sOKQ7B6.gif" alt="sloth-slow.gif" class="image--center mx-auto" /></p>
<p><strong>I think server-side rendering would help grow the website by allowing Google to index the pages better. </strong>I could automatically generate articles that would be posted into the blog article route which would automatically create new blog posts with a press of a button. </p>
<p>The code is very similar and there doesn't seem to be a very big difference between the two. You will still have components, but your pages will be located in a <code>pages</code> folder which would represent a resource and a page for your website. To convert from a simple React app to Next.js app all you would have to do is do a few simple steps:</p>
<ol>
<li>Convert React router links to Next.js links<pre><code><span class="hljs-keyword">import</span> { <span class="hljs-title">Link</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"react-router-dom"</span>;
</code></pre>to:<pre><code><span class="hljs-keyword">import</span> Link <span class="hljs-keyword">from</span> <span class="hljs-string">'next/link'</span>
</code></pre></li>
<li><p>Convert CSS to the Next.js styled-components </p>
</li>
<li><p>Convert code to take advantage of Next.js, for example, this would be using <code>getStaticProps</code> or <code>getServerSideProps</code></p>
</li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p><strong>It was a learning process and it was my first attempt at a commercial product, and the journey definitely isn't over.</strong> The next step would be converting the site over to Next.js and trying to improve the article generation. I'm not giving up and I hope you all follow me on my journey!</p>
<p>If you don't know my story I am a software engineer who used to be a commercial real estate broker in NYC. I quit my job to follow my passions and now I am 2 years into my career as a software engineer and loving it! If you want to know how I became a software engineer in only 3 months you can read that article <a target="_blank" href="https://www.blog.edmondhui.com/software-engineer-in-3-months">here</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1662054945411/UXAmiOIlI.gif" alt="Copy of Thank you for Reading (3).gif" class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[This extension is a programmer's best friend]]></title><description><![CDATA[It's your 10th time searching how to vertically align a div in CSS, and you're clicking the same forum post or w3 school link for the 100th time. We've all been there...
I'm sure that most programmers have used w3 school or stack overflow to quickly ...]]></description><link>https://www.blog.edmondhui.com/a-programmers-best-friend</link><guid isPermaLink="true">https://www.blog.edmondhui.com/a-programmers-best-friend</guid><category><![CDATA[Beginner Developers]]></category><category><![CDATA[tools]]></category><category><![CDATA[4articles4weeks]]></category><category><![CDATA[#week2]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Fri, 26 Aug 2022 03:28:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661484173073/2UxrDHwzE.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It's your 10th time searching how to vertically align a div in CSS, and you're clicking the same forum post or w3 school link for the 100th time. We've all been there...</p>
<p>I'm sure that most programmers have used w3 school or stack overflow to quickly find the answers to any programming question.</p>
<p>I want to show you an extension I use in addition to w3 school and stack overflow that allows me to quickly find the answer to any technical problem I encounter.</p>
<h2 id="heading-grepperhttpswwwcodegreppercom"><a target="_blank" href="https://www.codegrepper.com/">Grepper</a></h2>
<p>Grepper is a Google Chrome extension that shows the top-rated answer by thousands of developers every time you put a question into Google. </p>
<p>It is a community-driven platform so you can contribute as well as see answers from other developers.</p>
<p>For example, if you are wondering how to center a div, this is what comes up in your Google search above any links to pages or blogs.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661484225581/tsRUZRbW5.png" alt="image.png" class="image--center mx-auto" /></p>
<p>This allows you to easily browse multiple alternatives and answers by other developers without having to browse multiple different stack overflow pages to find the same exact answer.</p>
<h2 id="heading-how-to-use-grepper">How to use Grepper</h2>
<p>All you have to do to get started with Grepper is make an account and install the Google Chrome extension.<a target="_blank" href="https://chrome.google.com/webstore/detail/grepper/amaaokahonnfjjemodnpmeenfpnnbkco">Here is a link to the chrome web store download page</a>.</p>
<p>Once you have your account all you have to do is use Google as you normally would and answers from developers will show up at the top of the Google search results.</p>
<p>If you want to contribute you can go to the <a target="_blank" href="https://www.codegrepper.com/app/answer.php">answer page</a> and answer questions that other developers have searched in google, but do not have any submissions yet. By doing this you can help the community and earn points while doing so!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661484266130/mbxoRmxTA.png" alt="image.png" class="image--center mx-auto" /></p>
<p>There are belts that you can earn as you answer questions. You can improve your belt by writing answers that are read by other people. Currently, I am a brown belt at the time of writing this post and I have helped 66004 Developers find answers to 117464 problems.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661483640373/to_YPmy6S.png" alt="image.png" class="image--center mx-auto" /></p>
<h2 id="heading-why-you-should-use-grepper">Why you should use Grepper</h2>
<p>By using Grepper there have been multiple times that I found answers to my questions without having to dig through different pages. I think that alone is enough for developers to at least give it a shot. I am not affiliated at all with Grepper. I think it is a great tool that developers should have in their pockets.</p>
<p>You can also earn points that you can redeem for NFTs. I am not very into crypto, but it is another gamification of the coding process that can make it enjoyable to use. </p>
<p>Grepper can also help progress your career. It's possible that a recruiter or software engineer sees your answer and connects with you. Having more reach is always beneficial. You never know who sees your answers and the power of serendipity. </p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This is my submission for Week 2 of 4 Articles in 4 Weeks I hope this post helps you! Please <a target="_blank" href="https://www.codegrepper.com/profile/edmond-hui">follow me on Grepper</a> if you decide to try it out. Thank you for reading!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661484315978/mcW3hF9Jf.png" alt="Beginner Developer Tutorials (1).png" class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[How I got my first developer job out of bootcamp]]></title><description><![CDATA[Getting my first job in the tech industry was one of the hardest things I've done. One tip I have for anyone trying to make the switch is that it's a numbers game. According to my career coach, it takes on average 600 job applications for bootcamp gr...]]></description><link>https://www.blog.edmondhui.com/first-developer-job</link><guid isPermaLink="true">https://www.blog.edmondhui.com/first-developer-job</guid><category><![CDATA[4articles4weeks]]></category><category><![CDATA[week1]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[motivation]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Tue, 23 Aug 2022 00:36:22 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1661214239248/eRO585UbF.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Getting my first job in the tech industry was one of the hardest things I've done. </strong>One tip I have for anyone trying to make the switch is that it's a numbers game. According to my career coach, it takes on average 600 job applications for bootcamp graduates with no prior experience in tech to land their first developer position.</p>
<p><strong>It takes a mindset switch from growth and learning to sales and marketing.</strong> Once you feel like you are ready to start applying I recommend applying to as many jobs as you can and trying to get to that 600 number as quickly as possible. </p>
<p>When I was applying to jobs, I completely stopped learning new things and focused on honing my interview skills through leetcode and applying to as many jobs as possible. I did something called creative outreach which is basically the same as networking. I connected to as many people on LinkedIn as I could and tried to get meetings and referrals. </p>
<p>Make sure you keep your Linkedin headline and links up to date with projects so when recruiters see your profile it is immediately obvious you are a software engineer. Since you don't have prior experience it will be very easy to screen out your profile. Your profile headline should say "Software Engineer" even if you don't have any experience yet. Link any projects you have done and include a link to your portfolio site and Github profile on your projects. Check this out to <a target="_blank" href="https://www.blog.edmondhui.com/how-to-create-portfolio-website">learn how to build a quick portfolio site</a> for the job application process.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661214616004/SeOojqcPV.png" alt="image.png" class="image--center mx-auto" /></p>
<p><strong>The most important advice I can give is to stay focused and schedule your time. </strong> You have to work efficiently. You want to get your first developer job as quickly as you can. If you slow down and take a vacation, it is very easy to fall off the wagon. If you stop practicing and coding it is very easy to fall into old routines and forget things.</p>
<h2 id="heading-staying-organized">Staying Organized</h2>
<p>When I was in the job hunting phase, <strong>I used a technique called time boxing</strong>. This is a time management technique that made sure I used every day effectively during the job search. According to Parkinson's Law, "Work expands so as to fill the time available for its completion". </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661214687227/EaF1Zg88B.gif" alt="mike-tyson-uppercut.gif" class="image--center mx-auto" /></p>
<p>The concept was first introduced by James Martin, the author of the book Rapid Application Development, as a part of agile software development. To do it, allot blocks of time for a specific activity and do as much as you can during that time. Once that time is over you can stop working on it. </p>
<p>You will surprise yourself with how much work you can do in such a short amount of time. For example, if you allot 1 hour for leet code questions, you may be able to finish 2 or 3 questions. This is much better than planning on doing 1 leetcode question then switching gears and doing something else. </p>
<h2 id="heading-creative-outreach">Creative Outreach</h2>
<p>My strategy for creative outreach was to connect with people on LinkedIn and attempt to get a meeting to learn about their company and grow my network. <strong>I actually got my first job through a LinkedIn connection!</strong></p>
<p>This also helps you in the future as well because if you expand your network you'll see posts from other developers when their companies are hiring. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661214697632/cIac7Z246.gif" alt="link-counsciousness.gif" class="image--center mx-auto" /></p>
<p>I used a tool called <a target="_blank" href="https://phantombuster.com/">PhantomBuster</a>. It is an automated lead generation tool. What I did was scrape my 2nd and 3rd degree network for any recruiters or software engineers. Then I used PhantomBuster to connect with them with a message template asking for a meeting to learn about their companies. I did not ask them for a job immediately.</p>
<p>Another tool I used was called <a target="_blank" href="https://www.mixmax.com/">MixMax</a>. They are an email tracking extension that connects with your Gmail. I liked making templates to help me quickly send emails. It also tracks when people open your emails so you can know they are seeing your emails. </p>
<p>This is where my previous experience doing commercial real estate sales came in handy. Just like in sales and brokerage, getting a job is a numbers game. Keep working hard and eventually, your funnel will land you multiple offers!</p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Thank you for reading my article. This was my submission to the 4 articles in 4 weeks challenge. Please leave me a comment if you're interested in learning more about automated lead generation or creative outreach. <strong>I gave a Q&amp;A about how I landed a job in under 1 month at App Academy</strong> before I graduated. It goes over a lot of the same topics as this article. You can watch that <a target="_blank" href="https://us02web.zoom.us/rec/play/KsW9DgChwDGBfr5VcWZnPf9M9t5HxxSN1BJeWs5_w4x7rp-suPpF5AYicSgi5aIP2wlj7a_T2C2gDx8Z.Za8hDewocuW7ZPBy?continueMode=true&amp;_x_zm_rtaid=stgaThzhQLqucr4MAcIltA.1660861368652.778f5ff276a667350419ea1c01d287de&amp;_x_zm_rhtaid=70&amp;fbclid=IwAR24mKtAZNpuRN36DAmKyV2DjW0J6cIG2byL5ZLUm7LgDhnx3vRT66txm_o">here</a>. The passcode is 2s=Pea3=. The recording starts 6 minutes in, but I think it will help you if you're trying to break into tech.</p>
<p>If you don't know my story, <a target="_blank" href="https://www.blog.edmondhui.com/software-engineer-in-3-months">I am a bootcamp graduate who quit my job to become a software engineer</a>. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1661214230293/MSTbYxtvW.gif" alt="Copy of Thank you for Reading (2).gif" /></p>
]]></content:encoded></item><item><title><![CDATA[How to use Git and GitHub for beginners]]></title><description><![CDATA[Git is one of the most useful tools that any developer has up their sleeves. No matter what kind of development you are doing, understanding how to use Git will be a valuable asset that can save your butt.
There is often a lot of anxiety with Git, bu...]]></description><link>https://www.blog.edmondhui.com/how-to-use-git</link><guid isPermaLink="true">https://www.blog.edmondhui.com/how-to-use-git</guid><category><![CDATA[GitHub]]></category><category><![CDATA[Git]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Developer]]></category><category><![CDATA[General Programming]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Thu, 18 Aug 2022 15:05:09 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1660795186956/6er_k0mAU.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Git is one of the most useful tools that any developer has up their sleeves. </strong>No matter what kind of development you are doing, understanding how to use Git will be a valuable asset that can save your butt.</p>
<p>There is often a lot of anxiety with Git, but if you understand Git and everything you can do with it, there is no reason to fear.</p>
<p>I will do my best to explain Git, how to use it, and provide a list of all the most common commands that you may need to use. Bookmark this page for easy access to the most useful Git commands.</p>
<h2 id="heading-what-is-git">What is Git?</h2>
<p>Git is a version control system. It tracks any changes made to files in a directory and keeps a record of previous versions of these files. This allows you to easily revert code changes with bugs. It also enables collaboration. Multiple people can work on the same code and use Git to merge their code into one branch once they are finished. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660795026439/G1rZ7Of2J.png" alt="git-branches-merge.png" class="image--center mx-auto" /></p>
<p><strong>It is extremely important to learn how to use Git if you want to land a job in the tech industry.</strong> In any professional setting, you will probably be using some form of Git to collaborate with other members of your team. In my personal experience, both the companies I worked at used GitHub.</p>
<p>Usually, Git stores your files locally, but with GitHub, you can have an online location where your files and version history are stored. When working with multiple people this is a godsend, although merge conflicts make me sad.</p>
<h2 id="heading-conventional-commits-and-other-git-best-practices">Conventional Commits and other Git best practices</h2>
<p><strong>When using Git it is important to realize that you aren't doing it for yourself.</strong> Git best practices are important because you will be working with other people and they need to be able to understand and follow what you are doing.</p>
<p><strong>Make sure you are committing often. </strong>Having a history of your code is helpful for testing and bailing you out if something happens to any unsaved files. It's like saving at a checkpoint in a video game, you can always just go back to a save point if you reach a dead end. </p>
<p><strong>Create multiple branches and don't always directly push onto master or main.</strong> This is important once you start collaborating with others. It prevents you from pushing up buggy code which gives a clear distinction between what is a work in progress and what is tested and merged into the main branch.</p>
<p>I like following <a target="_blank" href="https://www.conventionalcommits.org/en/v1.0.0/">Conventional Commits</a> which is a convention to name which helps you create an explicit commit history. This makes it easier to read and allows you to use automated tools such as automating CHANGELOGs. You should check out the website and read about how it works. If you think it fits your coding style feel free to adopt it into your toolbox!</p>
<h2 id="heading-working-with-others">Working with others</h2>
<p>I mentioned previously that you will need to work with others when using Git. This is where Git really shines because of how easily it lets you asynchronously work on the same code someone else is.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660795016427/z6AfhQ2In.png" alt="a0f60344-2db5-4f1c-bde7-2abd7fe8b96c.png" class="image--center mx-auto" /></p>
<p><strong>Pull requests are the preferred way of reviewing and merging code.</strong> Usually once you are finished with a feature on your local branch you will push up the code to the remote repository (Github). Then you will open up a pull request/merge request. This notifies others that your code needs to be reviewed. Usually, collaborators will leave comments that you will need to fix. Once approved you can merge your code onto the main branch.</p>
<p><strong>Resolving merge conflicts is not as big of a deal as it may seem.</strong> It will happen all the time because multiple people will be touching the same files. This only happens with Git cannot automatically merge 2 branches. Usually, what you have to do is check with the other developer that made the change and collaborate to make a solution that works for both of you.</p>
<p><strong>Branching strategies are the last part of working with others.</strong> There will usually be an already established strategy when you are joining a company. The most common strategies are single branch, feature branching, and <a target="_blank" href="https://nvie.com/posts/a-successful-git-branching-model/">git flow</a>. Single branch strategies are usually for when you are not working with others and pushing all changes to a single branch. Feature branching strategies create new branches for each new feature or bug, then merge them into the main branch. Git flow has 2 ongoing branches, usually main and develop. Features are developed on the develop branch and then merged into the main branch as a release. </p>
<h2 id="heading-my-most-useful-git-commands">My most useful Git commands</h2>
<h3 id="heading-git-init">git init</h3>
<p>This command creates a new git repository and it is usually one of the first things you do when starting a new project. </p>
<h3 id="heading-git-remote-add-remote-name-repository-name-or-url">git remote add <code>remote-name</code> <code>repository-name or url</code></h3>
<p>This is usually the second command you would run when creating a new project. Adds a remote tracking branch and <code>remote-name</code> is usually origin. You usually put the repository url after the remote-name. </p>
<p>Example: <code>git remote add origin https://github.com/user/repo.git</code></p>
<h3 id="heading-git-status">git status</h3>
<p>Checks your current changes in your directory and shows you what has been staged, what hasn't, and any new files. </p>
<h3 id="heading-git-add-directory">git add <code>directory</code></h3>
<p>Adds the files in the specified directory to be staged for the next commit. You can specify files to add through the directory. You can do this command as many times as you like and add as many files as you like to be staged before you commit. </p>
<p>Example: <code>git add .</code> or <code>git add ./folder</code></p>
<h3 id="heading-git-commit-m-commit-message">git commit -m "<code>commit-message</code>"</h3>
<p>This command commits to staging with a message. Commits are saved changes and explain to others what you have done in the project. Good commit messages are an important way to provide useful information in case you did something wrong and need to look back to previous changes to revert code. </p>
<p>Below this list, you will find a short guide to conventional commits.</p>
<p>Example: </p>
<p>Bad commit <code>git commit -m "do the thing"</code></p>
<p>Good commit <code>git commit -m "BREAKING CHANGE: 'extends' key in config file is now used for extending other config files"</code></p>
<h3 id="heading-git-commit-am-commit-message">git commit -am "<code>commit-message</code>"</h3>
<p>Combines the top 2 commands and allows you to add and commit to staging at once. This only works on files that Git is already tracking. If you added new files to your repository you will still have to do <code>git add directory</code></p>
<p>Example: <code>git commit -am "feat: Zhu Li, do the thing!"</code></p>
<h3 id="heading-git-branch-branch-name">git branch <code>branch-name</code></h3>
<p>Creates a new branch with your branch name. This doesn't switch you to your new branch, it just creates it. Branching is great because it allows you to create a branch from the main source code to work on code in an isolated location.</p>
<p>Example: <code>git branch new-feature</code></p>
<h3 id="heading-git-checkout-branch-name">git checkout <code>branch-name</code></h3>
<p>Updates your files in your local repository to match the files on the branch in the tree. Any changes on you make to your code will bet kept on this branch and can be commited to the branch. </p>
<p>Example: <code>git checkout old-feature</code></p>
<h3 id="heading-git-checkout-b-branch-name">git checkout -b <code>branch-name</code></h3>
<p>This combines the top 2 commands by creating a new branch and then switching to it. Equivalent to using <code>git branch branch-name</code> then <code>git checkout branch-name</code>.</p>
<p>Example: <code>git checkout -b feature</code></p>
<h3 id="heading-git-branch-d-branch-name">git branch -D <code>branch-name</code></h3>
<p>Deletes a branch in your local Git. You should typically do this after you merge in your code on your branch to the main branch. You can always recreate your branch in the future if you need to. Git will also tell you if there are unmerged changes on your branch so you should not be afraid to delete old branches with merged code. </p>
<p>Example: <code>git branch -D merged-branch</code></p>
<h3 id="heading-git-reset-hard-commit-hash">git reset --hard <code>commit-hash</code></h3>
<p>Resets your local files to the specific commit-hash. This is a potentially dangerous command if you have uncommitted changes. Any untracked files or directories will be discarded and you will not be able to recover them</p>
<p>Example: <code>git branch -D 4c85240745b8ae1fe405ad5893ad66cd2a8afee3</code> or <code>git branch -D HEAD</code> (resets your files to HEAD)</p>
<h3 id="heading-git-push">git push</h3>
<p>Pushes your code from your local repository to the remote repository. If you are using GitHub the files in the repository will reflect the same files as your local repository after pushing.</p>
<h3 id="heading-git-push-force">git push --force</h3>
<p>This is the same command as above but it allows you to rewrite the history on the remote repository with your local history. When doing this you must be careful because it may be easy to delete history and code accidentally, especially if you are working with other people. </p>
<h3 id="heading-git-push-set-upstream-remote-name-branch-name-repository-name">git push --set-upstream <code>remote-name</code> <code>branch-name</code> <code>repository-name</code></h3>
<p>Upstream branches are the remote repository's way of tracking your local branch. They are also called the remote tracking branch. You have to set up an upstream branch before you start pushing your code to the remote repository. </p>
<p>Example: <code>git push --set-upstream origin new-feature</code></p>
<h3 id="heading-git-push-u-remote-name-branch-name-repository-name">git push -u <code>remote-name</code> <code>branch-name</code> <code>repository-name</code></h3>
<p>This does the exact same thing as the above command</p>
<p>Example: <code>git push -u origin new-feature</code></p>
<h3 id="heading-git-fetch">git fetch</h3>
<p>Fetch downloads commits, files, and refs from a remote repository on your local repo. It allows you to see what others have been working on and lets you test their code on your local repository.</p>
<h3 id="heading-git-pull">git pull</h3>
<p>Incorporates changes from a remote repository into the current branch. If your current branch is behind the remote, then by default it will fast-forward the current branch to match the remote. </p>
<h3 id="heading-git-diff-commit-hash-source-commit-hash-destination">git diff <code>commit-hash-source</code> <code>commit-hash-destination</code></h3>
<p>Diff shows the difference between a commit and one of the commit's ancestors. You use the commit hash in the command to specify which commits to compare.</p>
<p>Example: <code>git diff 0da94be 59ff30c</code></p>
<h3 id="heading-git-merge-branch-name">git merge <code>branch-name</code></h3>
<p>Incorporates any changes from a different branch into your current branch. Git will attempt to automatically merge any commits for you. However, if there are files that are changed by both branches you will need to manually resolve any conflicts.</p>
<h3 id="heading-git-cherry-pick-commit-hash">git cherry-pick <code>commit-hash</code></h3>
<p>Takes the changes from a specific commit and adds them to your current branch. You specify the commit by the commit hash. This is great in a team setting where you can cherry-pick specific pieces of code to test or use in your own local repository.</p>
<p>Example: <code>git cherry-pick 59ff30c</code></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Before you can collaborate with other developers knowing how to use Git is a prerequisite. That means if you're trying to break into the tech industry learning how to use Git is imperative. </p>
<p>Now that you know how to use Git the next thing you should do is create a developer portfolio showcasing all your projects. You can read my guide on that <a target="_blank" href="https://www.blog.edmondhui.com/how-to-create-portfolio-website">here</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660793024455/15zjWpzcW.gif" alt="Thank you for Reading" class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[How to create portfolio website with custom domain using Github pages]]></title><description><![CDATA[In the current job market, I believe that every new developer should have a portfolio showcasing projects they have built. As someone who doesn't have experience, a portfolio is how you can stand out amongst the thousands of new graduates from colleg...]]></description><link>https://www.blog.edmondhui.com/how-to-create-portfolio-website</link><guid isPermaLink="true">https://www.blog.edmondhui.com/how-to-create-portfolio-website</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Programming Blogs]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[HTML5]]></category><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Thu, 11 Aug 2022 13:44:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1660186272642/OXfp5kRh6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the current job market,<strong> I believe that every new developer should have a portfolio showcasing projects they have built.</strong> As someone who doesn't have experience, a portfolio is how you can stand out amongst the thousands of new graduates from college and bootcamps. I built a portfolio just like this when I graduated from bootcamp and got a job in 3 months. You can read <a target="_blank" href="https://www.blog.edmondhui.com/software-engineer-in-3-months">my story here</a>.</p>
<p>Even if the recruiter or hiring manager doesn't read everything on your website, a quick scan is enough to set you apart from everyone else who doesn't have a portfolio site. </p>
<p>If you are a beginner developer there is no reason why you shouldn't have your own site. It's free, simple, and quick to set up with Github pages. You can even add a custom domain for around $15 a year with no monthly hosting fees for some extra pizazz.</p>
<p><strong>Here is a step-by-step guide on how to make your own portfolio website.</strong> This tutorial will be for complete beginners or people who do not know how to code who want to create their own portfolio websites. This will be extremely easy to follow, and I would encourage experienced developers to skip steps you already know how to do. You will not need to have any coding skills to follow most of this tutorial. </p>
<h2 id="heading-setting-up-your-github-repo-for-your-page">Setting up your Github repo for your page</h2>
<p>First, you have to set up your Github repository which is where we will push all of our code. </p>
<p>My next article is a complete guide for git best practices and using git professionally. You can read my <a target="_blank" href="https://www.blog.edmondhui.com/how-to-use-git">Git and Github tutorial here</a>.</p>
<ol>
<li>Click the "+" button on the top right of the page on Github. There should be a dropdown that shows up, then press "New Repository".
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660093109889/lo6pTfjfZ.png" alt="Screen Shot 2022-08-09 at 8.56.23 PM.png" class="image--center mx-auto" /></li>
<li>Use the "Select an owner" dropdown to choose which account will own the repository.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660093797348/ZYGh2LImA.png" alt="Screen Shot 2022-08-09 at 9.09.22 PM.png" class="image--center mx-auto" /></li>
<li>Name your repository using this naming scheme<code>&lt;user&gt;.github.io</code>. So since my user name is edmondthui I will name my repository <code>edmondthui.github.io</code>.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660094029966/dCPS0kuwl.png" alt="Screen Shot 2022-08-09 at 9.13.40 PM.png" class="image--center mx-auto" /></li>
<li>Make your repository visibility public, check whether you want a read me, and then create your repository.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660094331092/-lXJP8J0g.png" alt="Screen Shot 2022-08-09 at 9.18.11 PM.png" class="image--center mx-auto" /></li>
</ol>
<h2 id="heading-setting-up-git-locally">Setting up Git locally</h2>
<p>Now that we're past the boring part we can open up our IDE. I like using VS Code but you can use any editor you like. </p>
<ol>
<li>First we have to set up our Github repository locally. In a new directory type <code>git init</code> into the terminal to start tracking your current directory with git. 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660165506041/jT6lpu0ef.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Copy the quick setup link from Github and run <code>git remote add origin &lt;your link here&gt;</code>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660165662820/3yzuSd7Fp.png" alt="image.png" class="image--center mx-auto" />
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660165719030/2e3VS-5xe.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Optional - you can rename your branch to "main" by running <code>git branch -M main</code>. GitHub uses "main" as the name of your primary branch. Git still defaults your branch to be called "master".</li>
</ol>
<h2 id="heading-choosing-a-template-for-your-portfolio-website">Choosing a template for your portfolio website</h2>
<p>We will be using a template to make our website. <strong>I believe that most developers should use a template when building their personal portfolios. </strong></p>
<p>The amount of time it takes to make a beautiful website is not worth it, especially since this guide is targeting developers who are trying to break into the industry to get their first tech job. There are more important things to do, such as portfolio projects and improving your interviewing skills. </p>
<p>What we are looking for is a template that has the following things:</p>
<ul>
<li>An easy-to-customize setup</li>
<li>Eye-catching responsive design</li>
<li>A contact form</li>
</ul>
<p>You can browse different free themes <a target="_blank" href="https://themewagon.com/theme-tag/portfolio-template/?swoof=1&amp;pa_price=free&amp;paged=1&amp;really_curr_tax=398-product_tag">here</a> and choose what you think would work the best for yourself. I will be using this theme called <a target="_blank" href="https://themewagon.com/themes/best-quality-free-portfolio-resume-bootstrap-template-download-profile/">Profile</a> for this example.</p>
<ol>
<li>Download your theme and unzip the files into the folder where you created your git repository.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660167063951/5dHcq1FwT.png" alt="image.png" class="image--center mx-auto" /></li>
<li>You should see a file called <code>index.html</code>. This will be the file we will be editing and customizing with all your information. Click on it and you should be able to edit the contents of that file.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660167129982/AYSisS8I9.png" alt="image.png" class="image--center mx-auto" /></li>
<li>You can view your progress by opening the <code>index.html</code> file in chrome by double-clicking it. You will want to inspect your changes ever so often to make sure you aren't breaking anything.</li>
<li>We will only be editing the information between opening and closing HTML tags. <strong>The vast majority of tags must be opened <code>&lt;tag&gt;</code> and closed <code>&lt;/tag&gt;</code> with the element information such as a title or text resting between the tags.</strong> You can change the information between the tags to whatever text you want to display. Replace all the information on the index page template with your information. Make sure you do not accidentally delete any tags or change the structure of the file.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660167350654/E18hkivAq.png" alt="image.png" class="image--center mx-auto" />
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660167371389/OAHWTR2Zw.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Update any links with your personal links. You can do this by replacing wherever it has <code>href="&lt;your link here&gt;"</code>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660169129691/59iLyioXg.png" alt="image.png" class="image--center mx-auto" /></li>
<li>If you need to delete any elements find them in your editor and delete both the tags containing all the information you want to delete.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660169201211/EBFgaEFp9.png" alt="image.png" class="image--center mx-auto" />
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660169221433/Fzf9AZfD7.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Replace any images in your image folder with new files making sure you keep the names of the files the same.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660169324412/aUcczaZpA.png" alt="image.png" class="image--center mx-auto" /></li>
</ol>
<p>Once you are happy with how your page looks you're ready for the next step.</p>
<h2 id="heading-pushing-your-code-to-github">Pushing your code to Github</h2>
<p>The next step is getting all your code to Github so we can use Github pages to create a static site so people can see your website. </p>
<ol>
<li>Run <code>git status</code>, this should show all the changes you have made. Confirm there are changes before continuing.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660169883092/HHFVJ7eeW.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Run <code>git add .</code> to add all the changes from your directory to be staged for the next commit. You can rerun <code>git status</code> to make sure your files have been added.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660169998336/9ASagrBF0.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Now that you have staged your changes you have to commit them by running <code>git commit -m "&lt;any message here&gt;"</code>
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660170494450/jsn3nTybG.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Push your code to Github by running <code>git push origin main</code> if you changed your branch name to main or <code>git push origin master</code> if you haven't changed your branch name.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660170336173/zJtEh2pPv.png" alt="image.png" class="image--center mx-auto" /></li>
<li>You should now see the code in your Github repository!</li>
</ol>
<h2 id="heading-creating-a-github-page-for-your-repository">Creating a Github page for your repository</h2>
<p>The last step is to make a Github page. Your repository needs to be public if you want to have a Github page with a free account.</p>
<ol>
<li>Go to settings for your repository on Github on the top right of the page. 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660173239251/9sVaDTW11.png" alt="Screen Shot 2022-08-10 at 7.12.45 PM.png" class="image--center mx-auto" /></li>
<li>Click pages on the left side of the settings page.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660173293725/YjlocBizw.png" alt="Screen Shot 2022-08-10 at 7.14.31 PM.png" class="image--center mx-auto" /></li>
<li>Select the <code>main</code> or <code>master</code> branch as the branch for your page, then click save.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660173429611/X1xrb-CEp.png" alt="Screen Shot 2022-08-10 at 7.16.01 PM.png" class="image--center mx-auto" /></li>
<li>Click the checkbox to enforce https.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660173508892/Z0NAsYnrH.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Thats it! Your site should be live. <a target="_blank" href="http://edmondhui.com/demo.github.io/">Here</a> is a link to the demo site that I made in this tutorial.</li>
</ol>
<h2 id="heading-optional-adding-a-custom-domain-and-sitemap-for-seo">Optional - Adding a custom domain and sitemap for SEO</h2>
<p><strong>Custom domains are a great way to build a brand around yourself.</strong> It is another factor that can help set you apart from other developers. I do the exact same thing with my blog at https://www.blog.edmondhui.com/.</p>
<h3 id="heading-using-a-custom-domain-with-a-github-page">Using a custom domain with a Github page</h3>
<ol>
<li>On the same page in the repository settings there is a field called custom domain. If you own a domain you can input it there. You can buy a domain on <a target="_blank" href="https://godaddy.com/">Godaddy</a> or <a target="_blank" href="https://domains.google/">Google Domains</a> for around $15. Then, click save. 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660173986426/VqffGaWOh.png" alt="image.png" class="image--center mx-auto" /></li>
<li>Next go to your PROFILE settings and click pages.
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660174244311/XYwmITESG.png" alt="Screen Shot 2022-08-10 at 7.30.12 PM.png" class="image--center mx-auto" />
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660174288377/bOa5q5Y38.png" alt="Screen Shot 2022-08-10 at 7.31.00 PM.png" class="image--center mx-auto" /></li>
<li>Click "add domain" and then input your domain.</li>
<li>Now go to manage DNS wherever you purchased your domain and add the A records you got from Github. You can copy and paste them here:<pre><code>185<span class="hljs-selector-class">.199</span><span class="hljs-selector-class">.108</span><span class="hljs-selector-class">.153</span>
185<span class="hljs-selector-class">.199</span><span class="hljs-selector-class">.109</span><span class="hljs-selector-class">.153</span>
185<span class="hljs-selector-class">.199</span><span class="hljs-selector-class">.110</span><span class="hljs-selector-class">.153</span>
185<span class="hljs-selector-class">.199</span><span class="hljs-selector-class">.111</span><span class="hljs-selector-class">.153</span>
</code></pre><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660224206625/_eSwTA0GR.png" alt="Screen Shot 2022-08-11 at 9.23.09 AM.png" class="image--center mx-auto" /></li>
</ol>
<h3 id="heading-using-github-actions-to-automatically-create-a-sitemap">Using Github actions to automatically create a sitemap</h3>
<p>If you want to try to rank your portfolio site you will need to submit a sitemap to Google to index your website. To do this you will need to use a Github action.</p>
<ol>
<li>In your repository click "Actions"
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660183669059/3P84AYmtE.png" alt="Screen Shot 2022-08-10 at 10.07.11 PM.png" class="image--center mx-auto" /></li>
<li>Click "New workflow" to create an automated action
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660183759221/UwptHXOw-.png" alt="Screen Shot 2022-08-10 at 10.08.17 PM.png" class="image--center mx-auto" /></li>
<li>Then click set up a workflow yourself
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660183828769/-ImO9l1zf.png" alt="Screen Shot 2022-08-10 at 10.09.33 PM.png" class="image--center mx-auto" /></li>
<li><p>In the workflow editor paste this code. Change the branch name in the code to match whatever is your primary branch. Currently, it is set to <code>[main]</code>. You will also have to change the base-url-path to point to your url.</p>
<pre><code><span class="hljs-attribute">name</span>: Generate xml sitemap
<span class="hljs-attribute">on</span>:
<span class="hljs-attribute">push</span>:
 <span class="hljs-attribute">branches</span>: [main]
<span class="hljs-attribute">jobs</span>:
<span class="hljs-attribute">sitemap_job</span>:
 <span class="hljs-attribute">runs-on</span>: ubuntu-latest
 <span class="hljs-attribute">name</span>: Generate a sitemap

 <span class="hljs-attribute">steps</span>:
   - <span class="hljs-attribute">name</span>: Checkout the repo
     <span class="hljs-attribute">uses</span>: actions/checkout<span class="hljs-variable">@v2</span>
     <span class="hljs-attribute">with</span>:
       <span class="hljs-attribute">fetch-depth</span>: <span class="hljs-number">0</span>

   - <span class="hljs-attribute">name</span>: Generate the sitemap
     <span class="hljs-attribute">id</span>: sitemap
     <span class="hljs-attribute">uses</span>: cicirello/generate-sitemap<span class="hljs-variable">@v1</span>.<span class="hljs-number">8.4</span>
     <span class="hljs-attribute">with</span>:
       <span class="hljs-attribute">base-url-path</span>: <span class="hljs-attribute">https</span>:<span class="hljs-comment">//edmondhui.com/</span>
       <span class="hljs-attribute">include-pdf</span>: false

   - <span class="hljs-attribute">name</span>: Output stats
     <span class="hljs-attribute">run</span>: |
       echo <span class="hljs-string">"sitemap-path = ${{ steps.sitemap.outputs.sitemap-path }}"</span>
       echo <span class="hljs-string">"url-count = ${{ steps.sitemap.outputs.url-count }}"</span>
       echo <span class="hljs-string">"excluded-count = ${{ steps.sitemap.outputs.excluded-count }}"</span>

   - <span class="hljs-attribute">name</span>: Create Pull Request
     <span class="hljs-attribute">uses</span>: peter-evans/create-pull-request<span class="hljs-variable">@v3</span>.<span class="hljs-number">12.0</span>
     <span class="hljs-attribute">with</span>:
       <span class="hljs-attribute">title</span>: <span class="hljs-string">"Automated sitemap update"</span>
       <span class="hljs-attribute">body</span>: &gt;
         Automated changes. Sitemap updated by 
         the [generate-sitemap](<span class="hljs-attribute">https</span>:<span class="hljs-comment">//github.com/cicirello/generate-sitemap) </span>
         GitHub action.
       <span class="hljs-attribute">commit-message</span>: <span class="hljs-string">"Automated sitemap update."</span>
       <span class="hljs-attribute">author</span>: Edmond Hui &lt;edmond.t.hui<span class="hljs-variable">@gmail</span>.com&gt;
       <span class="hljs-attribute">committer</span>: Edmond Hui &lt;edmond.t.hui<span class="hljs-variable">@gmail</span>.com&gt;
       <span class="hljs-attribute">branch</span>: create-pull-request/sitemap
       <span class="hljs-attribute">delete-branch</span>: true
</code></pre></li>
<li>Click "Start commit" and "Create new file" to create this Github action. This will run every time you push to either "main" or "master".
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660184223660/mwBhOkL74.png" alt="Screen Shot 2022-08-10 at 10.13.50 PM.png" class="image--center mx-auto" /></li>
<li>Now you can go to <a target="_blank" href="https://search.google.com/search-console/about">Google Search Console</a> and add your sitemap to your property. 
<img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660184324919/J3fa9-ym6.png" alt="Screen Shot 2022-08-10 at 10.18.29 PM.png" class="image--center mx-auto" /></li>
</ol>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Congratulations on making it to the end of the article! Hopefully, you will have your very own portfolio site that you can proudly share.</p>
<p><strong>Even if you are not on the job hunt, having a personal portfolio website is extremely useful.</strong> Portfolios can help you professionally or help build your brand. For entrepreneurs, this can unlock opportunities and help you find business partners or investors.</p>
<p>I hope you enjoyed this beginner's guide to creating a personal portfolio. If you are a beginner developer I recommend reading my article about <a target="_blank" href="https://www.blog.edmondhui.com/self-study-or-coding-bootcamp">whether you should join a bootcamp or self study</a>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1660186835073/VX5YZoijB.gif" alt="Thank you for Reading.gif" class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[Should you self study or join a coding bootcamp?]]></title><description><![CDATA[My name is Edmond Hui and I am a coding bootcamp alumnus, and I'm here to tell you everything you need to know about diving into tech. If you haven't read my journey about becoming a software engineer, I share my secrets about how I attended a coding...]]></description><link>https://www.blog.edmondhui.com/self-study-or-coding-bootcamp</link><guid isPermaLink="true">https://www.blog.edmondhui.com/self-study-or-coding-bootcamp</guid><category><![CDATA[Web Development]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[Learn Code Online]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[Programming Blogs]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Fri, 05 Aug 2022 03:59:30 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1659667408316/1dsSxRUnw.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>My name is Edmond Hui and I am a coding bootcamp alumnus, and I'm here to tell you everything you need to know about diving into tech. If you haven't read my <a target="_blank" href="https://www.blog.edmondhui.com/software-engineer-in-3-months">journey about becoming a software engineer</a>, I share my secrets about how I attended a coding bootcamp and successfully became a software engineer in 3 months.</p>
<p>As someone who recently abandoned his career to become a software engineer, I want to share my first-hand experience transitioning into tech to inspire new developers and help them make informed decisions.</p>
<p>If you are thinking about becoming a software engineer you probably have many questions. I'll try to answer the most common ones with my personal perspective and a modern lens as someone who attended and graduated from a coding bootcamp during the Covid-19 pandemic. </p>
<h2 id="heading-the-most-important-step-for-success-making-a-plan">The most important step for success, making a plan</h2>
<p>You may have heard that becoming a software engineer is an easy way to increase your income. Many of my friends told me, "just learn how to code" as an easy way to secure the bag. When I started my coding journey, I was not prepared for the amount of work that was required to make the transition into tech. </p>
<p>Becoming a software engineer through coding bootcamps may not even be possible depending on your current situation. Some people may not be able to dedicate the time required to succeed and may need to take a different route. It definitely isn't as easy as everyone makes it out to seem. <strong>If it were that easy, then it wouldn't be valuable.</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659666766000/5rlNUKeYm.gif" alt="life-goals.gif" class="image--center mx-auto" /></p>
<p>Basic programming skills are easy to pick up. I learned some code at a young age and was always interested in tech. I even took multiple intro programming courses and an advanced placement computer science course in high school. </p>
<p>When you get into the job market, companies aren't looking for warm bodies that know how to code. They are looking for a specific person with a niche skillset who can help solve problems they are facing. This comes with experience and niche knowledge about coding languages and their relationships with other libraries and frameworks. </p>
<p>This is where many bootcamps fall short. Bootcamps have a hard time teaching the idiosyncrasies of software engineering. You can only learn this through making mistakes and coding without guard rails. </p>
<p><strong>This is why it is extremely important to continuously learn as a software engineer. </strong></p>
<p>Do extensive research before pulling the trigger because once you start learning how to code, you have to be fully committed. People who think it will be enough to code part-time <strong>WILL NOT SUCCEED.</strong> You will have to sacrifice to make this switch. Whether this is quitting your job, not going out on weekends, etc. You will have to be prepared to make changes in your lifestyle to put aside some time to study or join a bootcamp.</p>
<p><strong>You have to put in the time.</strong></p>
<h2 id="heading-should-you-do-a-bootcamp">Should you do a bootcamp?</h2>
<p>According to the <em>Career Karma 2021 State of the Bootcamp Market Report</em>, <strong>the average coding bootcamp cost is $11,272. </strong>Many bootcamps have payment plans that can help you stomach this cost. At App Academy, I did not have to pay for my tuition until I landed a job. App Academy also offers a discount for students that want to pay upfront.</p>
<p>According to the <em>Council on Integrity in Results Reporting (CIRR)</em>, <strong>79 percent of bootcamp grads find a job within 180 days of completing the program. </strong>This data is based on reports from 46 different coding bootcamps. Keep in mind that many bootcamps hire their own graduates as teachers so this number may be inflated. You can also google the Lambda School lawsuit as well. "Scambda School" inflated its outcome metrics and used other deceptive marketing practices to swindle students hand over fist.</p>
<p>In the context of the <em>U.S., Course Report</em> (which analyzes the bootcamp market) reported in 2021 that <strong>the average bootcamp graduate earns a starting salary of $69,000.</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659666635622/FN6lqMKdf.gif" alt="fun-coupons.gif" class="image--center mx-auto" /></p>
<p>These statistics sound great, but will a bootcamp work for you? I'm here to give you my thoughts on whether you should do a bootcamp because they definitely work if the conditions are right (see me for example). </p>
<p><strong>The biggest hurdles to doing a bootcamp are the time commitment and the high costs of tuition. </strong>You will have to dedicate 9 - 12 weeks with large blocks of time where you cannot be interrupted to successfully complete a coding bootcamp. </p>
<p>When going into App Academy, I fully expected to be able to continue working while I did the coursework. I quickly realized that this was not going to be possible. There are large opportunity costs when going the bootcamp route and I want to explain the full picture so readers will be able to make an informed decision. </p>
<h3 id="heading-sigma-coding-bootcamp-student-grindset">Sigma coding bootcamp student grindset 📖🕖🕛🕟🕗</h3>
<p>Take a look at a normal day at a bootcamp. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659577261972/EyYx95wcB.png" alt="image.png" class="image--center mx-auto" /></p>
<p>There were 51 minutes of materials we had to go through, 34 minutes of additional resources we had to read, 1 hour 30 minutes of homework, and 7 hours of projects. This is also on top of the lectures and questions we had to go through every day. Let's say we had a 1 hour lecture, that would mean we have committed 10 hours and 55 minutes to the bootcamp, JUST TODAY.</p>
<p><strong>Students are expected to spend 80 - 100 hours per week</strong> coding and learning throughout the duration of the course. There is no sugar coating it. If you are in a reputable program you will be expected to meet minimum coding standards. App Academy had tests every few weeks and if failed, you would be moved to a later cohort. If failed again you would be removed from the program and your deposit refunded.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659672248695/Asoh26Hfl.jpeg" alt="6oz0j7.jpeg" class="image--center mx-auto" /></p>
<p>Luckily, I had my parents who were there to support me throughout my journey. I would not have been able to survive without them. Having the comfort of home-cooked meals helped my mental health and allowed me to persevere. A support system you can turn to if things are becoming too much to handle is extremely helpful.</p>
<p>I also moved in with my parents at the time so I didn't have to worry about rent, utilities, or other expenses. My only concern at the time was learning how to code.</p>
<h3 id="heading-selling-the-shovels-to-the-next-gold-rush">Selling the shovels to the next gold rush</h3>
<blockquote>
<p>"The people that made the most money in the gold rush were selling shovels, not digging gold"</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659662234061/aqM41lThK.gif" alt="shovel-shut-up.gif" class="image--center mx-auto" /></p>
<p>In the modern era, there is nothing that a bootcamp or school can teach you that you cannot teach yourself for free. Bootcamps package this free info into a neat package and then charge you an arm and a leg. </p>
<p>Many bootcamps require payment upfront and don't guarantee a job. Others like App Academy offer ISAs or income share agreements that require you to pay a large percentage of your income after you land a job. These often cost more than paying upfront, and it's possible you'll net less than your previous job after paying tuition payments!</p>
<p><strong>In my opinion, bootcamps only make sense in situations where you can give up the next 1 - 2 years to dedicate to transitioning into the tech industry.</strong> If you change your mind or cannot continue you will lose a lot of time and money with NOTHING to show for it. </p>
<h2 id="heading-should-you-self-study">Should you self study?</h2>
<p>At my first job out of bootcamp I met a dev named Brodie. He was self taught and is still the most talented programmer I have met. It goes to show you can become an amazing developer without any formal technical education.</p>
<p>Previously, he was a banker at Wells Fargo and taught himself HTML, CSS, Javascript, and PHP. I would say his ability to learn and pick things up quickly was what impressed me the most. When I asked him his thoughts on self studying this is what he said.</p>
<blockquote>
<p>I'm happy that I went into tech but I'm not sure I would necessarily recommend it unless you can go all in for the first couple years.  It just seems like there are so many concepts to learn and things to study for interviews that it's much harder to break in now than a few years ago.</p>
<p>There are so many more CS and bootcamp grads that you are competing with that you have to somehow stand out amongst them which the only way is just endless hours of work.</p>
</blockquote>
<p>It seems that self taught developers have the same problems bootcamp graduates do, but they have even more competition. The only perks of self studying are that you can do it on your own schedule and it's free. Graduating from a bootcamp does not give you any inherent advantage in the job search. It all comes down to your projects, portfolio, and interviewing skills. Bootcamps help you prepare for your first job quickly and efficiently while learning on your own may take a lot more time as you figure things out.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659669729063/s_1MOh0MY.gif" alt="62ec8c90d8542579640642.gif" class="image--center mx-auto" /></p>
<p><strong>You should self study If you are someone who can keep yourself accountable. </strong>You have to be confident that you can persevere and succeed. Motivation will get you started, good habits will keep you going. Before you know it you will be coding every day, just like how you brush your teeth every day.</p>
<p>Another thing that Brodie said piqued my interest. There were so many things to study. You may not know what to start on. It's so easy to get analysis paralysis. Bootcamps help because they guide you and basically hold your hand through the whole process. When self studying, you have to identify what you are deficient in, and what you need to improve on, then create your own curriculum.</p>
<h3 id="heading-free-resources-for-self-taught-developers">Free resources for self taught developers</h3>
<p>My suggestion to people thinking about self studying would be to just start. Code as much as you can, as often as you can.</p>
<p>Listed below are some of my favorite resources that may help a self taught developer:</p>
<ul>
<li><a target="_blank" href="https://www.freecodecamp.org/">freeCodeCamp</a> is a non-profit organization that consists of an interactive learning web platform, an online community forum, chat rooms, online publications and local organizations that intend to make learning web development accessible to anyone.</li>
<li><a target="_blank" href="https://www.theodinproject.com/">The Odin Project (TOP)</a> is an open-source curriculum for learning full-stack web development. We help users learn the skills and build the impressive portfolio of projects they need to get hired as a web developer.</li>
<li>With <a target="_blank" href="https://www.open.appacademy.io/">App Academy Open</a> you’ll get free access to App Academy’s entire 24 Week Online Software Engineering Program curriculum (that's over 500 hours of material!), which has placed thousands of people in software development jobs. This is exactly the same course that I took and paid ~$30,000 for.</li>
<li><a target="_blank" href="https://www.100daysofcode.com/">100 days of code</a> is a challenge that will help you become a better programmer. It helps you build momentum and makes coding a habit you look forward to. You will also meet like-minded individuals with similar goals to help motivate you to succeed. </li>
<li><a target="_blank" href="https://javascript30.com/">Javascript 30</a> is a free challenge that helps you become more comfortable with javascript by walking you through simple projects. This is for beginners who already know the basics of javascript. </li>
<li>Lastly, this is a GitHub repository called <a target="_blank" href="https://github.com/practical-tutorials/project-based-learning">Project Based Learning</a> that compiles some of the best free coding tutorials available online. I believe that the easiest way to learn is to do a project. With project based learning you can do projects in any language of your choice. I highly recommend checking the repo out and giving it a star ⭐ (I am not affiliated with them).</li>
</ul>
<h2 id="heading-conclusion">Conclusion</h2>
<p>If you are still determined to become a software engineer after reading this article, it shows you are seriously committed. I believe if you try to get into the tech industry with the wrong intentions you will not have a good time. It is not as easy as going to class for a few months and then coming out with a 6 figure job. </p>
<p>Even after you land your first job as a software engineer or developer that is just the start of your journey. You cannot know everything about best practices and code standards after 3 months of learning. I have gotten hate saying I was not a "software engineer" because I only had 3 months of experience. </p>
<p>I have been doing this for 2 years now and I am constantly learning and growing. I think that is what truly makes you a "software engineer". Having the courage to continue writing code and improving is what will set you on your path to achieving your goal.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1659670870008/LwSSdq4-2.gif" alt="Thank you for Reading.gif" class="image--center mx-auto" /></p>
]]></content:encoded></item><item><title><![CDATA[How I successfully became a software engineer in 3 months]]></title><description><![CDATA[I am currently a software engineer working full-time in the New York Metropolitan Area. 
Two years ago during the advent of COVID-19, I was an Associate Director at a real estate startup called Squarefoot in NYC. This was similar to being a real esta...]]></description><link>https://www.blog.edmondhui.com/software-engineer-in-3-months</link><guid isPermaLink="true">https://www.blog.edmondhui.com/software-engineer-in-3-months</guid><category><![CDATA[Learn Code Online]]></category><category><![CDATA[Beginner Developers]]></category><category><![CDATA[bootcamp]]></category><dc:creator><![CDATA[Edmond Hui]]></dc:creator><pubDate>Fri, 29 Jul 2022 01:52:20 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1659057853662/TwJ0Bb4Nc.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1658963119382/eSJnHR62Z.png" alt="intro.png" class="image--center mx-auto" /></p>
<p>I am currently a software engineer working full-time in the New York Metropolitan Area. </p>
<p>Two years ago during the advent of COVID-19, I was an Associate Director at a real estate startup called Squarefoot in NYC. This was similar to being a real estate broker and was a lot of sales. At the time, the future looked bleak for commercial real estate. Nobody knew how long lockdowns were going to last and what the industry would look like on the other side of the pandemic.</p>
<p>So, I thought "YOLO" and dove into learning how to code. Within a few months, I started as a junior software engineer at a tech startup. A lot of my friends were interested in my journey, so I will share my story of how I became a software engineer with you.<strong> I hope this inspires you to learn how to code. If I could do it, you can too. </strong></p>
<h2 id="heading-background">Background</h2>
<p>I am 24 years old and I'm ashamed to say my goal used to be to make as much money as possible. The early years of my professional life were always a grind towards the next goal. I graduated college one year early and went straight into commercial real estate brokerage thinking this was my ticket to wealth and early retirement.</p>
<p>I did this for 3 years before I realized I wasn't happy. It only took a global pandemic and stringent lockdowns for me to slow down enough to realize that 😅. </p>
<p>Around this time I was working from home and I started my first blog called <a target="_blank" href="https://coffeeinformer.com/">Coffee Informer</a>. I started off by learning basic CSS and HTML and teaching myself through Google. This website that I made from nothing started getting thousands of readers. <strong>I was immediately hooked. </strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1658963399504/INMTx5rmr.png" alt="coffee_informer.png" class="image--center mx-auto" /></p>
<p>Creating a website and attracting readers was the most rewarding feeling in my 24 years of existence.</p>
<p><em>That's when I knew I had to quit my job and pursue web development.</em></p>
<h2 id="heading-how-i-transitioned">How I transitioned</h2>
<p>There are so many resources available online to help you learn computer science principles. <strong>I believe everyone can be a developer if they put in the time and effort. </strong></p>
<p>Reading resources online was how I started out learning how to code, but I felt like there was too much to learn at one time and needed some guidance to prioritize my learning. That is why I decided to join a coding bootcamp.</p>
<p>I applied to <a target="_blank" href="https://www.appacademy.io/">App Academy</a> and studied for the entrance exams which were in Ruby. They provided about 20 hours of material and I self-studied for about a week before my technical interview. </p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1658963617173/297PfSAy6.png" alt="appacademylogo.png" class="image--center mx-auto" /></p>
<p>According to App Academy, they have a 5% acceptance rate, but that seems overly exaggerated. <strong>As long as you know your coding basics such as array and string manipulation you'll get into a bootcamp and start your journey to becoming a software engineer.</strong></p>
<p>During all of this, I was still working my full-time real estate position. This was a few months into the pandemic. I created a plan to obtain new clients and exclusives. I read leases to find ways business owners could get out of their lease, and offered to sublease their offices and move them into smaller spaces. This plan was very successful and helped me generate a lot of business due to the uncertainty in the commercial real estate industry at the time.</p>
<p>I had a hard decision to make. There is a saying "a bird in the hand is worth two in the bush", but is it worth it if the bird is biting your hand and causing you pain? Ultimately, I chose to let go of the bird and pursue my passion for tech.</p>
<p>By the time I had left, I was the top broker in Q3 of 2020, and I asked for a recommendation to immortalize either <strong>the best or worst decision of my life.</strong> Below is a copy of the recommendation I received (💪 flex but ok).</p>
<blockquote>
<p>To Whom it May Concern,</p>
<p>I write to provide the strongest recommendation I can for Edmond Hui’s acceptance into your program.</p>
<p>Edmond was a member of my brokerage team at SquareFoot, a technology-enabled real estate company, and he distinguished himself in multiple ways. These include:</p>
<p>His work ethic was simply exemplary. Top 5% I have ever worked with. 
Edmond’s curiosity and his capacity to retain information allowed him to on-board and become a productive member of our team in a very short timeframe.</p>
<p>He is one of the most open-to-feedback team members I have ever worked with; he takes feedback constructively and immediately makes adjustments where necessary.</p>
<p>Edmond was also generous with his knowledge across our team; one of the things I remember most about him was him taking his personal time to educate our team members on the dynamics of investing in public markets, which is a passion of his. He got nothing out of this himself except the satisfaction of being able to share knowledge about a topic he is extremely well versed in with others who were interested to learn. He has a generosity of spirit that is rare in my experience.</p>
<p>He is an excellent problem solver, and approaches problems in a constructive way as challenges that need to be overcome. The NY real estate market has been greatly affected during the pandemic, and our team’s production suffered. Edmond, through a combination of persistence, creativity and humility was able to become our top broker during Q3 of 2020, outpacing individuals that have been in the industry for years longer than he had been.</p>
<p>Again, I believe Edmond would be a great asset to your program. If you have any questions about his candidacy you can reach me at ****@**********.com or ***-***-****.</p>
<p>All the best,</p>
<p>Phil Sofia</p>
</blockquote>
<p>Now that I know how this story ends, I do not regret my decision one bit.</p>
<h2 id="heading-out-of-the-frying-pan-into-the-fire">Out of the frying pan into the fire</h2>
<p>Once I was accepted into App Academy, there was no turning back. We covered topics at blistering speeds and I was spending all my time dedicated to learning how to code.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1658971443881/Q9WWvH0Cv.gif" alt="this_is_fine.gif" /></p>
<p>I was breaking out of my comfort zone and I could feel myself inching toward my goal.</p>
<p>During my time in bootcamp, I didn't do anything special. I showed up. <strong>It's like they say 80% of success is showing up.</strong> I did all the homework, followed the lectures, did the readings, and completed the projects. </p>
<p>The process of breaking down complex concepts into smaller pieces made it easier for me to wrap my head around them. I broke down my goals into bite-sized pieces so I could keep track of my progress day by day.</p>
<p><strong>The biggest obstacle I encountered was becoming a better communicator and explaining technical concepts.</strong> We did a lot of pair programming when working on projects at App Academy. I thought I understood everything, but I had a hard time articulating what I had learned. </p>
<p>Looking back, it was because I didn't fully grok the concepts. I needed to break them down into simpler blocks and understand them on a deeper level.</p>
<p>I plan on sharing my thoughts on coding bootcamps in another article so I can go more in-depth about the pros and cons. </p>
<h2 id="heading-what-i-learned">What I learned</h2>
<p>The 3 months at the boot camp were over in a flash. It was hard work, but definitely worth the effort. Completing the bootcamp taught me people are much more capable than I realized. </p>
<p>In 3 short months, we learned everything necessary to become software engineers. I felt like I could achieve anything I put my mind to.</p>
<p>What the bootcamp taught me wasn't just Ruby, Javascript, or PHP, but a way of thinking. <strong>How to persevere and find answers, even when it isn't obvious. </strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1658964201906/hiMdH1lE3.gif" alt="lmgtfy.gif" class="image--center mx-auto" /></p>
<p>Imposters syndrome is a real thing that many fresh graduates deal with. Imposters syndrome is very common in tech, and according to a <a target="_blank" href="https://www.techrepublic.com/article/why-58-of-tech-employees-suffer-from-imposter-syndrome/">report</a> 58 percent of employees at Amazon, Facebook, Microsoft, and Google report feeling like they don't deserve their jobs. </p>
<p>You have to remember this is a natural part of learning and you will gain confidence as you continue to learn and use your new abilities.</p>
<h2 id="heading-in-conclusion">In conclusion</h2>
<p>My advice to anyone thinking about going into tech is, just do it. Believe in yourself and believe in the process. </p>
<p><strong>You do not need formal education.</strong> Find a group of techies and ask them questions. Dive into the tech community and find people who are excited to help. All you need is a laptop and an internet connection to get started, so what's stopping you?</p>
<p>Feel free to reach out to me and I'd love to answer any questions or mentor you in your transition into tech!</p>
<blockquote>
<p>“All our dreams can come true, if we have the courage to pursue them”, Walt Disney</p>
</blockquote>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1658963141053/pL-5BQukr.gif" alt="thank_you.gif" class="image--center mx-auto" /></p>
]]></content:encoded></item></channel></rss>