<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Corbin Taylor</title>
    <description>The latest articles on DEV Community by Corbin Taylor (@cjtaylor1990).</description>
    <link>https://dev.to/cjtaylor1990</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F242409%2F80364db3-efb3-4d88-8586-20f4e96b0206.jpg</url>
      <title>DEV Community: Corbin Taylor</title>
      <link>https://dev.to/cjtaylor1990</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cjtaylor1990"/>
    <language>en</language>
    <item>
      <title>Long Time, No See.</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Sun, 05 May 2024 06:29:46 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/long-time-no-see-6h9</link>
      <guid>https://dev.to/cjtaylor1990/long-time-no-see-6h9</guid>
      <description>&lt;p&gt;Hello DEV,&lt;/p&gt;

&lt;p&gt;I know it's been quite some time since I've really wrote anything on here. I guess it's time to come out from under my rock that I've been living under.&lt;/p&gt;

&lt;p&gt;It's been a busy couple of years, and an exhausting career so far in Tech.&lt;/p&gt;

&lt;p&gt;The following is a brief summary of things, thus far. I cannot go into detail about the systems I worked on, so sorry to disappoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS
&lt;/h3&gt;

&lt;p&gt;My first two years (2020-2022) in Tech were like trying to drink from a fire hose. I was a junior SDE at AWS, and it was some of the most fun yet challenging work I've done in my life. To describe it as a crucible would not be an understatement, but I learned a lot, both professionally and about myself. To top it off, it was also during the height of the COVID-19 pandemic, which I feel put everything on-edge.&lt;/p&gt;

&lt;p&gt;Despite AWS being a cloud provider, this team managed a sizable back-end Spring codebase that ran on baremetal. The frontend was initially Ruby-on-Rails, but that was eventually replaced by React. There was also a menagerie of Ruby, Python, and Java ops scripts.&lt;/p&gt;

&lt;p&gt;I was on one of those teams at AWS that nearly everyone at the company relied on; if we went down, everyone was down. encountering some awful people (not naming names). We averaged approximately 30+ high-severity tickets every week, which resulted in some very "eventful" on-call rotations.&lt;/p&gt;

&lt;p&gt;Work was hard, hours were long, and I pushed myself beyond what I'd ever done before. I met some great people (some of whom I can say are some of my dearest friends), while also encountering some awful people (not naming names).&lt;/p&gt;

&lt;p&gt;I discovered that I was tougher than I ever thought I could be.&lt;/p&gt;

&lt;p&gt;I also learned the importance of being kind to myself, and to allow myself to be a work-in-progress. I'm still a work-in-progress, and always will be; we are always in the process of becoming.&lt;/p&gt;

&lt;p&gt;I also learned that I needed to allow myself to have a work-life balance. While there are those that will chastise such notions, not allowing that balance will burn you out.&lt;/p&gt;

&lt;p&gt;I burnt myself out. I'm still recovering, but I can feel myself breathe lighter every day.&lt;/p&gt;

&lt;p&gt;Meditation. Music. Reading. Trying to just remember to be happy in the moment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Capital One
&lt;/h3&gt;

&lt;p&gt;In November 2022, I started at Capital One as a Software Engineer, at the Senior Associate level. I started working with containerized Springboot applications and Kafka, but have since migrated to Go and AWS Lambda.&lt;/p&gt;

&lt;p&gt;I've continued to grow, but at a much more sustainable rate, and I am quite content with my team. While work can sometimes be heavy, my team and company seems to understand that people are overall happier and more productive when they are allowed to live healthy, balanced lives.&lt;/p&gt;

&lt;p&gt;Last month, after a big production release, my team had our first big get together. After years of travel restrictions, remote working, and team de-centralization, it was nice to finally see everyone in person.&lt;/p&gt;

&lt;p&gt;Surprisingly, not everyone is just a 2D Zoom avatar!&lt;/p&gt;

&lt;p&gt;Remote-work jokes aside, my anxiety and introverted nature makes working from home so much easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;I wasn't quite sure what I wanted to get across with this post, but I felt like typing tonight and see where it went.&lt;/p&gt;

&lt;p&gt;Now then, DEV, I need to go to bed. There was a time when I would stay up to all hours of the night to get things done.&lt;/p&gt;

&lt;p&gt;That younger version of myself was a fool, and he should go to sleep. Like I will now.&lt;/p&gt;

</description>
      <category>update</category>
      <category>life</category>
      <category>career</category>
    </item>
    <item>
      <title>An Introduction To PGP</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Sun, 16 Jan 2022 17:40:42 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/a-short-introduction-to-using-pgp-3e78</link>
      <guid>https://dev.to/cjtaylor1990/a-short-introduction-to-using-pgp-3e78</guid>
      <description>&lt;p&gt;I am someone who has been interested in privacy and security for most of my adult life. I am also someone who can be described as, perhaps, a tiny bit paranoid at times. Are these things related? Probably.&lt;/p&gt;

&lt;p&gt;However, you do not have to be paranoid to want to be secure and to have your privacy maintained online. Even if you don't have something to hide, that doesn't mean that your friends don't.&lt;/p&gt;

&lt;p&gt;What if you're talking to someone who is standing up for women's rights or is LGBTQ+ in a country where such things are socially (or even legally) dangerous? If you don't keep yourself secure, then &lt;strong&gt;you&lt;/strong&gt; could become their vulnerability.&lt;/p&gt;

&lt;p&gt;I'm not trying to scare you, and I'm certainly not trying to turn you into some conspiracy theorist. I'm just trying to point out that, even if you have nothing to hide, that you should be conscious of your online security posture.&lt;/p&gt;

&lt;p&gt;So, you may ask now, what should I do about it?&lt;/p&gt;

&lt;p&gt;There are many good security and privacy tools and services out there (which I may expand upon in a future post), but today I want to talk about something that I have been playing around with recently: PGP.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is PGP?
&lt;/h2&gt;

&lt;p&gt;PGP (short for "Pretty Good Privacy") is an protocol used to &lt;em&gt;encrypt&lt;/em&gt;, &lt;em&gt;decrypt&lt;/em&gt;, and &lt;em&gt;sign&lt;/em&gt; data. It's widely used, and if properly implemented, is considered a great way to protect yourself and your private discussions online.&lt;/p&gt;

&lt;p&gt;The idea behind this is that, you will start with a &lt;em&gt;public&lt;/em&gt; and a &lt;em&gt;private&lt;/em&gt; key that are paired. The public key is something that you can share openly with people, while the private key &lt;strong&gt;you should keep hidden&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The public key allows others to mark you as the recipient of a document, encrypting it and saying that only you can decrypt it.&lt;/p&gt;

&lt;p&gt;The private key allows you to confirm who you say you are, and decrypt the message that was sent to you.&lt;/p&gt;

&lt;p&gt;Furthermore, say you want to send a message to someone, and you want to make sure that they know you are who you say you are. PGP allows you to sign the document using your private key which the other person can confirm you are who you say you are by comparing it to your public key.&lt;/p&gt;

&lt;p&gt;If you want a high-level description in video form, Computerphile has nice video &lt;a href="https://www.youtube.com/watch?v=GSIDS_lvRv4" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Do You Get PGP?
&lt;/h2&gt;

&lt;p&gt;The modern incarnation of this protocol, &lt;a href="https://www.openpgp.org/about/" rel="noopener noreferrer"&gt;OpenPGP&lt;/a&gt;, was implemented by the &lt;a href="https://www.fsf.org/" rel="noopener noreferrer"&gt;Free Software Foundation&lt;/a&gt; in &lt;a href="https://gnupg.org/" rel="noopener noreferrer"&gt;GPG&lt;/a&gt; ("GnuPG" or "GNU Privacy Guard"). If you are on Mac OS X, the easiest way for you to get GPG is through &lt;a href="https://gpgtools.org/" rel="noopener noreferrer"&gt;GPG Tools&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do You Use PGP/GPG?
&lt;/h2&gt;

&lt;p&gt;Now that we have gone over "what" PGP and GPG are, I want to go over some of the basic usage.&lt;/p&gt;

&lt;p&gt;This tutorial will only really scratch the surface, but I hope that I can at least teach you some things that can help you keep private things private.&lt;/p&gt;

&lt;h3&gt;
  
  
  Some Notes Before We Begin
&lt;/h3&gt;

&lt;p&gt;For the rest of this article, I am going to assume that you have installed GPG, which as explained has implemented implemented OpenPGP. I will be showing you examples via the terminal.&lt;/p&gt;

&lt;p&gt;In my case, I am a Mac OS X user and I will be showing examples via my preferred terminal, &lt;a href="https://iterm2.com/" rel="noopener noreferrer"&gt;iTerm2&lt;/a&gt; that uses zsh that has been customized with &lt;a href="https://ohmyz.sh/" rel="noopener noreferrer"&gt;Oh My Zsh&lt;/a&gt;.  My &lt;a href="https://github.com/ohmyzsh/ohmyzsh/wiki/Themes" rel="noopener noreferrer"&gt;Oh My Zsh theme&lt;/a&gt; is af-magic with the synthwave-everything &lt;a href="https://iterm2colorschemes.com/" rel="noopener noreferrer"&gt;iTerm2 theme&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you want to know more about terminal customization, comment below or reach out to me on &lt;a href="https://twitter.com/cjtaylor2390" rel="noopener noreferrer"&gt;my Twitter&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting Into The Terminal And Verifying Installation
&lt;/h3&gt;

&lt;p&gt;To start with, you will need your terminal open and GPG installed (see above).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5iswl679cu0apuolsv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5iswl679cu0apuolsv6.png" alt="Open iTerm2 window, currently cleared with a cursor resting on the upper-left-hand side of the image."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have your terminal open, you can confirm that you have GPG installed by doing the &lt;code&gt;which gpg&lt;/code&gt; command that shows the file path.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenx8cdf1t5pdt8ddvs4s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fenx8cdf1t5pdt8ddvs4s.png" alt="Open iTerm2 window. I have executed the which gpg command, which results in the path, usr/local/bin/gpg being printed to the screen."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first, and incredibly useful command to know is &lt;code&gt;gpg --help&lt;/code&gt; which is gives you a list of the available commands and the various flags associated with them. It's especially handy if you ever forget something (which I do &lt;em&gt;all&lt;/em&gt; the time).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqbh0z15eyzglv1qf78p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqbh0z15eyzglv1qf78p.png" alt="After running gpg --help, legal info and supported algorithms are printed to the screen, along with the available commands and their flags."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating Your First Public/Private Key Pair
&lt;/h3&gt;

&lt;p&gt;Once you have made sure that you can use GPG and have taken some time to read some of the help document, it's time to generate your first key pair.&lt;/p&gt;

&lt;p&gt;Run the command &lt;code&gt;gpg --full-generate-key&lt;/code&gt;, and you will be prompted about which algorithm you wish to use to generate your public and private keys, as well as the number of bits of information (or &lt;a href="https://en.wikipedia.org/wiki/Entropy_(information_theory)" rel="noopener noreferrer"&gt;entropy&lt;/a&gt; that they will contain. &lt;/p&gt;

&lt;p&gt;A theoretical discussion of what this all means is well beyond the scope of this blog post, but practically speaking, you can think of entropy being associated with the chance that a hostile actor could break the encryption via brute force repetition. The more bits, the harder it is for them to break the encryption. &lt;/p&gt;

&lt;p&gt;In this case, I have chosen &lt;code&gt;(1) RSA and RSA&lt;/code&gt; and &lt;code&gt;4096&lt;/code&gt; bits.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7tyvqw44cfddkcp9m8j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7tyvqw44cfddkcp9m8j.png" alt="After running gpg --full-generate-key, I am prompted by the terminal which algorithm I wish to generate the PGP key pair. I have chosen 1 (RSA and RSA) with 4096 bits of entropy."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After choosing the algorithm, you will then be prompted about the expiration date of your key-pair. You can choose a range from days to years (e.g., &lt;code&gt;2y&lt;/code&gt;), or to not have an expiration date at all (i.e., &lt;code&gt;0&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2axcjmhytjwwb6f851b1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2axcjmhytjwwb6f851b1.png" alt="After selecting the algorithm and entropy, you will then be asked to choose an expiration date. You can choose ranges of days (e.g. 2 for 2 days), weeks (e.g., 2w for 2 weeks), months (e.g., 2m for 2 months) or years (e.g., 2y for 2 years. In this case, I have chosen 2y, representing 2 years in the future from the current date."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fuvv0muze23fpykktph.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6fuvv0muze23fpykktph.png" alt="Alternatively at this step, you can choose that the key have no expiration date, and so you would type 0."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After that, you will be asked to generate a UID for the key, which is a combination of your name, your email that you want associated with the key, and some optional comment. This metadata will be a way of telling others who you are claiming to be.&lt;/p&gt;

&lt;p&gt;In this case, I wrote my name (Corbin), the email (&lt;a href="mailto:cjtaylor1990@dev.to"&gt;cjtaylor1990@dev.to&lt;/a&gt;), and my comment is something unquestionably true, which is that I love coffee and cats.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdq56gdwqj1t9gqhbhtc1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdq56gdwqj1t9gqhbhtc1.png" alt="The next step will be to be specifying metadata that will be part of the public key. This includes your name, email, and a comment. In this case, my name is Corbin, the email I chose is cjtaylor1990@dev.to, and the comment is that I love coffee and cats."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, you will be prompted to give a pin to be associated with the private key. Any time you try to use the private key, you will be asked for the key pin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qkiqwhq0ez38b9a9qud.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qkiqwhq0ez38b9a9qud.png" alt="After giving the key metadata, you will be prompted to give the secret key pin code via a GNG Tools. Choose something long yet easy to use, either with a password manager or diceware"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For my case, I used a 40 character string that I randomly generated using &lt;a href="https://1password.com/" rel="noopener noreferrer"&gt;1Password&lt;/a&gt;. Alternatively, if you don't have a way to generate and store passwords electronically, you could use &lt;a href="https://www.eff.org/dice" rel="noopener noreferrer"&gt;diceware&lt;/a&gt; to generate passwords and then store it on a piece of paper in your wallet or a safe.&lt;/p&gt;

&lt;p&gt;After giving the pin code, &lt;code&gt;gpg&lt;/code&gt; will generate the key pair and will give you a confirmation, as well as importing the public and private keys into your GPG &lt;em&gt;key ring&lt;/em&gt; to be used later. The GPG key ring is simply the way that GPG stores and manages PGP keys on your local machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F626n2pl2opy1toaqb48k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F626n2pl2opy1toaqb48k.png" alt="After giving the pin code for the private key, you will get a confirmation code that the key pair has been generated. It will give you a lot of information on the screen, including a long alphanumeric value unique to the key-pair known as the fingerprint."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice in the picture above that there is a long alphanumeric string (&lt;code&gt;212CF1042D88FFF461A62B76811A3B169B7EA4B7&lt;/code&gt;) above the &lt;code&gt;uid&lt;/code&gt;. This is a unique identifier known as the key &lt;em&gt;fingerprint&lt;/em&gt; and the last 8 values in the string, &lt;code&gt;9B7EA4B7&lt;/code&gt; is the key ID.&lt;/p&gt;

&lt;p&gt;To confirm that you now have the key in your key ring, you can use &lt;code&gt;gpg --list-keys&lt;/code&gt;. You can list the specific key that you just generated by specifying the email, the key ID, or the finger print values as arguments. Alternatively, you can just use the command as is to list all of the keys that are listed on your key ring.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb55ywbzpxojz8alkc4uz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb55ywbzpxojz8alkc4uz.png" alt="You can check to see that you have the new key  pair on your key ring by using gpg --list-keys, and give the email, the key ID, or the key fingerprint."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How To Encrypt A File That Is For Your Eyes Only
&lt;/h3&gt;

&lt;p&gt;Now that you have a public/private key pair, you can actually start to do basic encryption/decryption. For example, say that you have a message that is for your eyes only. We could put that into a text file and encrypt it using the key that you just created.&lt;/p&gt;

&lt;p&gt;First, you will need such a file. An easy way to create such a text file would be to use the &lt;code&gt;echo&lt;/code&gt; command and then send it to an output file (e.g., &lt;code&gt;test.txt&lt;/code&gt;) using the output operator (&lt;code&gt;&amp;gt;&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;For example, &lt;code&gt;echo Hello, PGP! &amp;gt; test.txt&lt;/code&gt;. This will generate a &lt;code&gt;test.txt&lt;/code&gt; file with your secret phrase, &lt;code&gt;Hello, PGP!&lt;/code&gt; inside of it.&lt;/p&gt;

&lt;p&gt;You can then confirm that the file contains the message using the &lt;code&gt;cat&lt;/code&gt; command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0681ez7sy12k3f244wyq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0681ez7sy12k3f244wyq.png" alt="You can create a text file that contains a message (e.g., "&gt;&lt;/a&gt;). This will output a text file at the path specified (e.g., test.txt) with the output inside of it. You can see what's inside of the file using the cat command. In this case, we see that you find "Hello, PGP!" inside of the file."/&amp;gt;&lt;/p&gt;

&lt;p&gt;Now that you have your text file with your super secret hidden message, you can then encrypt it using &lt;code&gt;gpg --encrypt&lt;/code&gt; and specifying yourself as the recipient with the &lt;code&gt;--recipient&lt;/code&gt; flag.&lt;/p&gt;

&lt;p&gt;In this case, that would be &lt;code&gt;gpg --encrypt --recipient cjtaylor1990@dev.to test.txt&lt;/code&gt;. This will output an encrypted file, &lt;code&gt;test.txt.gpg&lt;/code&gt; which you can check the contents of with &lt;code&gt;cat&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpso3g62qpnhcu1wqpmw9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpso3g62qpnhcu1wqpmw9.png" alt="Using gpg --encrypt --recipient cjtaylor1990@dev.to test.txt, I create an encrypted file, test.txt.gpg. If you use cat to see what is inside, you will see a jumbled encrypted mess. This is to be expected."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you see a garbled mess, then &lt;strong&gt;CONGRATULATIONS!&lt;/strong&gt; You have created an encrypted message, and if you cannot currently read it, then hackers (or the NSA) likely can't easily read it either.&lt;/p&gt;

&lt;p&gt;Now, if all we could do is &lt;em&gt;encrypt&lt;/em&gt; the message, then that's not very useful. You want to come back later and &lt;em&gt;decrypt&lt;/em&gt; the message!&lt;/p&gt;

&lt;p&gt;You see, by encrypting this file this way, we have used your public key (the one that you can give to others) to encrypt a message specifies that only the &lt;em&gt;real you&lt;/em&gt; can decrypt.&lt;/p&gt;

&lt;p&gt;Thankfully, this is where the private key comes in! This also shows why it is VERY important not to share your private key with others.&lt;/p&gt;

&lt;p&gt;Your private key (protected by your key pin) is the means by which you prove that you are the owner of the public key. The &lt;em&gt;real you&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Since you have the private key on your GPG key chain, all you would have to do is use &lt;code&gt;gpg --decrypt&lt;/code&gt; on the encrypted file, and it will then print the secret message to the screen along with the recipient (you). Note that you will be prompted (via popup) for your key pin before your private key can be used.&lt;/p&gt;

&lt;p&gt;Furthermore, you can use the output (&lt;code&gt;&amp;gt;&lt;/code&gt;) operation to put the secret message into a file that you specify.&lt;/p&gt;

&lt;p&gt;For example:&lt;br&gt;
&lt;code&gt;gpg --decrypt test.txt.gpg &amp;gt; test.txt.clear&lt;/code&gt;&lt;br&gt;
where I have chose the '.clear' file suffix to represent a clear-text file (as compared to an encrypted file).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn5zw2j1cdkoc9qm8gzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnn5zw2j1cdkoc9qm8gzu.png" alt="Using gpg --decrypt on the .gpg file and then entering your key pin, you can decrypt it to see the message or output the clear text message to a file using the output operator (&amp;gt;) . Here I do this, showing that without the output operator, the secret message will be printed to the screen, while with the operator, you will get a new file that you specify the name of (e.g., test.txt.clear, which contains the secret message, now human-readable."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Importing A Friends Public Key To Your Key Chain
&lt;/h3&gt;

&lt;p&gt;Now, encrypting messages to yourself is nice, but what if you could encrypt messages to others? Well, you can! But first, we need another friend that uses PGP.&lt;/p&gt;

&lt;p&gt;Let's say my awesome friend &lt;a class="mentioned-user" href="https://dev.to/pachicodes"&gt;@pachicodes&lt;/a&gt; has decided to send me their public key. Likely, it would be something like &lt;code&gt;public.pachicodes@dev.to.asc&lt;/code&gt;, where the &lt;code&gt;.asc&lt;/code&gt; is an "ASCII armored" file type that is often used to store and exchange PGP keys. While the raw PGP key is a binary file, the &lt;code&gt;.asc&lt;/code&gt; file is an ASCII representation of that binary.&lt;/p&gt;

&lt;p&gt;Once Pachi has given me the public key, I can import the public key into my GPG key ring using &lt;code&gt;gpg --import&lt;/code&gt;, specifying the file as an argument.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4ym97xt1kwwgbevkzzk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc4ym97xt1kwwgbevkzzk.png" alt="My friend has given me their public key, public.pachicodes@dev.to.asc. I'm able to import their public key into my key chain using gpg --import public.pachicodes@dev.to.asc. GPG will then give me a confirmation that the key has been imported and shows me the metadata on the key afterwards."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Encrypting A Message To A Friend
&lt;/h3&gt;

&lt;p&gt;Now that I have my friend Pachi's public key, say that I now have a secret message (stored in &lt;code&gt;for_pachi.txt&lt;/code&gt;) that want to send them. I want to make sure that &lt;em&gt;only&lt;/em&gt; they can read it.&lt;/p&gt;

&lt;p&gt;I can use their key to designate them in the &lt;code&gt;--recipient&lt;/code&gt; flag in &lt;code&gt;gpg --encrypt&lt;/code&gt;. Furthermore, to tell Pachi that the message is really from me by &lt;em&gt;signing&lt;/em&gt; the encrypted file.&lt;/p&gt;

&lt;p&gt;In full, to encrypt the &lt;code&gt;for_pachi.txt&lt;/code&gt; file, we would do,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gpg --encrypt --sign --local-user cjtaylor1990@dev.to --recipient pachicodes@dev.to for_pachi.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;where &lt;code&gt;--sign --local-user&lt;/code&gt; allows &lt;code&gt;gpg&lt;/code&gt; that I want to sign using one of my local keys, &lt;code&gt;cjtaylor1990@dev.to&lt;/code&gt;. Again, this will produce an encrypted &lt;code&gt;.gpg&lt;/code&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7jwnmpmk14tkvwinavp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7jwnmpmk14tkvwinavp.png" alt="Using gpg, I'm able to encrypt the for_pachi.txt file with the public key of my friend, Pachi, and sign it with my private key. After doing so, gpg will mention that there is no assurance that the recipient is who they claim to be on their public key, and asks if you want to proceed. In this case, I continued, and using ls, I see that there is a new for_pachi.txt.gpg file in my directory."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This signing is done using the private key that you generated earlier, and GPG will once again prompt you to give a key pin. If I had given the part of my key that I can share (my public key) to Pachi earlier, GPG can compare the public key against the private key signature on the encrypted file and confirming that it was actually me who signed and encrypted it.&lt;/p&gt;

&lt;p&gt;Assuming that Pachi has my key imported into her own GPG key ring, she can decrypt the encrypted file, see that it was from me, and what the secret message is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3vog5qajaqqy6jtptkt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3vog5qajaqqy6jtptkt.png" alt="Here, I show what Pachi would see after she has imported my public key and used her private key to decrypt the encrypted file. It states who the signature is from, and that the secret message is "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now Pachi and I have successfully exchanged public keys, and using our secret private keys, we have successfully exchanged encrypted messages back and forth to one another. Only those with access to our private keys (and key pins) could successfully sign the encrypted messages, or decrypt them to read. In this case, Pachi sees me exclaim that "We are awesome hackers!"&lt;/p&gt;

&lt;p&gt;This idea is the heart of PGP encryption, and what makes it so powerful as a privacy and security tool. It's used in many popular privacy-focused software, such as &lt;a href="https://protonmail.com/" rel="noopener noreferrer"&gt;Proton Mail&lt;/a&gt; and &lt;a href="https://www.signal.org/" rel="noopener noreferrer"&gt;Signal&lt;/a&gt; as a means of strong end-to-end encryption, and has famously been used to journalistic sources and whistleblowers.&lt;/p&gt;

&lt;p&gt;Even if anyone was able to get a hold of the traffic being sent between Pachi and myself, they would not be able to decrypt it to know what it meant, not even the service we were using to communicate!&lt;/p&gt;

&lt;h2&gt;
  
  
  PGP Exporting, Back-Up, And Publishing
&lt;/h2&gt;

&lt;p&gt;You can export both your public and private keys as &lt;code&gt;.asc&lt;/code&gt; files by using the &lt;code&gt;gpg --export&lt;/code&gt; and &lt;code&gt;gpg --export-secret-keys&lt;/code&gt;, while also specifying the key you wish to export and using the output operator (&lt;code&gt;&amp;gt;&lt;/code&gt;) to specify the file name.&lt;/p&gt;

&lt;p&gt;For &lt;code&gt;cjtaylor1990@dev.to&lt;/code&gt;, we can export the key pair by doing:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gpg --export --armor cjtaylor1990@dev.to &amp;gt; public.cjtaylor1990@dev.to.asc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and,&lt;/p&gt;

&lt;p&gt;&lt;code&gt;gpg --export-secret-keys --armor cjtaylor1990@dev.to &amp;gt; private.cjtaylor1990@dev.to.asc&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;--armor&lt;/code&gt; flag specifies that we want &lt;code&gt;gpg&lt;/code&gt; to output everything armored ASCII format instead of a binary.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vajs1n4e4vzmhnabhl0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6vajs1n4e4vzmhnabhl0.png" alt="Here, I have used gpg --export to export my own public key, using the --armor flag to use a format consistent with an .asc file. I then use &amp;gt; to output to a txt file, public.cjtaylor1990@dev.to.asc. I see this file in my directory now, and using the head command, see what the contents look like. The inside is a large block of ASCII character and marked with a header that specifies that the block is a PGP public key."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pl186nxquaorfkhx1ki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pl186nxquaorfkhx1ki.png" alt="Using gpg --export-secret-keys with the --armor flag, I'm able to output my secret key in an .asc file. Using ls, I see now I have both public and private parts of the key-pair exported from GPG and can now be backed up."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that both parts of the key pair have been exported from GPG, you can then back them up (e.g., on an encrypted drive). Backing up your keys is important, as without them, you will be able to decrypt any message intended for you nor sign any encrypted file.&lt;/p&gt;

&lt;p&gt;Finally, you can share your &lt;strong&gt;PUBLIC&lt;/strong&gt; key by uploading it to a public key server that allows other to download it and import it so that they can contact you securely.&lt;/p&gt;

&lt;p&gt;To do this, you can use the &lt;code&gt;pgp --send-keys&lt;/code&gt; command, specifying the key-ID (in my case, &lt;code&gt;9B7EA4B7&lt;/code&gt; or the last 8 characters of my key fingerprint).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06kzvzvpv0n5plswqekw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06kzvzvpv0n5plswqekw.png" alt="Using gpg --send-keys, and specifying my key ID, 9B7EA4B7, I can upload my public key to a PGP key server. In this case, since I didn't specify a server, the terminal says that it is sent to the default server, key.openpgp.org."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The default server is &lt;a href="https://keys.openpgp.org/" rel="noopener noreferrer"&gt;key.openpgp.org&lt;/a&gt;, which you can then search using your key's fingerprint.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyaqy3abjje8vefvwpqm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyaqy3abjje8vefvwpqm5.png" alt="On key.openpgp.org, if someone knows your public key's fingerprint, they can search for and download it to put it on their own GPG key chain. The page is minimal, but after searching, it as a link in the middle of the screen that will start to download the public key file when clicked. This allows them to contact you securely, allowing only the you (with your private key) to decrypt their message."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Revoking A Compromised Key
&lt;/h2&gt;

&lt;p&gt;As this whole protocol is dependent upon on each person keeping their private key uncompromised, it is important to make sure that you &lt;em&gt;revoke&lt;/em&gt; a key that you believe to be compromised. You can likewise revoke a key if you no longer use it.&lt;/p&gt;

&lt;p&gt;To make sure you are ready for such a scenario, you can generate a revocation certificate for your key using the &lt;code&gt;gpg --gen-revoke&lt;/code&gt; followed by your key ID. You will then use the output operator (&lt;code&gt;&amp;gt;&lt;/code&gt;) to output the data to a file, in this case &lt;code&gt;revoke.cjtaylor1990@devo.to.asc&lt;/code&gt;. You will then be asked for more details about why you are revoking the key.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kbmjvxx0d3d112xp4le.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3kbmjvxx0d3d112xp4le.png" alt="Using the gpg --gen-revoke command with my key ID, I generate a revoke certificate and output it to an .asc file, revoke.cjtaylor1990@devo.to.asc. You will be prompted why the key is being revoked, and if you want to add any more comments."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can then keep the revoke certificate &lt;code&gt;.asc&lt;/code&gt; file around for safe keeping (&lt;strong&gt;DO NOT SHARE IT&lt;/strong&gt;) and if you find that you have to mark it as no longer a valid key, you can then import the certificate as a key into your GPG keychain. This will mark the key as revoked and no longer valid.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9863ciegipkubdvh2bl6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9863ciegipkubdvh2bl6.png" alt="Using gpg --import on the revoke certificate file, revoke.cjtaylor1990@dev.to.asc, this will tell GPG that the key pair associated with that revoke certificate is no longer valid. GPG will not consider the key as invalid."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can confirmed that the key was revoked using &lt;code&gt;gpg --list-keys&lt;/code&gt; and then send the updated (revoked) public key to the public key server using &lt;code&gt;gpg --send-keys&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mxzscd2vb79o7f9136z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mxzscd2vb79o7f9136z.png" alt="After we have imported the revoke certificate, I use gpg --list-keys 9B7EA4B7 (the key ID) to verify that the key has been revoked (invalidated) locally. I then use pgp --send-keys to push the changes to the PGP public key server, keys.openpgp.org."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keeping a revoke certificate around and making sure that any compromised or unused key pairs are marked as revoked helps protect you from others reading any encrypted data with you as the recipient. Furthermore, it makes sure that others can trust that any information signed by your private key is really from you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting PGP Keys From Key Ring
&lt;/h2&gt;

&lt;p&gt;If you have revoked a PGP key pair and no longer need it, you can delete it from your local key ring.&lt;/p&gt;

&lt;p&gt;First, start by deleting the private key by using &lt;code&gt;gpg --delete-secret-keys&lt;/code&gt; and specifying the key that you wish to delete. In this case, I am deleting the secret key associated with &lt;code&gt;cjtaylor1990@dev.to&lt;/code&gt; that I revoked in the last section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqisd6pdc7bgj53vgioo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqisd6pdc7bgj53vgioo.png" alt="Using gpg --delete-secret-keys and specifying the key associated with cjtaylor1990@dev.to, I am prompted if I really want to delete the private key from the key ring. After confirming each time, you the private key is finally deleted and will no longer be usable."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You are then able to delete the public key with &lt;code&gt;gpg --delete-key&lt;/code&gt;, while specifying the key in the same fashion as you did in the previous command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezd9n8o436xzwekpsu93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fezd9n8o436xzwekpsu93.png" alt="Using gpg --delete-key and specifying the key associated with cjtaylor1990@dev.to, I'm able to delete the key from my local key ring after a confirmation."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary And Final Thoughts
&lt;/h2&gt;

&lt;p&gt;If you've been following along, you now have created your own PGP key pair (a &lt;em&gt;public&lt;/em&gt; key and a &lt;em&gt;private&lt;/em&gt; key) using &lt;code&gt;gpg --full-generate-key&lt;/code&gt;. The public key can be shared with others, while the private key and your key pin should be kept secret.&lt;/p&gt;

&lt;p&gt;With your public key, you encrypted a secret message using &lt;code&gt;gpg --encrypt&lt;/code&gt; that only the person with your private key (the &lt;em&gt;real you&lt;/em&gt;) can decrypt; you specified who can open it using the &lt;code&gt;--recipient&lt;/code&gt; flag.&lt;/p&gt;

&lt;p&gt;With &lt;code&gt;gpg --decrypt&lt;/code&gt; and your key pin, you decrypted your secret message, confirming that it is the same one that you started with despite having been garbled and made a mess of during the encryption process.&lt;/p&gt;

&lt;p&gt;Similarly, after importing a friends PGP public key, you were able to import it into your GPG key chain using &lt;code&gt;gpg --import&lt;/code&gt; and then encrypt a file addressed to them using similar commands, but adding the &lt;code&gt;--sign --local-user&lt;/code&gt; flags to sign the encrypted file with your private key and allowing your friend to know it was from you.&lt;/p&gt;

&lt;p&gt;You learned how to export your public and private keys using &lt;code&gt;gpg --export&lt;/code&gt; and &lt;code&gt;gpg --export-secret-keys&lt;/code&gt; respectively as a way of backing them up. You also learned how share your public key via a PGP public key server using &lt;code&gt;gpg --send-keys&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Finally, you learned how to generate a revoke certificate using &lt;code&gt;gpg --gen-revoke&lt;/code&gt; so that, if your keys are compromised, you can invalidate them locally (by using &lt;code&gt;gpg --import&lt;/code&gt; to import the revoke certificate) and on the PGP public key server (by using &lt;code&gt;gpg --send-keys&lt;/code&gt; after the key has been marked invalid locally).&lt;/p&gt;

&lt;p&gt;While this introduction does not necessarily cover all there is to know about PGP, nor does it cover specific use cases (e.g., &lt;a href="https://emailselfdefense.fsf.org/en/" rel="noopener noreferrer"&gt;email encryption&lt;/a&gt;) or how to use the GPG Tools GUI, I hope I was able to help you appreciate (or even want to use) this useful privacy tool.&lt;/p&gt;

&lt;p&gt;I would not consider using PGP the first thing you should worry about when improving your online security posture; that would probably be to use a password manager and enabling two-factor authentication. However, I still consider it very interesting and an incredible privacy tool, with an excellent track record.&lt;/p&gt;

&lt;p&gt;Thank you for reading this introductory tutorial on PGP encryption. I know it's been a while since I wrote anything, but this has been an interest of mine lately, and I wanted to share.&lt;/p&gt;

</description>
      <category>security</category>
      <category>privacy</category>
      <category>computerscience</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How To Maximize Your Productivity And Learning By Keeping Your Goals In Mind</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Wed, 05 Feb 2020 02:02:30 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/how-to-maximize-your-productivity-and-learning-by-keeping-your-goals-in-mind-423c</link>
      <guid>https://dev.to/cjtaylor1990/how-to-maximize-your-productivity-and-learning-by-keeping-your-goals-in-mind-423c</guid>
      <description>&lt;p&gt;&lt;em&gt; Cover photo taken in my work office at my university. Paper is Kara et al. 2016 (free at &lt;a href="https://arxiv.org/abs/1501.06849" rel="noopener noreferrer"&gt;https://arxiv.org/abs/1501.06849&lt;/a&gt;). &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I was recently involved in a brief Twitter thread with a fellow Dev.to blogger, Pachi (who you should totally &lt;a href="https://dev.to/pachicodes"&gt; check out &lt;/a&gt;), and the topic of discussion was that there seems to be so much to learn. I mean, with a seemingly infinite number of tech blogs to read, YouTube tech education channels to watch, and Udemy courses to take, it can seem a bit overwhelming. This is especially true for someone new into this space, and is starting to realize just how much there is to learn. &lt;em&gt; It can really make someone's head spin! &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I've detailed my story in a &lt;a href="https://dev.to/cjtaylor1990/learning-to-be-a-developer-and-getting-my-first-offer-29a1"&gt; previous blog post &lt;/a&gt;, and those who know me know that I'm coming into the tech field from quite the unique angle. My experience as an Astrophysicist and a PhD student has been kind of "trial by fire" for productivity and self-learning, and I hope that I can help some of you by imparting my views on the subject.&lt;/p&gt;

&lt;p&gt;Before I begin, I will say that, in no way am I claiming that my ideas are wholly original. I've picked things up piecemeal from colleagues, self-help literature, and online sources. I am only speaking about what I've done that has proven effective for myself, and in no way am I claiming that these tips will necessarily work for everyone. I do believe that I can help at least a few people by sharing my opinion.&lt;/p&gt;

&lt;p&gt;Note that I purposely have been vague as to when I'm talking about learning or general productivity, because in my opinion, everything can be described in terms of project management. Learning is a particular use case for what I'm about to describe where you are the project.&lt;/p&gt;

&lt;h1&gt; So, Where Do I Start? &lt;/h1&gt;

&lt;p&gt;I think one of the hardest parts of any project is figuring out where to start. After all, unless one is following some tutorial or has some outside guidance, it is often the case that they won't know where to even begin to learn about a particular subject or start a project. It's somewhat akin to the pressure one feels as they initially sit down to write and they are met with a blank, white page with a blinking cursor. We might have a vague idea in mind (e.g. "learn web development", "build an application", etc), but beyond those vague borders, we are left without a guide.&lt;/p&gt;

&lt;p&gt;This uneasiness in almost complete freedom can lead to shut down, as the task seems just to great to even begin, or it can lead to going all directions simultaneously. Neither of these common results lead to particularly good results, as neither result in great productivity. For example, I remember when I was first started researching all the various programming languages, I thought it would be great to learn as many as I possibly could, and that would make me a great programmer. Don't get me wrong, I'm still very impressed by truly great polyglot programmers. However, you need to be able to do more than print "Hello, World!" in 20 different programming languages.&lt;/p&gt;

&lt;p&gt;&lt;em&gt; We cannot run from it. We must firmly answer the question: where do we begin? &lt;/em&gt;&lt;/p&gt;

&lt;h3&gt; The Recursive Productivity Function &lt;/h3&gt;

&lt;p&gt;Well, we must first actually do a bit of basic research on the domain we are trying to understand. For this, we have to ask:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; What exactly do I want to do? What is my primary goal? &lt;/li&gt;
&lt;li&gt; What does that exactly entail? &lt;/li&gt;
&lt;li&gt; In my own words, can I break this down into individual steps? &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's use the example of someone wanting to build a simple to-do list web app. Going through these three questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; I want to build a to-do list web app. &lt;/li&gt;
&lt;li&gt; I need to build a UI where a user can add entry to a list and then delete them after they are done. I also want to make sure the list saves. &lt;/li&gt;
&lt;li&gt; Breaking down this process, I have: Build a basic skeleton of a web page, style said web document, make this web page dynamic to allow for adding and deleting entries, allow this web page to save the entries for later (even after shutdown) &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now then, based on the answer to #3, we have some more concrete steps. Obviously, this is a bit of a simplified example, but what's wonderful about this list of questions is that it can be used recursively. Each individual step that you list in question #3 could then be inserted back into this &lt;em&gt; productivity function &lt;/em&gt; , which will produce its own list of steps. The final list of steps to be completed would then be produced by concatenating the results from each of these individual analyses.&lt;/p&gt;

&lt;p&gt;The level to which you wish to push this is ultimately up to you and your skill level, but in my opinion it is best to have broken your original goal down to the point that the first step (or next step) seems almost trivial. By doing this, you've effectively constructed a framework to work in where there wasn't one before. You've traded in the pressure of an large-scale problem to that of making many small steps that can be overcome. It now isn't just one big goal, one big win, but many small goals, and many wins. I can guarantee that this will make you less nervous, make the process more fun, and help you fend off imposter syndrome.&lt;/p&gt;

&lt;h3&gt; Learning From Your Goals &lt;/h3&gt;

&lt;p&gt;Going back to the example of a newbie web app developer, they now know that they need to construct the basic structure of a UI. It doesn't have to look pretty, but it has to at least have the basic form. If they already know HTML or know some Web Framework (e.g. React, Angular) this may mean that they can get into this process immediately, but if they don't, then with an extra iteration of our &lt;em&gt; productivity function &lt;/em&gt;, they know that their first step is to learn HTML.&lt;/p&gt;

&lt;p&gt;Eventually, from a single idea (a simple to-do list application), our hypothetical newbie web app developer could eventually learn from the individual steps listed above:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Skeleton UI - HTML &lt;/li&gt;
&lt;li&gt; Styling of UI - CSS &lt;/li&gt;
&lt;li&gt; Making the webpage dynamic - JS &lt;/li&gt;
&lt;li&gt; Saving the listed items - NodeJS, Express, SQL (or some other database query language, e.g. MongoDB) &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By keeping their goals in mind, they have not only built the app that they had in mind, but they've also learned quite a few fundamental skills along the way.&lt;/p&gt;

&lt;p&gt;Could they have taken a different approach, with a different tech stack? Absolutely. They are still learning the fundamentals of the development process, however, which is ultimately the most beneficial thing.&lt;/p&gt;

&lt;p&gt;This brings us to another important point...&lt;/p&gt;

&lt;h1&gt; But What If It's Not Perfect? &lt;/h1&gt;

&lt;p&gt;I must admit, I can be a bit of a perfectionist at times, and while this has been beneficial in many ways, it can also have many detrimental side effects. One of the most relevant to this discussion, is that, very much like the pressure from a lack of concrete direction, a pressure towards perfectionism can also result in the grinding of true productivity to a halt.&lt;/p&gt;

&lt;p&gt;&lt;em&gt; If a code is never shipped, does it truly matter if its becoming increasingly more perfect? &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This point is relevant to the discussion, because people will often anguish over a particular point of deciding the method by which they will reach one of their particular goals in a project. This is often times the result of, once again, too many options.&lt;/p&gt;

&lt;h3&gt; Don't Anguish Over Finding A Perfect Tech Stack &lt;/h3&gt;

&lt;p&gt;Taking the example of the web app, when determining how our hypothetical developer is going to design their to-do list program, they are likely to encounter people talking about a plethora of front-end frameworks. Should they learn Python and pick up Django or Flask? Perhaps JavaScript and use React, or maybe learn this hot new TypeScript and use Angular? What about Ruby and Rails? Of course, each framework rely on different languages and use different paradigms (client side vs. server side rendering), so perhaps you should learn all of them and then pick the perfect one. &lt;em&gt; Ad infinitum... &lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I hope this example shows you that you should try your best to not labor over such things, especially when you are starting out. There will be time and a place to learn different frameworks for different projects. For any particular project, however, I think it is important that you try to police your thoughts before they snowball out of control. In over to overcome such issues and the anxiety that come with them.&lt;/p&gt;

&lt;h3&gt; The Minimum Viable Product &lt;/h3&gt;

&lt;p&gt;I think we can borrow a term from the software industry, and focus at first on the &lt;em&gt; minimum viable product (MVP) &lt;/em&gt;. There is always time to make a project better after it is initially shared with the world.&lt;/p&gt;

&lt;p&gt;For our hypothetical complete newbie web developer with the to-do list app, it is not the case that he needs any fancy framework. They could produce the front-end of an initial version of their product (their MVP) with base HTML, CSS, and JavaScript. This allows them to learn the fundamentals first, and then either come back later to refactor the project using such popular framework or start another project where they use such a framework (thus giving them an excuse to learn it as a step in the development process).&lt;/p&gt;

&lt;h3&gt; Be Content With Imperfection With Constant Improvement &lt;/h3&gt;

&lt;p&gt;I would like to also point out that the principle that you shouldn't get bogged down by the strive for perfection can also pertain to the self as well. For example, I remember many times during my early years of coding that I felt like I couldn't forget anything, and that everything I did needed be perfect. If I didn't remember something, clearly I needed to go over yet another tutorial or re-read a chapter in a book that I had just read a few weeks before. This urge to hold myself to such a unrealistic standard resulted being unproductive, increased my anxiety, and reinforced my imposter syndrome.&lt;/p&gt;

&lt;p&gt;The pursuit of absolute perfection, either in the building of a project or in the development of the self, is a foolhardy venture. It is important that we always try to better ourselves, to learn and grow, but we must consciously realize that we will never reach some ultimate self or produce some ultimate project. &lt;em&gt; We must be willing to forgive imperfections, and get fulfillment in the constant journey of improvement &lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Don't overthink the process. Focus on your goals. Forgive imperfections. Finally...&lt;/p&gt;

&lt;h1&gt; Focus On Fundamentals First &lt;/h1&gt;

&lt;p&gt;One final thing I want to cover is the importance of fundamentals. What I mean by, "fundamentals," is those most components of your tech stack. In the case of our hypothetical newbie web developer, this would be HTML, CSS, and JavaScript. In the case of a data scientist, it would be Python, SQL, and basic statistics. They also include fundamental coding concepts, like the idea of a loop, a variable, an array, an object, etc.&lt;/p&gt;

&lt;p&gt;This is analogous to the MVP concept, where you should produce the smallest, most basic, useable component first. In this case, you are the project, and those learning those basic fundamentals would be considered producing your MVP. Do those fundamentals necessarily make you job ready, or do they necessarily complete your first big project? No, but they are undoubtedly going to provide the foundation on which you continue to build upon.&lt;/p&gt;

&lt;p&gt;These basic concepts also provide a language so that you can more readily think about the task at hand, or any future project. This makes our recursive &lt;em&gt; productivity function &lt;/em&gt; that I introduced earlier an easier process. Our fundamentals are provide a conceptual language with which we can start to understand the vague ideas that exist at the beginning of the development process.&lt;/p&gt;

&lt;h1&gt; Conclusion &lt;/h1&gt;

&lt;p&gt;I realize that this blog post may seem a bit simplistic, or perhaps even a bit vague. In a way, that is intentional, as I think the best method by which one goes about learning and producing will be incredibly dependent on the personality of the individual in question and the problem at hand.&lt;/p&gt;

&lt;p&gt;That being said, I do believe that the main takeaways from this post can be applied almost universally as a kind of basic problem solving toolbox:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Use a recursive &lt;em&gt; productivity function &lt;/em&gt; to break down larger problems or goals into smaller ones. Continue until the step your first (or next) step you are to take seems almost trivial. &lt;/li&gt;

&lt;li&gt; Stay focused on the &lt;em&gt; minimum viable product &lt;/em&gt; as a first attempt, being weary of the tendency for perfectionism. Always work towards improvement, but realize that perfection is never truly obtainable. &lt;/li&gt;

&lt;li&gt; Focus on the &lt;em&gt; fundamentals first &lt;/em&gt;. Learn the basic language and concept with which you will be working. Build on that foundation, but always keep those fundamentals in view, allowing you to steel yourself against mind clutter and keep yourself grounded. They provide a basic vocabulary and grammar with which you can start to parse vague goals, improving our efficiency as problem solvers. &lt;/li&gt;

&lt;/ol&gt;

&lt;p&gt;With that, I will end this post, and I hope this has been helpful. Depending on interest, I may write more on this subject and turn this topic into a short series.&lt;/p&gt;

&lt;p&gt;Take care, and happy coding!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>codenewbie</category>
      <category>career</category>
    </item>
    <item>
      <title>What I Accomplished In 2019 - Finding My Footing And Finding Myself</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Tue, 17 Dec 2019 03:26:47 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/what-i-accomplished-in-2019-finding-my-footing-and-finding-myself-2dlo</link>
      <guid>https://dev.to/cjtaylor1990/what-i-accomplished-in-2019-finding-my-footing-and-finding-myself-2dlo</guid>
      <description>&lt;p&gt;Pictured: a part of my home office space, including some of the books I picked up throughout 2019 and a mug I bought on a family trip to Alaska.&lt;/p&gt;

&lt;p&gt;As it is the end of 2019, and taking some inspiration from a fellow Dev user that I follow, &lt;a href="https://dev.to/pachicodes/what-have-i-done-in-2019-op6"&gt; Pachi &lt;/a&gt; (who you should definitely follow), I have decided to make this post about what all I accomplished this year.&lt;/p&gt;

&lt;p&gt;While this may sound a bit self-aggrandizing, I feel that it is important to take stock of what you accomplished at the end of each year. After all, imposter syndrome is rampant in Software Development (and many technical fields in general), and allowing ourselves to take credit for our achievements helps us overcome these feelings of self-doubt. This is especially true for those who are just starting their careers, as it is very easy to feel overwhelmed and forget that even the most senior developers were newbies once (and that the same senior developers still have to use Google to debug their code).&lt;/p&gt;

&lt;p&gt;Since my experience in coding has been so heavily intertwined with my PhD program, forgive me for some Astronomy-specific terminology. I will attempt to minimize jargon and focus mostly on the programming and development aspects.&lt;/p&gt;

&lt;h2&gt; January - March &lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt; During the American Astronomical Society 2019 Winter meeting in Seattle, I built the initial version of my production script that would allow me to build data-fittable models from my black hole calculation software. This was done with Python 3 and Bash scripting. I also got to enjoy some amazing food with some old friends and gave an awesome presentation on my research. &lt;/li&gt;

&lt;li&gt; Built a low-resolution data-fittable model to test my production scripts. Passed all tests with only negligible interpolation errors. All testing was done with Python 3 scripts and basic statistical methods. &lt;/li&gt;

&lt;li&gt; &lt;b&gt; Allowed myself to seriously start to explore career options beyond Astrophysics and pure research. &lt;/b&gt; &lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt; April - June &lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt; Refactored the model production scripts to be able to scale from 100 parameter combinations to over 15,000 parameter combinations. &lt;/li&gt;

&lt;li&gt; Dove into a colleague's massive C library and successfully wrote my own extension to it in order to interface my model with a popular X-ray analysis software. Persevered through multiple code-induced migraines and resisted (publicly) yelling about code structure. &lt;/li&gt;

&lt;li&gt; Successfully convinced my colleagues to loan me about half of the CPUs on the Astronomy Department's private cluster. &lt;b&gt; Prevented myself from getting drunk on such computational power, though still laughed maniacally. &lt;/b&gt; &lt;/li&gt;

&lt;li&gt; Crunched over 10 Tb of data to produced a grid of pre-computed models. Models pass all tests with negligible interpolation error. &lt;/li&gt;

&lt;li&gt; Started to explore Software Engineering via &lt;a href="https://www.codecademy.com/" rel="noopener noreferrer"&gt; Codecademy &lt;/a&gt; and YouTube (e.g. &lt;a href="https://www.youtube.com/channel/UCaO6VoaYJv4kS-TQO_M-N_g" rel="noopener noreferrer"&gt; Clement Mihailescu &lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UCEDkO7wshcDZ7UZo17rPkzQ" rel="noopener noreferrer"&gt; Mayuko &lt;/a&gt;, &lt;a href="https://www.youtube.com/channel/UC54NcJvLCvM2CNaBjd5j6HA/videos" rel="noopener noreferrer"&gt; RealToughCandy &lt;/a&gt;, and &lt;a href="https://www.youtube.com/channel/UCu1xbgCV5o48h_BYCQD7KJg" rel="noopener noreferrer"&gt; Chris Sean &lt;/a&gt;, to name a few). &lt;/li&gt;

&lt;li&gt; Went through the &lt;a href="https://www.codecademy.com/learn/paths/computer-science" rel="noopener noreferrer"&gt; Codecademy Computer Science career path &lt;/a&gt; to learn more about Data Structures and Algorithms. Learned that Hash Tables are over-powered and that graph search algorithms are fun. &lt;/li&gt;

&lt;li&gt; Allowed myself shut my brain off for once (a rare thing). I enjoyed a week-long vacation with my family, taking a cruise up to Alaska for my grandparents' wedding anniversary. Got a spiffy new mug with a Moose and an amazing new hoodie. &lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt; July - September &lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt; Survived a three week work trip to the UK and Germany where I averaged 14-16 hour days, 7 days per week. This was one of the big moments that made me realize that I really wanted to pursue something new. &lt;/li&gt;

&lt;li&gt; Gave one of the best talks I ever gave on my black hole research at the University of Southampton while in the UK. Had a senior colleague say that it was one of the best talks he had seen on the subject. &lt;/li&gt;

&lt;li&gt; Survived German public transportation with my limited (and rusty) understanding of the language. &lt;/li&gt;

&lt;li&gt; Started to build and test the second component of my black hole data-fittable model. All scripts passed testing. &lt;/li&gt;

&lt;li&gt; Started to go through &lt;a href="https://www.codecademy.com/learn/paths/web-development" rel="noopener noreferrer"&gt; Codecademy's Web Development career path &lt;/a&gt;. Learned Javascript, including React. Re-learned HTML and CSS after a decade. &lt;/li&gt;

&lt;li&gt; Finished a command-line tool that can help the user navigate the Washington DC subway system: &lt;a href="https://github.com/cjtaylor1990/wmata_pathfinder" rel="noopener noreferrer"&gt; WMATA Pathfinder &lt;/a&gt;. This was done in Python 3 using a modified depth-first-search algorithm. &lt;/li&gt;

&lt;li&gt; Finished &lt;a href="https://www.astro.umd.edu/~cjtaylor/" rel="noopener noreferrer"&gt; my personal website &lt;/a&gt; using HTML and CSS &lt;/li&gt;

&lt;li&gt; Converted my academic CV into an eye-catching resume using the help of my University's career center and the book &lt;a href="https://www.amazon.com/What-Are-You-Going-That/dp/022620040X/ref=sr_1_1?crid=3151D59NIU0TM&amp;amp;keywords=what+are+you+going+to+do+with+that&amp;amp;qid=1576547511&amp;amp;sprefix=what+are+you+going+to+do%2Caps%2C137&amp;amp;sr=8-1" rel="noopener noreferrer"&gt; "So What Are You Going To Do With That?" &lt;/a&gt;. &lt;/li&gt;

&lt;li&gt; Overcame shyness and successfully networked with people in Data Science and Software Engineering. Learned that my skills are incredibly marketable, despite being learned in a very specialized context. &lt;/li&gt;

&lt;li&gt; Overcame my imposter syndrome and applied to a number of Software Development positions, including at Amazon Web Services &lt;/li&gt;

&lt;li&gt; &lt;b&gt; Overcame an identity crisis, deciding that Software Development was a viable career alternative for me that I would greatly enjoy. &lt;/b&gt; &lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt; October - December &lt;/h2&gt;

&lt;ul&gt;

&lt;li&gt; Survived preparing application materials for research positions at Cambridge, MIT, CalTech, FlatIron, Princeton, and Southampton. Post-doctorate applications are incredibly taxing. &lt;/li&gt;

&lt;li&gt; Participated in &lt;a href="https://hacktoberfest.digitalocean.com/" rel="noopener noreferrer"&gt; Hacktoberfest &lt;/a&gt; for the first time, successfully completing 10 pull requests and becoming a member of a Javascript ESLint plug-in project (&lt;a href="https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore" rel="noopener noreferrer"&gt; You-Dont-Need-Lodash-Underscore &lt;/a&gt;). &lt;/li&gt;

&lt;li&gt; &lt;b&gt; Started posting here on Dev.to. Realized that the Dev community is amazing. &lt;/b&gt; &lt;/li&gt;

&lt;li&gt; &lt;b&gt; Successfully completed an online code assessment for a Software Development Engineer (SDE) position at Amazon Web Services. &lt;/b&gt; &lt;/li&gt;

&lt;li&gt; &lt;b&gt; Successfully interviewed at Amazon Web Services in Virginia. Was offered a position as an entry-level SDE. Really cool project and got along with the project manager. &lt;/b&gt; &lt;/li&gt;

&lt;li&gt; &lt;b&gt; Overcame another identity crises and decided that I would be happiest in Software Engineering. I decided to take the position at AWS and withdrew myself from consideration for postdoctorate research positions. &lt;/b&gt; &lt;/li&gt;

&lt;li&gt; Overcame my social fear and told my advisors and colleagues about my decision to work as an SDE. &lt;/li&gt;

&lt;li&gt; Learned more about Containers. Subscribed to Pluralsight and finished two classes on Docker by &lt;a href="https://app.pluralsight.com/profile/author/nigel-poulton" rel="noopener noreferrer"&gt; Nigel Poulton &lt;/a&gt;. Also went through the &lt;a href="https://kubernetes.io/docs/tutorials/kubernetes-basics/" rel="noopener noreferrer"&gt; official Kubernetes tutorial &lt;/a&gt;. &lt;/li&gt;

&lt;li&gt; Learned about MongoDB. Finished two classes on the &lt;a href="https://university.mongodb.com/" rel="noopener noreferrer"&gt; official MongoDB University site &lt;/a&gt;.&lt;/li&gt;

&lt;li&gt; Wrote an &lt;a href="https://github.com/cjtaylor1990/url_shortener_server" rel="noopener noreferrer"&gt; HTTP server using Node and Express &lt;/a&gt;. Using it as a start to a MERN-stack URL shortener project. &lt;/li&gt;

&lt;li&gt; Finished writing the last of my black hole model codes and have produced the last of the pre-computed model grids. All tests passed. Will be pushing full beta soon and sending to collaborators. &lt;/li&gt;

&lt;li&gt; Planned and started to execute the last of my thesis work. I will be graduating with my PhD in Summer 2020. &lt;/li&gt;

&lt;/ul&gt;

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

&lt;p&gt;This has been quite the list to write out and I'm sure I omitted a number of victories. This process has made me realize just how much I accomplished over the last year, and has given me quite a bit more confidence in myself as a programmer and developer.&lt;/p&gt;

&lt;p&gt;After I graduate in Summer 2020, I will be starting my job at AWS and the next chapter of my life will begin. I am nervous, but incredibly excited.&lt;/p&gt;

&lt;p&gt;To all of you out there, especially those who are trying to get a footing in the Tech space, I hope you had a great year and that 2020 will be even better!&lt;/p&gt;

</description>
      <category>career</category>
      <category>yearinreview</category>
    </item>
    <item>
      <title>Accepting An Amazon Job Offer And Filling In My Skill Gaps</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Tue, 10 Dec 2019 13:11:54 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/accepting-an-amazon-job-offer-and-filling-in-my-skill-gaps-27m4</link>
      <guid>https://dev.to/cjtaylor1990/accepting-an-amazon-job-offer-and-filling-in-my-skill-gaps-27m4</guid>
      <description>&lt;p&gt;Picture - Outside the cathedral at Trinity College at the University of Cambridge, Cambridge, UK. Taken by myself in Summer 2018. I just really like it.&lt;/p&gt;

&lt;p&gt;As it has been a while since posting here on Dev, I thought I would give a bit of an update.&lt;/p&gt;

&lt;h2&gt; The Job Offer &lt;/h2&gt;

&lt;p&gt;I had alluded to getting a job offer in &lt;a href="https://dev.to/cjtaylor1990/learning-to-be-a-developer-and-getting-my-first-offer-29a1"&gt; my last post &lt;/a&gt;, and I have since accepted it. After graduating from my PhD program in Summer 2020, I will be starting as a Software Development Engineer (SDE I) at Amazon Web Services. Needless to say, I am incredibly excited and proud of myself for getting the position, having not come from a traditional Computer Science background and being largely self-taught.&lt;/p&gt;

&lt;p&gt;The final decision was not an easy one for me, as it was a final confirmation to myself that I really wanted a change in my life. I realized that I wanted something else in life other than what I initially envisioned for myself 12 years ago, and finally admitting that to myself and to my academic peers was not easy. A lot of my identity is still wrapped up in being an academic, and I'm sure that the transition will be not be overnight. However, despite this, I don't regret deciding to study Astrophysics. I think it is a wonderful field that both inspires the imagination and teaches you how to solve complex problems, and it will always be part of who I am in some way.&lt;/p&gt;

&lt;h2&gt; Containers With Docker And Kubernetes &lt;/h2&gt;

&lt;p&gt;As I am going to be working with a lot of Cloud concepts, I have started to flesh out my understanding of containers: what they are, what they are used for, and how I go about making use of them myself.&lt;/p&gt;

&lt;p&gt;I actually started the process a bit backwards due to a lack of a firm grasp on where to start. I started with the official &lt;a href="https://kubernetes.io/docs/tutorials/" rel="noopener noreferrer"&gt; the Kubernetes tutorials &lt;/a&gt;, which by themselves are nice introductions to distributed systems and how they help better ensure service reliability.&lt;/p&gt;

&lt;p&gt;After going through the tutorials, working through them on the Kurbernetes sandbox, the documentation then suggested looking at a few courses on third-party platforms. This led me to Pluralsight and the work of &lt;a href="https://twitter.com/nigelpoulton" rel="noopener noreferrer"&gt; Nigel Poulton &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After a brief course overview on his Kubernetes course, I realized that I needed to start with Docker if I really wanted to understand containers. For those that are new to these technologies, think of Docker as a service that allows you to host isolated copies of a service with all the various dependencies (known as a container) on a single or multiple machines. Kubernetes is more of a way to manage these containers, balancing requests and automatically handling failure events. They are in the same technology regime, but looking at the problems from different angles. Note that it is possible to handle management across multiple machines with Docker via the use of Docker Swarm, but it seems like Kubernetes is the preferred choice in this space.&lt;/p&gt;

&lt;p&gt;I have gone through:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://app.pluralsight.com/library/courses/docker-kubernetes-big-picture/table-of-contents" rel="noopener noreferrer"&gt; Docker and Kubernetes - The Big Picture &lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://app.pluralsight.com/library/courses/docker-getting-started/table-of-contents" rel="noopener noreferrer"&gt; Getting Started With Docker &lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The latter of the two was especially interesting, as it allowed me to use the free-tier AWS EC2 service while I was following along in the tutorials in building the container swarm. I am currently going through his &lt;a href="https://app.pluralsight.com/library/courses/docker-deep-dive-update/table-of-contents" rel="noopener noreferrer"&gt; Docker Deep Dive &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Assuming you can afford a Pluralsight subscription and you are interested in learning about these technologies, I would start there. Nigel is a fantastic teacher, explaining things in an entertaining and clear manner. While I have not read it, Nigel also wrote &lt;a href="https://www.amazon.com/Docker-Deep-Dive-Nigel-Poulton-ebook/dp/B01LXWQUFF/ref=sr_1_1?keywords=the+docker+book&amp;amp;qid=1575954260&amp;amp;sr=8-1" rel="noopener noreferrer"&gt; his own book on the subject &lt;/a&gt; that may provide a more economic way to learn it.&lt;/p&gt;

&lt;h2&gt; MongoDB &lt;/h2&gt;

&lt;p&gt;One thing that I never have understood about the culture of Astrophysics is our choice to not utilize more modern database technologies. Most of us have only seen one or two SQL queries in our entire career, and anything more complex than that is relegated to being stored as often-convoluted directories of .txt, .hdf5, .npy, and .fits files. We hope that our naming scheme is good enough for our future selves to be able to traverse the file maze 6 months down the line (and so often...it isn't). &lt;/p&gt;

&lt;p&gt;Sure, some of this is due to the often very specific use cases, but I honestly think much of this is due to a lack of willingness to change. This has led to mountains of technical debt and the looming crisis of Big Data Astronomy.&lt;/p&gt;

&lt;p&gt;Because of this lack of domain experience, I have taken an interest in learning about databases and query languages. I started this process a few months ago when I chose to learn SQL through &lt;a href="https://www.codecademy.com/" rel="noopener noreferrer"&gt; Codecademy &lt;/a&gt; as part of their Web Development path.&lt;/p&gt;

&lt;p&gt;Recently, I decided to learn more about NoSQL, and in particular MongoDB. I chose to focus on this technology due to its popularity and it having incredible learning resources on the official website. In particular, for those who are interested, I would highly recommend checking out the official &lt;a href="https://university.mongodb.com/" rel="noopener noreferrer"&gt; MongoDB University &lt;/a&gt;, which  provides Coursera-quality courses for free.&lt;/p&gt;

&lt;p&gt;On MongoDB University, I started the Developers path and have finished:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;a href="https://university.mongodb.com/courses/M001/about" rel="noopener noreferrer"&gt; M001 - MongoDB Basics &lt;/a&gt; &lt;/li&gt;
&lt;li&gt; &lt;a href="https://university.mongodb.com/courses/M103/about" rel="noopener noreferrer"&gt; M103 - Basic Database Administration &lt;/a&gt; &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These classes provide an excellent introduction to the query syntax and the concepts of this document-based query language. The second one is especially useful in learning about database concepts, like replication and sharding.&lt;/p&gt;

&lt;p&gt;I think learning MongoDB while also working on learning more about Docker and Kubernetes actually makes a lot of sense. They both rely on the concept of a distributed system, and how one manages problems of service scaling and reliability, and as such the concepts learned in one will reinforce what is learned in the other.&lt;/p&gt;

&lt;p&gt;After I have a bit more time, I will be continuing with &lt;a href="https://university.mongodb.com/courses/M220JS/about" rel="noopener noreferrer"&gt; M220JS - MongoDB for Javascript Developers &lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt; Side Projects &lt;/h2&gt;

&lt;p&gt;As I am an incredibly busy graduate student, much of my dev learning is done during lunch or, if I have the mental capacity left, after work. My work on my side projects has been a bit slower than I would have liked it to be, but I suppose I should give myself some slack given that I just went through the existential crisis of finding (and deciding to accept) a dev job.&lt;/p&gt;

&lt;p&gt;I am currently working on a &lt;a href="https://github.com/cjtaylor1990/url_shortener_server" rel="noopener noreferrer"&gt; URL shortener project &lt;/a&gt; (MERN stack), and have completed the skeleton of the Express middleware. I am currently using a simple Javascript object for now to represent the database (just for testing before hooking it up to a MongoDB instance), and the React front-end is still in its early stages.&lt;/p&gt;

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

&lt;p&gt;Thanks for those that read my posts and have followed me here on Dev (over 100!). I am still trying to work out my niche on what technical things I would like to talk about, so forgive me if I mostly just do these simple personal blog posts. I try to include resources that I have found useful, as I hope that my readers will be able to take something from what I've written.&lt;/p&gt;

&lt;p&gt;Hope you all have a great day, and happy coding!&lt;/p&gt;

</description>
      <category>career</category>
      <category>docker</category>
      <category>kubernetes</category>
      <category>mongodb</category>
    </item>
    <item>
      <title>Learning To Be A Developer And Getting My First Offer (A Personal Story)</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Thu, 07 Nov 2019 07:53:45 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/learning-to-be-a-developer-and-getting-my-first-offer-29a1</link>
      <guid>https://dev.to/cjtaylor1990/learning-to-be-a-developer-and-getting-my-first-offer-29a1</guid>
      <description>&lt;p&gt;I recently got a notification that I have passed the interviewing process at a certain FAANG company (that shall, for now, remain nameless) for a Software Engineering position and will be soon receiving an offer. I am still a bit in shock, as it was my very first interview outside of Academia and my first white board technical interview experience.&lt;/p&gt;

&lt;p&gt;As a way to process how I have come to this point, and as a way to perhaps give fellow coders that are looking to break into the industry, a tiny bit of insight, I wanted to write out how I've ended up here and how I've studied. I'm not trying to sell you anything and have no affiliation with any of the websites or services that I may list. I'm just telling you what I've done and experienced.&lt;/p&gt;

&lt;p&gt;I don't claim to be an expert at this, and honestly at first there was a part of me that thought that they mistook me for someone else (BEGONE IMPOSTER SYNDROME!)&lt;/p&gt;

&lt;p&gt;WARNING: I might have gotten creative with my analogies. Expect references to Tolkien.&lt;/p&gt;

&lt;h2&gt;A Bit About Me&lt;/h2&gt;

&lt;p&gt;As my previous posts mentioned, I do not come from the traditional Computer Science or Engineering background. My time as a PhD Astrophysics student was spent largely coding, but in a very, very different regime. For example, my primary advisor still codes in Fortran 77 and has very little understanding of OOP, but that is good enough for what we typically are doing (and he's very successful in what he does). Most of the time is spent in developing and implementing algorithms to be able to do the necessary calculations (e.g. a numerical integration of some orbits around a black hole or doing statistical analysis on telescope data), or refactoring said algorithms to be run across a computer cluster.&lt;/p&gt;

&lt;p&gt;I'm proud of what I've done, and I've personally have learned a lot about high-performance computing. However, up until about 1 year ago, I had only cursory understanding of different programming regimes. Sure, I could implement a 4-th Order Runge-Kutta Integrator or a Markov Chain Monte Carlo, but I had only cursory understanding of what a Hash Table was. I was simultaneously over-qualified and woefully under-qualified for most Software Engineering positions.&lt;/p&gt;

&lt;p&gt;I was always interested in computers though, and I started to realize that maybe I didn't want to be a research scientist for the rest of my life, and that I should really start to let myself explore. No harm in looking after all, so I decided to learn a bit about how the other 99% of coders actually do things.&lt;/p&gt;

&lt;h2&gt; Early Exploration &lt;/h2&gt;

&lt;p&gt;As I really didn't have any idea where to start, I decided to start looking into Quantitative Analysis and Data Science. Both I knew were good-paying careers, and they are traditionally thought to be one of the most common industry starting points with people with a PhD in Physics or Astrophysics.&lt;/p&gt;

&lt;p&gt;For these, I used a combination of &lt;a href="https://www.datacamp.com" rel="noopener noreferrer"&gt; Data Camp&lt;/a&gt; and &lt;a href="https://www.kaggle.com" rel="noopener noreferrer"&gt; Kaggle &lt;/a&gt;. Between the two, I would lean more towards recommending Kaggle for Data Science. &lt;/p&gt;

&lt;p&gt;I spent a quite a few months exploring both topics, and while interesting, I couldn't help but be easily distracted by other topics. As my PhD research was starting to be going towards scientific software development, refactoring my scripts into something that anyone could use, I became interested in learning more about Software Engineering and Development. &lt;/p&gt;

&lt;p&gt;So, without much an idea as to how to start, I started where I first learned Python back in 2013: &lt;a href="https://www.codecademy.com" rel="noopener noreferrer"&gt; Codecademy &lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While I spent a significant time exploring, I would recommend anyone looking for a change to do the same. Find something that fills you with excitement. We must permit ourselves to explore if we are to find new opportunities.&lt;/p&gt;

&lt;h2&gt; Learning Computer Science - Algorithms &amp;amp; Data Structures &lt;/h2&gt;

&lt;p&gt;At Codecademy, after looking through their catalog a bit, I decided to purchase a premium subscription and take their Computer Science "Career Path."&lt;/p&gt;

&lt;p&gt;While it started off with the very basics (e.g. Python syntax), it did ramp up quite nicely. The path goes through all of the basics for algorithms and data structures, teaching you in the interactive lesson format that Codecademy is famous for.&lt;/p&gt;

&lt;p&gt;I finally knew what a Hash Table was and I developed an adoration of Graph search algorithms. I would rate this a 9.5/10 experience, with only some minor complaints about the occasional bug that I found in the Codecademy environment.&lt;/p&gt;

&lt;p&gt;In order to supplement this education a bit, I built a GitHub repository where I tried to implement all the major data structures and algorithms. I also started to make some very basic projects.&lt;/p&gt;

&lt;p&gt;One project that I did that I found especially helpful in learning both the usefulness of Hash Tables and the power of Depth First Search was a command line app that recommends paths to get between two points in the Maryland-DC-Virginia subway system (&lt;a href="https://github.com/cjtaylor1990/wmata_pathfinder" rel="noopener noreferrer"&gt; WMATA Pathfinder&lt;/a&gt;). It's was a fun challenge.&lt;/p&gt;

&lt;p&gt;After learning the fundamentals, I started going through some of the Easy &lt;a href="https://leetcode.com/" rel="noopener noreferrer"&gt; LeetCode &lt;/a&gt; questions, and I learned that I really enjoy doing these types of Technical Interview coding questions. Puzzles have always been fun for me. However, it must be noted that I did NOT go overboard on LeetCode. Take studying seriously, but don't stress yourself out over it, because burn out is a risk, and one that one should always try to avoid.&lt;/p&gt;

&lt;h2&gt; Web Development &lt;/h2&gt;

&lt;p&gt;As I thought that the Computer Science Career Path was quite good on Codecademy, I picked up their Web Development path shortly after completing the first path.&lt;/p&gt;

&lt;p&gt;It had been years since I touched any HTML or CSS, so this process was a bit slower than the previous one. I also did not know anything about JavaScript, and was initially completely baffled by asynchronous programming. However, Codecademy was very good at explaining things, and the interactive lessons forced me to immediately apply what I'm learning.&lt;/p&gt;

&lt;p&gt;I am currently nearing the end of this Path right now, and I'm happy to say that it was a good introduction to Full Stack Development. Their React lessons were especially nice, as well as their backend lessons.&lt;/p&gt;

&lt;p&gt;The biggest piece of advice that I could give someone who wanted to learn Web Dev, would be to make sure you do projects outside of online tutorials. Online tutorials have a tendency to hold your hand, and while this is important in the initial exposure to the topic, I feel like I learned more about using React and API integration creating my own Weather App from scratch as compared to doing a step-by-step tutorial, even if the tutorial will likely have me building something much more complicated (e.g. Spotify playlist builder).&lt;/p&gt;

&lt;h2&gt; Hacktoberfest 2019 - Learning To Collaborate &lt;/h2&gt;

&lt;p&gt;After all of this (along with an especially busy year in my PhD studies), I was gaining some confidence in myself, though I realized I didn't have really much experience with development collaboration. While you have collaborators, for better or worse, so much of science is incredibly isolated. As such, I decided to give myself a push.&lt;/p&gt;

&lt;p&gt;I had always been interested in the concept of participating in a hackathon, but I wasn't entirely sure about the process, as I'm shy and I am still very green. When I stumbled upon Hacktoberfest, as it was an online hackathon, I no longer had excuses. I signed up, and I got to work making pull requests.&lt;/p&gt;

&lt;p&gt;Much of my experience with Hacktoberfest can be found in a &lt;a href="https://dev.to/cjtaylor1990/my-hacktoberfest-experience-as-a-rookie-3mp7"&gt; previous post &lt;/a&gt;, but I wanted to still mention it, because I think it is important. Collaborations teach you a lot of things, and the sooner you can get involved in one, the better.&lt;/p&gt;

&lt;h2&gt; Building My Resume &lt;/h2&gt;

&lt;p&gt;Along with everything I've talked about, I have also been working with my campus' career center (which I would highly suggest all students take advantage of if one's available), and I had turned my massive CV that spanned a decade's of scientific research into a slim, compact resume.&lt;/p&gt;

&lt;p&gt;This was incredibly difficult, and I would be lying if I said I didn't have many, many revisions. It is important however for you to get your resume as polished as possible.&lt;/p&gt;

&lt;p&gt;For PhDs who are looking to change paths, a great resource for this would be &lt;a href="https://www.amazon.com/What-Are-You-Going-That/dp/022620040X/ref=sr_1_1?crid=EP50RMHQFTD1&amp;amp;keywords=what+are+you+going+to+do+with+that&amp;amp;qid=1573106963&amp;amp;sprefix=what+are+you+going+to+do%2Caps%2C137&amp;amp;sr=8-1" rel="noopener noreferrer"&gt; "So What Are You Going to Do with That?"&lt;/a&gt; by Basalla and Debelius. It goes through much of the application process, and it also talks about changing your mindset when you write your resume.&lt;/p&gt;

&lt;p&gt;The biggest piece of advice for those that are looking to change fields would be to stop thinking of yourself AS whatever you do, but instead think of yourself as a person who just so happens to do what you currently do. For academics, this can be a HUGE challenge, but it is worth the time required for the necessary self-reflection. Make sure you make those skills prominent in your resume, as those are what a potential employer will look for.&lt;/p&gt;

&lt;p&gt;To draw upon an analogy from theater, you are a person with skills, and those skills are like the stage, the props, the actors, and the backdrop in a theatre. Those same people and items can be used to perform a multitude of plays and operas, but it is ultimately you, the playwright of your life, to decide what story they will tell.&lt;/p&gt;

&lt;p&gt;For myself, I realized I was not an Astrophysicist, but a person with a passion for coding who chose to do Astrophysics. By making my resume about my skills, I was making a statement that I am more than whatever my past choices have been. I'm adaptable.&lt;/p&gt;

&lt;h2&gt; Applying - I Was Brave And Sleep Deprived &lt;/h2&gt;

&lt;p&gt;I had been polishing my resume for weeks, and my career counselor suggested I put out a few applications, just to get used to the process. I was nervous, but finally after a long (but successful) night of debugging the code for my PhD project, I decided that I was feeling brave enough to venture forth into the land of Indeed and LinkedIn Jobs.&lt;/p&gt;

&lt;p&gt;After a bit of a random walk, I happened upon a listing for one particular company that I had always regarded with great respect, but one that I considered myself woefully unprepared to actually seriously apply for. If I was more conscious and had a full night's rest, I might have hesitated, but I decided to pull the trigger and apply. This was at the end of September 2019. I still remember that my hands were especially sweaty and the day after, I thought I was crazy. The tired version of myself clearly had gotten a bit too sure of itself! I was expecting my application to go into the trash immediately (and once again, another example of imposter syndrome). &lt;/p&gt;

&lt;p&gt;I didn't think about it for a while. I continued to hone my skills a bit, do some more LeetCode, and have some fun with Hacktoberfest.&lt;/p&gt;

&lt;h2&gt; An Unexpected Journey &lt;/h2&gt;

&lt;p&gt;Very much like Gandalf showing up at the door of the hobbit, Bilbo, and tricking him into throwing a party, a couple of weeks go by and I suddenly received an email about taking an initial interview and coding assessment. I was a bit perplexed...were they positive they were emailing the right person? I decided to be brave and said yes, deciding that I would rather take the risk and go down in flames than not having tried at all.&lt;/p&gt;

&lt;p&gt;I spent some more time on LeetCode, doing a couple of Medium questions and still failing miserably at the Hard questions. I tried my hardest to prepare, but obviously I had other obligations that kept me from optimizing my study times. I just wanted to try my best though, and that's what I aimed for.&lt;/p&gt;

&lt;p&gt;I went through the initial assessment and interview, thought I did okay, but didn't find the optimal solutions. I had some more confidence in myself, but I wasn't expecting to advance further.&lt;/p&gt;

&lt;p&gt;Like Bilbo however, I wasn't prepared for what was going to happen. The next thing I know, I am contacted, being invited to (figuratively) take on the dreaded On-Site Coding Interview Dragon.&lt;/p&gt;

&lt;p&gt;I was in a bit of a daze at first...I pinched myself...I was excited...I was terrified.&lt;/p&gt;

&lt;h2&gt; (Coding) Riddles In The Dark &lt;/h2&gt;

&lt;p&gt;I had a short time to prepare, and I felt terribly, and I mean, TERRIBLY unprepared. I knew that I had to brush up on so much, and I had to really bolster my Data Structures and Algorithms. It was a bit overwhelming, and I was stressing out so much in the time leading up to the on-site, and I could only hope that I wouldn't get Smaug as an interviewer. It was certainly Out of the Frying Pan and Into the Fire.&lt;/p&gt;

&lt;p&gt;LeetCode wasn't enough as I never was really satisfied with their explanations (if there was an explanation). I needed to really understand the these type of coding questions on a fundamental level, as that is really the only way that I knew that I would be likely to be able to apply the problem solving techniques in an interview setting.&lt;/p&gt;

&lt;p&gt;Suddenly, in the dark depths of studying, I find my One Ring To Rule Them All: &lt;a href="https://www.algoexpert.io" rel="noopener noreferrer"&gt; AlgoExpert &lt;/a&gt;. I found this platform absolutely fantastic, and I would recommend it to anyone who is trying to master Algorithms and Data Structures.&lt;/p&gt;

&lt;p&gt;Unfortunately, AlgoExpert is not a free service, and thus may be out of reach for some people. For those who need to do this type of studying on a tight budget, there does seem to be plenty of options out there. I would suggest trying the videos put out by &lt;a href="https://www.youtube.com/watch?v=bum_19loj9A&amp;amp;t=7s" rel="noopener noreferrer"&gt; CS Dojo &lt;/a&gt; or &lt;a href="https://www.youtube.com/watch?v=RBSGKlAvoiM" rel="noopener noreferrer"&gt; freeCodeCamp &lt;/a&gt;. That being said, if you have the money, AlgoExpert is well worth the investment.&lt;/p&gt;

&lt;p&gt;If I were to go back and give myself some advice about this pre-interview build up, I would tell myself NOT TO BE SO STRESSED OUT! I should never have let my imposter syndrome affect me like it did, making it often hard to sleep or concentrate.&lt;/p&gt;

&lt;p&gt;Sometime stress can be the fire needed to ignite greatness in you. Just be careful as to not get burned. Take care of yourself. If you've gotten this far in the process, then you're doing something right!&lt;/p&gt;

&lt;h2&gt; The Interview &lt;/h2&gt;

&lt;p&gt;Unfortunately, I am unable to tell you details of the interview itself (I can confirm though that it did not involve slaying a dragon). It was difficult, and to tell you otherwise would be lying. That being said, for all of the cultural dread that surrounds talk of technical interviews, it wasn't AS bad as I was expecting.&lt;/p&gt;

&lt;p&gt;The interviewers were more than happy to give me hints and clarifications, and completely understood that I was nervous. I realized that they weren't there to torture me for hours, but instead just to talk to me and to see how my thoughts came together.&lt;/p&gt;

&lt;p&gt;Talk to your interviewers and remember to ask questions. They won't bite.&lt;/p&gt;

&lt;h2&gt; Epilogue &lt;/h2&gt;

&lt;p&gt;After the interview, I felt I did okay, but not great. I thought it was all going to be a stressful learning experience, and that would be it. I still really wanted to try to work for the company, but I thought I had fallen just short. I went back to the hotel and ate two whole pints of Ben &amp;amp; Jerry's ice cream, letting myself just relax and try not to agonize over how things went.&lt;/p&gt;

&lt;p&gt;I returned back to my normal life, my regular PhD research project and my late-night forays into the land of Software Development. That is, until I get the call from the recruiter, asking if I would like to continue into the offer process.&lt;/p&gt;

&lt;p&gt;I don't remember a whole lot about the next few minutes, only that they told me I would know more in the next few days. I then proceeded to power-walk through the Astronomy Department multiple times just to eliminate some adrenaline. I've not been that excited in a very, very long time.&lt;/p&gt;

&lt;p&gt;I went home to celebrate, eating another pint of Ben and Jerry's (I swear I don't have a problem) and calling my family and close friends with details.&lt;/p&gt;

&lt;p&gt;Even if it would have turned out differently, I would have still been proud of myself, because I tried my best, and I know I still have a long road ahead of me in transitioning from an Astrophysicist to a Software Engineer.&lt;/p&gt;

&lt;p&gt;It's important to remember that every experience you have in your professional life can be useful if you allow it to be. Successes boost your confidence and act as the building blocks to the path forward. Failures are equally as important, as they teach you to be humble and be aware of the areas that you can improve upon. Always do your best, and even if you fail, you can always come back stronger.&lt;/p&gt;

&lt;p&gt;I will say that I'm writing this without having the offer letter officially in front of me, and it's entirely possible that the company and I can't come to an agreement on terms. If so, that's fine. I still learned something, and I feel much better about myself and my future in this new career path that I've chosen to walk down.&lt;/p&gt;

&lt;p&gt;In writing all of this, I am not in any way trying to brag. I just want my fellow rookies, and especially those that come from a non-traditional background, to know that you can succeed. Don't let your self-doubt hold you back. Don't let your stress overwhelm you. Take care of yourself and don't be afraid to go after your dreams and passions.&lt;/p&gt;

&lt;p&gt;You are the author to your own story. Now write it.&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My Hacktoberfest Experience As A Rookie</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Tue, 22 Oct 2019 06:11:05 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/my-hacktoberfest-experience-as-a-rookie-3mp7</link>
      <guid>https://dev.to/cjtaylor1990/my-hacktoberfest-experience-as-a-rookie-3mp7</guid>
      <description>&lt;p&gt;As mentioned in my &lt;a href="https://dev.to/cjtaylor1990/my-final-year-of-graduate-school-and-finding-a-new-path-forward-56l6"&gt;previous post&lt;/a&gt;, I am an Astrophysics PhD student who is trying to break into Software Engineering. I have experience with programming, but in a much different context and without much of a sense of true collaboration. Up until this October, I never participated actively in the Open Source community nor had I participated in any hackathons.&lt;/p&gt;

&lt;p&gt;I was on a Web Dev Discord server and someone linked to the Hacktoberfest website, and at first I had no idea what it was or if I could even contribute anything worthwhile. Life is short though, and I was looking for a way to dive into development, so I signed up.&lt;/p&gt;

&lt;p&gt;After I began, I had absolutely no idea where to begin. A lot of the problems listed on the suggested repos on the main Hacktoberfest page was a bit over my head at the time, so I had to do a bit of digging.&lt;/p&gt;

&lt;p&gt;I quickly learned that GitHub was awash in easy beginner repositories, and I made a few PRs to a couple of them. I admit, they were low-effort, and I didn't know what I was doing at the time. These were later deemed ineligible, which I can understand why. Even if I was proud that I was able to write depth-first-search from memory in Python and JavaScript, it wasn't really contributing.&lt;/p&gt;

&lt;p&gt;I wish I could give some good tips for beginners about where to find good problems, but really how I ended up finding a niche this Hacktoberfest was by becoming curious about the repos that were popping up in my suggestions. It was perhaps a bit inefficient, but it worked, and it allowed me to get a small sample of what is in the vast GitHub ocean.&lt;/p&gt;

&lt;p&gt;Finally, I stumbled upon a repository for an &lt;a href="https://github.com/you-dont-need/You-Dont-Need-Lodash-Underscore" rel="noopener noreferrer"&gt;Eslinter plugin&lt;/a&gt;. I had absolutely no experience with dealing with making my own linter, and it all seemed initially rather complicated.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I was just about to click away from it when I noticed an Issue that seemed just downright bizarre. I wanted to know more. I wanted to know what was going on and solve it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coders are ultimately problem solvers. Find the problems that you find so intriguing that you can't stop thinking about them. Let that obsession drive you.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I went to work, made a fork and started to use the tried-and-true method of solving weird bugs: liberal use of console.log().&lt;/p&gt;

&lt;p&gt;After a couple of days, I found the issue, made the changes needed, and proudly put in a pull request. All tests passed. &lt;em&gt;I had contributed!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A few days go passed, my pull request got approved, and a new version of the plugin was pushed out...but unfortunately, the change I made was incomplete. Forgetting to check one small condition resulted in the plugin throwing an error for some users. Issues were coming in and people were quite unhappy. Needless to say, my feeling of achievement quickly changed to a feeling of failure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The maintainers were very kind and did not fault me at all. They instead encouraged me, and I decided to not only find the problem, but make sure it didn't happen again.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The bug amounted to the linter no longer being capable of handling the evaluation of higher-order functions. I fixed the bug that I induced and made a test specifically for higher-order functions. I put in another pull request and I got a lot of good feedback from the maintainers and the users. I learned from my mistake and I feel like a better programmer because of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It is important to remember that we all make mistakes. What is important that we are humble and we learn from them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Since then, I've been volunteering to handle tickets and make enhancements to that repository, and have now been made a member of the development team.&lt;/p&gt;

&lt;p&gt;My initial feeling of uncertainty being capable of contributing to Open Source was severely misguided. Just today I put in my order for my Hacktoberfest t-shirt, and have now a total of 10 PRs for October. I'm more than happy to accept free merch, and will be wearing that t-shirt proudly, but honestly I would happily do this again without any of that. It has been a blast contributing to Open Source and I absolutely will be continuing to do so into the foreseeable future.&lt;/p&gt;

&lt;p&gt;I want to close this out by not talking about myself (as I feel like much of this post has been about me), but to address all those who are either too afraid or too uncertain in themselves to dip their toe into contributing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop being hesitant and jump. Follow where your curiosity takes you. You never know where you may end up. If you make a mistake, accept it and learn from it. I can assure you that most people will be understanding. It's okay to be a rookie. Everyone was new at one time, and chances are, you are probably a lot more capable than you think you are. Every journey starts with allowing yourself to take those first few steps.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>hacktoberfest</category>
      <category>beginners</category>
    </item>
    <item>
      <title>My Final Year Of Graduate School And Finding A New Path Forward</title>
      <dc:creator>Corbin Taylor</dc:creator>
      <pubDate>Sun, 20 Oct 2019 05:58:47 +0000</pubDate>
      <link>https://dev.to/cjtaylor1990/my-final-year-of-graduate-school-and-finding-a-new-path-forward-56l6</link>
      <guid>https://dev.to/cjtaylor1990/my-final-year-of-graduate-school-and-finding-a-new-path-forward-56l6</guid>
      <description>&lt;p&gt;This is my first post on Dev, so forgive me if it seems unpolished or if I somehow am missing some common conventions. Any guidance or constructive criticism is welcomed.&lt;/p&gt;

&lt;p&gt;I am writing this post in the Fall Semester of my last year as a PhD student in Astrophysics. I have spent twelve years on my undergraduate and graduate degrees, and have years of experience analyzing data and creating computer simulations to better understand the Universe. This subject has become, like many academics I encounter, intertwined with my own personal identity.&lt;/p&gt;

&lt;p&gt;While I am very proud of my accomplishments as a student and a scientist, I have come to an uncomfortable realization over the last year. After years of stress, late nights, and sacrificing for my scientific work, &lt;em&gt;I don't know if I want to be an Astrophysicist any longer.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is very hard to admit to myself, but I slowly am letting myself have that freedom to explore who I really want to become. My great passion for computer programming and problem solving led me to start to learn more about Software Engineering, to learn some basic Computer Science, Algorithms, and Web Development. I participated in Hacktoberfest, got involved (and am now a member of) an open source JavaScript project, and have joined the wonderful Dev community.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I feel happy. I feel a passion again that I thought I had lost.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I am still working on changing my mindset. I still feel at times like I'm a bit crazy, or that I'm not good enough to make that kind of abrupt transition from pure research into industry. I have always been one to encourage my friends to follow their happiness and to believe in themselves, and I need to learn to take my own advice.&lt;/p&gt;

&lt;p&gt;I am writing this post to tell people like me, people who might be unhappy with their current circumstances, that it is okay. We are often much deeper and much more capable than we often think of ourselves. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give yourself the freedom to explore your interests and passions, for it is there where you may start to construct a path forward.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I have a long path ahead of me, but I am happy to begin my journey.&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
