<?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: morgana</title>
    <description>The latest articles on DEV Community by morgana (@_morgan_adams_).</description>
    <link>https://dev.to/_morgan_adams_</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%2F88942%2Fb237db94-129a-4bc5-bf17-5d1269963124.jpg</url>
      <title>DEV Community: morgana</title>
      <link>https://dev.to/_morgan_adams_</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/_morgan_adams_"/>
    <language>en</language>
    <item>
      <title>A Tech Burnout Story</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Wed, 30 Oct 2019 07:58:46 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/a-tech-burnout-story-295</link>
      <guid>https://dev.to/_morgan_adams_/a-tech-burnout-story-295</guid>
      <description>&lt;p&gt;A couple months ago, I sat on the beach in Hawaii with nothing but disdain for all things tech. I stared at the watercolor sunset, feeling empty and drained thinking that a career change was in order. I was complete burnout in the tech industry.&lt;/p&gt;

&lt;p&gt;The first tech job I landed was as a freshman in college 11 years ago and I absorbed everything. No blogs, books, documentation, tech courses, or tech talk escaped my notice. By the time I graduated, I was already bringing a lot to the table. I helped build out our Site Reliability Engineering team (SRE), and took on work I later learned was a few levels above a new grad. You might have even called me a “rockstar/ninja/wizard/10x/&amp;lt;insert some other bs term&amp;gt;” engineer.&lt;/p&gt;

&lt;p&gt;I was an unstoppable freight train racking up accomplishments left and right.&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%2Fi2.wp.com%2Fmedia.giphy.com%2Fmedia%2F3oz8xPduTKi2Ou4yHe%2Fgiphy.gif%3Fw%3D640%26ssl%3D1" 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%2Fi2.wp.com%2Fmedia.giphy.com%2Fmedia%2F3oz8xPduTKi2Ou4yHe%2Fgiphy.gif%3Fw%3D640%26ssl%3D1" alt="Conan unstoppable kick gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Burned Out
&lt;/h2&gt;

&lt;p&gt;Fast forward to 2018. Work was a burden. Waking up? Cumbersome. Want me to coordinate migrating a data center for 500 engineers? I’ll look at some postings on LinkedIn instead. Another incident? Another security issue? Yawn. Who cares. It’s just a job.&lt;/p&gt;

&lt;p&gt;I became bitter and at times cantankerous. Work wasn’t interesting. Drowning in my depression, I started Googling for an interesting non-tech job. I needed something else because…&lt;/p&gt;

&lt;p&gt;I was completely… and utterly… burnt out.&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%2Fi1.wp.com%2Fmedia.giphy.com%2Fmedia%2Fl1KVaj5UcbHwrBMqI%2Fgiphy.gif%3Fw%3D640%26ssl%3D1" 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%2Fi1.wp.com%2Fmedia.giphy.com%2Fmedia%2Fl1KVaj5UcbHwrBMqI%2Fgiphy.gif%3Fw%3D640%26ssl%3D1" alt="Tired baby gif"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Catching My Breath
&lt;/h2&gt;

&lt;p&gt;About the end of 2018, I reach out to a friend that had tried to recruit me a few times before then. He proceeded to tell me about the emphasis his employer put on life balance and taking care of ourselves. I took a shot and applied.&lt;/p&gt;

&lt;p&gt;There wasn’t much to tell about the interview process except that they just wanted to hear my experience – no tricky code questions or anything.  &lt;/p&gt;

&lt;p&gt;They gave me an offer! The compensation was way more than enough to lure me over and even get me a little excited about the job. That burst of excitement didn’t last.&lt;/p&gt;

&lt;p&gt;By the end of my first month I knew I was going to be fired. I had not accomplished much and I was desperate for a win. Just one simple win was all I needed to hold me over until I found a non-tech job. Then came my month 1 on 1 with my manager.&lt;/p&gt;

&lt;p&gt;My bullet list of small steps forward was not anything to gloat about, but I figured I could sugar coat it just enough. The response shocked me.  &lt;/p&gt;

&lt;p&gt;“You’re doing great! Lots of real steady progress there! Yeah, let’s get you started on these projects now.” My jaw dropped and a small bit of tension relaxed in my mind.&lt;/p&gt;

&lt;p&gt;It only got better from there. I was encouraged to attend and help out at conferences. They gave me all the flexibility in the world to take care of life things mid-day. Need to schedule a doctor’s appointment? Pick up kids from school every day? Np. Just let you lead know when you need to step away. We’ll make it work. Life happens and we need balance.  &lt;/p&gt;

&lt;p&gt;I had heard their philosophy and approach to work-life balance and even now it still boggles my mind, but I love it. Maybe I could do this tech thing still – if only I was still interested in it.&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%2Fi0.wp.com%2Fgif-free.com%2Fuploads%2Fposts%2F2017-03%2F1488823438_work-life-balance.gif%3Fw%3D640" 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%2Fi0.wp.com%2Fgif-free.com%2Fuploads%2Fposts%2F2017-03%2F1488823438_work-life-balance.gif%3Fw%3D640" alt="stick figure balancing life and work on a ball"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Vacation
&lt;/h2&gt;

&lt;p&gt;Jumping ahead a few months, my tech lead reminded me that I hadn’t yet taken a proper vacation this year. I scheduled some time off and she said “No, take 2 weeks. Trust me – you’ll feel so refreshed”.&lt;/p&gt;

&lt;p&gt;Since I had not taken anything beyond a staycation or family visit in at least 6 years, I decided to pamper myself. After looking for a nice vacation package I settled on Hawaii. I had heard great things from others who had visited and the idea of sitting on a beach with a book sounded divine.&lt;/p&gt;

&lt;p&gt;I finally arrived. On my first day as I sat watching the sunset with a smoothie in hand, I wondered what it would be like to work at a resort. Maybe I would get free smoothies? That sounded better than writing up some code or reading another blog post about javascript. I sipped on my smoothie and enjoyed the warm breeze as the setting sun painted the sky… and I relaxed.&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%2Fi2.wp.com%2Fmorgandadams.com%2Fwp-content%2Fuploads%2F2019%2F10%2Fimage.png%3Ffit%3D640%252C480%26ssl%3D1" 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%2Fi2.wp.com%2Fmorgandadams.com%2Fwp-content%2Fuploads%2F2019%2F10%2Fimage.png%3Ffit%3D640%252C480%26ssl%3D1" alt="Morgan relaxing on the beach and watching the sunset"&gt;&lt;/a&gt;What IDGAF actually looks like&lt;/p&gt;

&lt;h2&gt;
  
  
  Burnout Mostly No More
&lt;/h2&gt;

&lt;p&gt;The time in Hawaii was exactly what I needed. It was as if I had popped a healing potion and I was ready to code my brains out again. I was still in a fragile position though and I need to adopt a better balance in my life. I could still code late into the night if I wanted, but would need to make time for other hobbies. My brain clearly needed a break – and still does!&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%2Fi0.wp.com%2Fmedia1.tenor.com%2Fimages%2Faf958a5e15c0dcf6cdfb7fa2cd1a6daf%2Ftenor.gif%3Fw%3D640%26ssl%3D1" 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%2Fi0.wp.com%2Fmedia1.tenor.com%2Fimages%2Faf958a5e15c0dcf6cdfb7fa2cd1a6daf%2Ftenor.gif%3Fw%3D640%26ssl%3D1" alt="yoda saying "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This year I have started reading more (non tech things), taken up kickboxing, painting, hanging out a farmer’s markets, and whatever else sounds remotely interesting.&lt;/p&gt;

&lt;p&gt;One realization I had is that I look forward to each of these activities as much as I look forward to coding. Learning Rails and Preact so I can contribute to dev.to? When can I start? Kickboxing 3-4 times a week? Yeah let’s pummel that punching bag! Carving off 30 minutes of reading before I go to sleep? I love my local bookstore and it’s endless supply of fabulousness. Spending more time with family, teaching my dogs new tricks… YES PLEASE!&lt;/p&gt;

&lt;h2&gt;
  
  
  Some Science on Burnout
&lt;/h2&gt;

&lt;p&gt;I love learning about how our brains work and I am happy to chat anyone’s ears off about what I learn. By no stretch am I any sort of expert so I’ll make sure to refer you some reading material to tie into my experiences.&lt;/p&gt;

&lt;p&gt;Burnout causes all kinds of health problems. Everyone has unique experiences, but there are some very common results. Loneliness, depression, anxiety, and exhaustion to name a few. What’s upsetting is that this is on the rise. Not only is burnout damaging to your health, but it will take work to dig your way back out which is hard because you’ll already be exhausted.&lt;/p&gt;

&lt;p&gt;I am both socially awkward and fairly introverted. At the same time I love people and making friends. However, when I try putting myself out there, I will swear on my life that something is wrong with my face. “Why are they looking at me? Oh because we’re talking. Doh.” At work it’s no different. I often focused on trying to impress the people around me by burying myself in my work and producing amazing results. Being social can be hard, but it’s even harder if you allow yourself to absorbed into the bottomless hole called “work”. If it starts to consume you, not only do you socially isolate yourself, you mentally, emotionally, and physically isolate yourself.&lt;/p&gt;

&lt;p&gt;Here’s some reading material you should thumb through if you want to learn more:  &lt;/p&gt;

&lt;p&gt;Something short and sweet from Pyschology Today on Burnout – &lt;a href="https://www.psychologytoday.com/us/basics/burnout" rel="noopener noreferrer"&gt;https://www.psychologytoday.com/us/basics/burnout&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;A bit from the World Health Organization – &lt;a href="https://www.who.int/mental_health/evidence/burn-out/en/" rel="noopener noreferrer"&gt;https://www.who.int/mental_health/evidence/burn-out/en/&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Negative effects of Loneliness and Isolation – &lt;a href="https://www.sciencenews.org/article/loneliness-isolation-brain-changes" rel="noopener noreferrer"&gt;https://www.sciencenews.org/article/loneliness-isolation-brain-changes&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Another detailed article on burnout from Psychology Today – &lt;a href="https://www.psychologytoday.com/us/blog/high-octane-women/201311/the-tell-tale-signs-burnout-do-you-have-them" rel="noopener noreferrer"&gt;https://www.psychologytoday.com/us/blog/high-octane-women/201311/the-tell-tale-signs-burnout-do-you-have-them&lt;/a&gt;. In a nutshell… it can get bad. Think about it. Is your life balanced?  &lt;/p&gt;

&lt;p&gt;More details from NCBI – &lt;a href="https://www.ncbi.nlm.nih.gov/books/NBK279286/" rel="noopener noreferrer"&gt;https://www.ncbi.nlm.nih.gov/books/NBK279286/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts On Burnout
&lt;/h2&gt;

&lt;p&gt;Here are 3 things that may help you recover from burnout:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Take a vacation. A real one. Seriously. What do you want? Ignore the taskmasters you work for and ask yourself, “What do you want?”. Me? I needed that stereotype beach with a little umbrella in my drink to let myself unwind mentally.&lt;/li&gt;
&lt;li&gt;Look for balance. Are you working 20 hours a day? 16 hours a day? 12 hours a day? Take it easy. You’re actually becoming less effective by repeatedly throwing yourself at your work. Seriously, your brain cannot sustain processing that much information long-term. It needs time to recover. Find some hobbies. Some of the most effective and brilliant engineers I know have an active after-work life.&lt;/li&gt;
&lt;li&gt;The corporate rat race is a soul destroyer. There are lots of good companies for you to work at. If you are able, run like hell from a job that is misaligned with your values, goals, or life balance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here are 3 things to watch for if you think you’re burning out:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You’re more irritable, cynical, or negative than what you used to be.&lt;/li&gt;
&lt;li&gt;You’re putting in a lot of effort for things you have little control or autonomy over.&lt;/li&gt;
&lt;li&gt;You start feeling dull, empty, or like you’re wasting effort and time – in my case this tied to depression.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s not easy and I realize many people are stuck in certain bad work situations. If you have the flexibility to make the needed changes though… do it.&lt;/p&gt;

&lt;p&gt;Burnout is an ugly monster. If it comes for you or if it has found you, I’ll see you on the beach. We can bitch about “the man” together and sip on some smoothies.  &lt;/p&gt;

&lt;p&gt;Cool off and stay balanced! Reach out if you &lt;a href="https://morgandadams.com/about/" rel="noopener noreferrer"&gt;want to chat&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%2Fi1.wp.com%2Fbestanimations.com%2FAnimals%2FMammals%2FDogs%2Fpuppies%2Fadorable-cute-funny-dog-puppy-animated-gif-3.gif%3Fw%3D640" 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%2Fi1.wp.com%2Fbestanimations.com%2FAnimals%2FMammals%2FDogs%2Fpuppies%2Fadorable-cute-funny-dog-puppy-animated-gif-3.gif%3Fw%3D640" alt="Puppy shaking its head gif"&gt;&lt;/a&gt;Puppies make everyone feel better. It’s science!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://morgandadams.com/2019/10/30/a-tech-burnout-story/" rel="noopener noreferrer"&gt;A Tech Burnout Story&lt;/a&gt; appeared first on &lt;a href="https://morgandadams.com" rel="noopener noreferrer"&gt;Morgan Adams&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>burnout</category>
      <category>mentalhealth</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Learning Rails: Concepts To Know Before Starting</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Fri, 18 Oct 2019 04:04:34 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/learning-rails-concepts-to-know-before-starting-10mg</link>
      <guid>https://dev.to/_morgan_adams_/learning-rails-concepts-to-know-before-starting-10mg</guid>
      <description>&lt;h2&gt;
  
  
  Me Learning Rails
&lt;/h2&gt;

&lt;p&gt;Learning Ruby on Rails has been a fun adventure so far. Yesterday, I finished the &lt;a href="https://guides.rubyonrails.org/getting_started.html"&gt;Getting Started&lt;/a&gt; with Rails guide on &lt;a href="http://rubyonrails.org"&gt;rubyonrails.org&lt;/a&gt; which teaches how to build a simple blog app. Surprisingly, it does a thorough job of covering a number of features from working with the MVC to setting up routes and basic authentication.&lt;/p&gt;

&lt;p&gt;I often hear that Ruby on Rails has a high learning curve – I want to dispute that. After finishing the guide, I feel confident I can start building my own apps using Rails and I think others can as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Concepts to Learn to Understand Rails
&lt;/h3&gt;

&lt;p&gt;Admittedly, if you know a few things before diving into Rails, it will make a lot more sense. I plan to cover some of those things here in this post. They are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model View Controller (MVC) design pattern&lt;/li&gt;
&lt;li&gt;Web frameworks&lt;/li&gt;
&lt;li&gt;Convention over Configuration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are already familiar with these concepts, go ahead and jump into the &lt;a href="https://guides.rubyonrails.org/getting_started.html"&gt;Getting Started&lt;/a&gt; with Rails guide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;*Note&lt;/em&gt;&lt;/strong&gt; : You don’t need a lot of Ruby knowledge to start, although it certainly helps. Just having some basic-intermediate level programming experience in general would be a good start. With the heavy emphasis on convention, you don’t need much code to get functioning CRUD operations and relations.&lt;/p&gt;

&lt;p&gt;** &lt;strong&gt;Disclaimer&lt;/strong&gt; : I’ve primarily been working in Operations, Site Reliability Engineering, and Security. So if my language isn’t precise on some of this, feel free &lt;a href="https://morgandadams.com/about/"&gt;drop me a note&lt;/a&gt; so I can correct it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Model View Controller
&lt;/h2&gt;

&lt;p&gt;First, lets look at MVC.&lt;/p&gt;

&lt;p&gt;MVC is a common design pattern for the web. Although, you can see MVC in non-web applications it (and similar patterns) seems to be fairly ubiquitous around the web.&lt;/p&gt;

&lt;p&gt;I won’t dive into a lot of MVC details since there exists an abundance of documentation on the subject, but I’ll cover some highlights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Models&lt;/strong&gt; are literally the object or idea you are trying to represent: an article, a search result, a goblin, a customer, etc.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Views&lt;/strong&gt; are how you present information – specifically from the models. This often appears in the form of templates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Controllers&lt;/strong&gt; are the glue that tie models and views together. They take user requests, manipulate or retrieve models, and then render a view. In Rails, routes or URL paths map to controllers.&lt;/p&gt;

&lt;p&gt;There is certainly plenty more on the subject and I encourage you to dig in more. Here are a few MVC articles to start:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.codecademy.com/articles/mvc"&gt;Code Academy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"&gt;Wikipedia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tutorialspoint.com/mvc_framework/mvc_framework_introduction.htm"&gt;Tutorials Point&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Web Frameworks
&lt;/h2&gt;

&lt;p&gt;If you think about what goes into building a web application, there are several common elements. Some of these are authentication, MVC, connecting to databases, input validation, and URL mapping – Wikipedia covers and links to more details [&lt;a href="https://en.wikipedia.org/wiki/Web_framework#Database_access,_mapping_and_configuration"&gt;link&lt;/a&gt;]. Rails is such a framework and has a lot of these features readily available to help you focus on the business logic.&lt;/p&gt;

&lt;p&gt;Because so much is implemented for you, you don’t always know the implementation details. That’s okay. Read the docs and play around with code examples. The behavior becomes apparent quickly.&lt;/p&gt;

&lt;p&gt;Rails uses convention to conveniently tie the MVC part of the framework together. It might take a bit of getting used to it, but it’s achievable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Convention Over Configuration
&lt;/h2&gt;

&lt;p&gt;Rails focuses on Convention over Configuration. Although it might obscure some implementation details, it means less lengthy configs.&lt;/p&gt;

&lt;p&gt;Previously, I worked in setups where there are literally hundreds of config files. Ultimately, you end up with config files with outdated options and a new source of tribal knowledge.&lt;/p&gt;

&lt;p&gt;For example, the Getting Started guide you run a command to create your model. This also produces a db migration file. After running the migration, you will have a table whose name is the plural of the model. Additionally, it’ll do all the mapping between model and table attributes (Object Relational Mapping). In the end, convention saves you a lot of setup.&lt;/p&gt;

&lt;p&gt;The Rails folks cover Convention over Configuration philosophy really well [&lt;a href="https://rubyonrails.org/doctrine/#convention-over-configuration"&gt;link&lt;/a&gt;].&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting Started With Rails
&lt;/h2&gt;

&lt;p&gt;So now you know a little behind some of the key ideas behind Rails. Go follow their &lt;a href="https://guides.rubyonrails.org/getting_started.html"&gt;guide&lt;/a&gt;. It’s lengthy but it takes you from installation to a working app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7DFybzXb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i1.wp.com/morgandadams.com/wp-content/uploads/2019/10/blog-screenshot.png%3Fw%3D640%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7DFybzXb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i1.wp.com/morgandadams.com/wp-content/uploads/2019/10/blog-screenshot.png%3Fw%3D640%26ssl%3D1" alt="screenshot of blog app"&gt;&lt;/a&gt;Screenshot of the blog app&lt;/p&gt;

&lt;p&gt;When you finish, you will have worked with the MVC, routes, security, authentication, and a database. It’s just shallow enough to cover the important highlights and detailed enough to see how powerful it can be. Happy coding!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;*NOTE&lt;/strong&gt; : On the installation, you’ll need to install a few extra dependencies: nodejs, yarn, ruby-dev, build tools, and libz-dev.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://morgandadams.com/2019/10/18/learning-rails/"&gt;Learning Rails: Concepts To Know Before Starting&lt;/a&gt; appeared first on &lt;a href="https://morgandadams.com"&gt;Morgan Adams&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>rails</category>
      <category>ruby</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Getting a Tech Job with No Experience</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Fri, 15 Feb 2019 06:17:42 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/getting-a-tech-job-with-no-experience-1pgb</link>
      <guid>https://dev.to/_morgan_adams_/getting-a-tech-job-with-no-experience-1pgb</guid>
      <description>&lt;p&gt;I see so many folks out there trying to make their way into tech. They are often frustrated because they keep seeing “Entry-level with 2 years of experience” (yeah it's dumb and doesn't make sense), and it deters them from applying. Fortunately, there’s a great way to handle this and land that first tech job when you have no experience. This post shares what I experienced, and what I have seen others experience when trying to land that first job.&lt;/p&gt;

&lt;h2&gt;
  
  
  My First Interview
&lt;/h2&gt;

&lt;p&gt;My eyes scanned the job board looking for something with programming. It was 2008 and I was brand new freshman at college. I had been getting into tech since high school where I started programming.&lt;/p&gt;

&lt;p&gt;As I reached the last listing, I sighed. I qualified for literally none of the posted jobs. Even in college they still expect you to have X amount of experience for a tech job and I had no experience.&lt;/p&gt;

&lt;p&gt;Luckily, I knew a friend of a friend who worked for the on campus IT department. I gave him my over-inflated resume and of course landed an interview! Connections, y’all!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wL2xab95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i2.wp.com/media.giphy.com/media/V1NByByIuQuAg/giphy.gif%3Fw%3D640%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wL2xab95--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i2.wp.com/media.giphy.com/media/V1NByByIuQuAg/giphy.gif%3Fw%3D640%26ssl%3D1" alt="nerd dancing gif" width="500" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Interviewer: Are you familiar with data structures?&lt;/p&gt;

&lt;p&gt;Me: @_@ Huh?&lt;/p&gt;

&lt;p&gt;They proceeded to explain what a data structure is.&lt;/p&gt;

&lt;p&gt;Me: Oh yeah I know arrays! (If you aren’t familiar with data structures, arrays are barely even scratching the surface)&lt;/p&gt;

&lt;p&gt;I didn’t get the job.&lt;/p&gt;

&lt;p&gt;Instead, I ended up doing some fancy spreadsheets at the university library and some custodial work. It paid the bills at least.&lt;/p&gt;

&lt;p&gt;Based on the coursework ahead of me, I was about 2 semesters away from landing any kind of programming job.&lt;/p&gt;

&lt;p&gt;However, they kept my resume on file…&lt;/p&gt;

&lt;h3&gt;
  
  
  Getting My First Tech Job
&lt;/h3&gt;

&lt;p&gt;One semester after my dismal interview, I was called and invited for an interview in the same office as my first interview.&lt;/p&gt;

&lt;p&gt;Me: Look this sounds great, but I’m afraid you’re wasting your time. I already interviewed and they said no.&lt;/p&gt;

&lt;p&gt;Them: This is for a different job and they want to interview you.&lt;/p&gt;

&lt;p&gt;Me: This will be a waste of time.&lt;/p&gt;

&lt;p&gt;Them: Do you want to interview or not?&lt;/p&gt;

&lt;p&gt;Pro tip: Don’t be like me. If you want the job, take the interview. Luckily the person on the phone was patient as I ultimately accepted the invitation.&lt;/p&gt;

&lt;p&gt;The day of the interview approached like a death march. The last interview was still vivid and my nerves ate at me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--c4a_dWS2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i2.wp.com/media.giphy.com/media/G4Ihli2UThrBS/giphy.gif%3Fw%3D640%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--c4a_dWS2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i2.wp.com/media.giphy.com/media/G4Ihli2UThrBS/giphy.gif%3Fw%3D640%26ssl%3D1" alt="nervous chewing gif" width="460" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I planned on talking about my ‘A’ in my intro to computer science class to show it had potential.&lt;/p&gt;

&lt;p&gt;The subject never came up and I was again bumbling through another excruciating interview.&lt;/p&gt;

&lt;p&gt;After I had told them for the millionth time “I don’t know”, they asked a question I could finally address.&lt;/p&gt;

&lt;p&gt;Interviewer: What projects have you worked on?&lt;/p&gt;

&lt;p&gt;Me: Oh, I made this pong game. However, it doesn’t have any bricks that disappear. As a result, it just bounces off the walls and you get a point every time you catch it before it falls off the bottom of the screen. I even made it two player! One person uses the arrow keys and the other uses a, s, d, and w. Additionally, I also made a chat program, so I know about sockets and threading and stuff.&lt;/p&gt;

&lt;p&gt;Interviewer: Do you have them? (I had a thumb drive on hand and the most brick-like laptop you had ever seen)&lt;/p&gt;

&lt;p&gt;We continued talking about my projects for 15 minutes. I figured this was a consolation question so the interview wouldn’t be a total joke. They then asked me to step into the hall for a few minutes.&lt;/p&gt;

&lt;p&gt;After 5 unbearable minutes, they brought me back in, “We want to give you the job”. My soon to be manager handed me a monstrous book, “You start in two weeks. Learn Linux”.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bo49eEkz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i2.wp.com/media1.giphy.com/media/b1tFj4x3BN3hK/giphy.gif%3Fw%3D640%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bo49eEkz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i2.wp.com/media1.giphy.com/media/b1tFj4x3BN3hK/giphy.gif%3Fw%3D640%26ssl%3D1" alt="Ron wtf gif" width="500" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The Lesson
&lt;/h3&gt;

&lt;p&gt;Sometime after I started, I asked them why they hired me. They said I was green, but that I showed potential with my personal projects and they wanted to take a chance on me (for the non-English speakers out there, calling someone “green” means that they are new).&lt;/p&gt;

&lt;p&gt;When you have no experience for your desired job in tech, make your own. If you don’t have any ideas for a project then make a chat app, make pong, make the best looking calculator with HTML/CSS/JS that you can, make a personal portfolio webpage with your mini projects, get a certification, or whatever else comes to mind. You might not have a few years of tech experience in a professional setting, but you _ &lt;strong&gt;can&lt;/strong&gt; _ demonstrate that you have experience for the job with projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Note on Recruiters
&lt;/h2&gt;

&lt;p&gt;What I’ve learned over the years is that tech recruiters often don’t require you to literally have X amount of experience even though the job requirement says you do. If they ask for 1 year of experience and you have none, list your personal projects toward the top of your resume. That way they can see that you can do something and that may just satisfy their requirement. That’s far more important than a job like my fancy spreadsheets I made at the university library or the custodial job I had before that.&lt;/p&gt;

&lt;p&gt;Showing what you can do as soon as possible will help them see where you could fit on a team.&lt;/p&gt;

&lt;p&gt;Think of the “X years of experience” requirement more like a band. 1 year of experience might be 0-2 depending on what you can demonstrate to the interviewer. 5 years of experience might really be 2-5 years of experiences. Etc.&lt;/p&gt;

&lt;p&gt;Ultimately, potential employers are looking for a good fit. The job requirements are often just their ideal which either is in short supply, or non-existent. Bonus: hiring managers often assume you will have a ramp up period in which you may have to learn some of the skills need for the job while on the job.&lt;/p&gt;

&lt;p&gt;After working tech jobs for over 10 years now, I have never had a job for which I met every requirement – that includes years of experience.&lt;/p&gt;

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

&lt;p&gt;Don’t get me wrong, there are jobs and recruiters that are sticklers about their requirements, but my experience is that is not the general case. They know that they have to fight for the budding talent out there. There’s a lot you can do to prepare for that next gig and there’s a lot you can do to craft that resume so that they readily see the fabulous-ness you can bring to the table.&lt;/p&gt;

&lt;p&gt;If you don’t have the experience, make your own and get that first tech job!&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://morgandadams.com/tech-job-without-experience/"&gt;Getting a Tech Job with No Experience&lt;/a&gt; appeared first on &lt;a href="https://morgandadams.com"&gt;Morgan Adams&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>career</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Caesar Cipher Implementation in Python</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Sun, 27 Jan 2019 01:23:34 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/caesar-cipher-implementation-in-python-2fp3</link>
      <guid>https://dev.to/_morgan_adams_/caesar-cipher-implementation-in-python-2fp3</guid>
      <description>&lt;h2&gt;
  
  
  Intro: About the Caesar Cipher
&lt;/h2&gt;

&lt;p&gt;The Caesar Cipher is a simple cipher that has been around for a long time. Julius Caesar used it in some of his correspondence over 2000 years ago. It has applications in other ciphers, but offers no useful level of security due to how easy it is to decipher.&lt;/p&gt;

&lt;p&gt;The cipher works by shifting each letter in a message the same amount for each letter. For example, if I set my rotation factor to three, the letter ‘a’ yields ‘d’.&lt;/p&gt;

&lt;p&gt;To see this more clearly, the diagram below demonstrates how to handle shifts that reach the end of the alphabet. As the shift reaches the end of the alphabet, the ‘z’ wraps around and becomes ‘c’ using a shift of three.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uqrz-5IM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/cdn.instructables.com/FZZ/XPQ8/IRTDSFHC/FZZXPQ8IRTDSFHC.LARGE.jpg%3Fw%3D640%26ssl%3D1" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uqrz-5IM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i0.wp.com/cdn.instructables.com/FZZ/XPQ8/IRTDSFHC/FZZXPQ8IRTDSFHC.LARGE.jpg%3Fw%3D640%26ssl%3D1" alt="" width="640" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let’s take a more complete example. If we use a right shift of 20 and and apply it to each letter in the message “Hello World!”, we get the ciphertext “Byffi Qilfx!”&lt;/p&gt;

&lt;p&gt;Conversely, if we want to decrypt this, we apply the cipher in reverse and shift left instead of right. From this, we see that the two variable parts of the cipher are 1.which way you shift, and 2. by how much.&lt;/p&gt;

&lt;h2&gt;
  
  
  Coding the Cipher
&lt;/h2&gt;

&lt;p&gt;As an exercise, I wrote a simple python script to perform the rotations for me. First, I worked out the math for handling the shift (including wrapping) since this was the most complex part. Then, I iterated through each character and applied the computation. Finally, I added a simple CLI and then posted it to &lt;a href="https://github.com/morganda/crypto_hacks/tree/master/caesar_cipher"&gt;Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Below is my Caesar cipher implementation. Python doesn’t let you perform math operations on letters so you have to use the “ord” function to convert them to the Unicode code point first.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;apply_rotation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;factor&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="s"&gt;"""Applies a shift of factor to the letter denoted by c"""&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isalpha&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;lower&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'A'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;isupper&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;'a'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lower&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;lower&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;factor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;caesar_cipher&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="s"&gt;"""Iterates through each letter and constructs the cipher text"""&lt;/span&gt;
    &lt;span class="n"&gt;new_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;''&lt;/span&gt;
    &lt;span class="n"&gt;factor&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;new_message&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;apply_rotation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;factor&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;new_message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Math
&lt;/h2&gt;

&lt;p&gt;Let’s work through the apply_rotation method with a single letter, ‘a’ since this is a little difficult to read.&lt;/p&gt;

&lt;p&gt;First, we assign the value of “lower” to ‘A’ or ‘a’ depending on the case to construct the shift. Looking at the inner parentheses we convert the character to a code point and subtract “lower”. The letter ‘a’ has a code point of 97 so if our letter denoted by the variable ‘c’ was ‘f’ (which has a code point of 102) we would get 5 (102 – 97 = 5). We can then add our shift factor (3 for our example) which gives us 8.&lt;/p&gt;

&lt;p&gt;Before looking at the rest of the math, if you index the 26 letter alphabet 1-26, 5 is the letter ‘f’ which is what we want to transform. Adding the shift gives us 8 which maps to the letter ‘i’ which is our current result. Python doesn’t know 8 yields and ‘i’ though, but that’s okay because the remaining part of the equation fixes it up for us.&lt;/p&gt;

&lt;p&gt;Performing a modulus of 26 just returns 8 for this example so we can ignore that for now. That leaves us with the last step of adding the Unicode code point value of “lower” to 8 i.e. 97 + 8 = 105. Now we can convert the Unicode code point back to a string using the python built-in method “chr” which gives us ‘i’.&lt;/p&gt;

&lt;h3&gt;
  
  
  Modulus
&lt;/h3&gt;

&lt;p&gt;This is pretty simple math though, so why do we add lower and subtract it in the same equation? Don’t those cancel each other out? Yes, but since the alphabet is based on 26 characters we need to 0 out the Unicode code point values to our 1-26 index so that we can make use of the modulus to handle shifts that need to wrap.&lt;/p&gt;

&lt;p&gt;The modulus helps us with our code wrapping. If we go through the math again, but instead apply a shift of 3 to the letter ‘z’ which has a code point of 122 we have to wrap the letters otherwise we get a code point of 125 which is the character ‘}’.&lt;/p&gt;

&lt;p&gt;Ignoring the final, addition of “lower” the equation ends up being (122 – 97 + 3) % 26. This reduces down to 28 % 26. 28 isn’t in the alphabet, however when we apply the modulus we end up with 2. We finally can add the last “lower” to finish up with math which is 97+2 = 99. Applying the chr method we get the letter ‘c’.&lt;/p&gt;

&lt;p&gt;Bonus: In the full code example, I use modulus 26 to handle shifts greater than 26. e.g. A shift of 27 is the equivalent of 1 (27 % 26 = 1).&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The Caesar cipher is a simple cipher that shifts each letter by a set amount. We produce the deciphered message, by performing the shift in reverse.&lt;/p&gt;

&lt;p&gt;The post &lt;a href="https://morgandadams.com/caesar-cipher-implementation-python/"&gt;Caesar Cipher Implementation in Python&lt;/a&gt; appeared first on &lt;a href="https://morgandadams.com"&gt;Morgan Adams&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ciphers</category>
      <category>cryptography</category>
      <category>python</category>
    </item>
    <item>
      <title>Deleting files that start with a hyphen in Bash</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Mon, 21 Jan 2019 03:31:21 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/deleting-files-that-start-with-a-hyphen-in-bash-2gpp</link>
      <guid>https://dev.to/_morgan_adams_/deleting-files-that-start-with-a-hyphen-in-bash-2gpp</guid>
      <description>&lt;h2&gt;
  
  
  The Stage
&lt;/h2&gt;

&lt;p&gt;I ran a script that takes a file path as an argument and it writes to that file. First, I ran it with the -h flag to see if I could get a help message. No error message printed to stdout. However, the script then did something unexpected…&lt;/p&gt;

&lt;p&gt;After pressing enter, the script continued execution and prompted for additional input. I didn’t notice and hit “enter” a couple of times to get a clean prompt. This inadvertently allowed the script to finish. As a result, I ended up with a brand new file call “-h”. Oops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting a file is hard…
&lt;/h2&gt;

&lt;p&gt;No big deal right?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can just delete that with a simple “rm” command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt;: invalid option &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'h'&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm ./-h'&lt;/span&gt; to remove the file &lt;span class="s1"&gt;'-h'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm --help'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;more information.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What…?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="se"&gt;\-&lt;/span&gt;h
&lt;span class="nb"&gt;rm&lt;/span&gt;: invalid option &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'h'&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm ./-h'&lt;/span&gt; to remove the file &lt;span class="s1"&gt;'-h'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm --help'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;more information.
&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt;
&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="s2"&gt;"-h"&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt;: invalid option &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'h'&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm ./-h'&lt;/span&gt; to remove the file &lt;span class="s1"&gt;'-h'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm --help'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;more information.
&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt;
&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="s1"&gt;'-h'&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt;: invalid option &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="s1"&gt;'h'&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm ./-h'&lt;/span&gt; to remove the file &lt;span class="s1"&gt;'-h'&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Try &lt;span class="s1"&gt;'rm --help'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;more information.
&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt;
&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="s1"&gt;'\-h'&lt;/span&gt;
&lt;span class="nb"&gt;rm&lt;/span&gt;: cannot remove &lt;span class="s1"&gt;'\-h'&lt;/span&gt;: No such file or directory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point, I scratched my head in confusion. However, after some Googling I found a couple of simple solutions&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; ./-h
&lt;span class="c"&gt;# or&lt;/span&gt;
&lt;span class="nv"&gt;$&amp;gt;&lt;/span&gt;&lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Either of these solutions works. The first works because we’re using the current directory as part of the path. This tells bash not to process the hyphen as an option.  &lt;/p&gt;

&lt;p&gt;Finally, the second option works because the double hyphen is a bash built-in. It tells the command that there are no more options to process and that anything else is a positional argument.&lt;/p&gt;

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

&lt;p&gt;In conclusion, I have a few lessons learned:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Actually look at your prompt before pressing enter&lt;/li&gt;
&lt;li&gt;Shells have a lot of nuances. It’s worth taking the time to learn about them when you encounter them because you’ll likely run into them again.&lt;/li&gt;
&lt;li&gt;Use “set -e” in your scripts. If there is an error, the script will exit rather than continue execution.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>bash</category>
      <category>linux</category>
      <category>shell</category>
      <category>cli</category>
    </item>
    <item>
      <title>Learning Doesn't Have To Be Hard</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Wed, 02 Jan 2019 01:20:15 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/learning-doesnt-have-to-be-hard-p8c</link>
      <guid>https://dev.to/_morgan_adams_/learning-doesnt-have-to-be-hard-p8c</guid>
      <description>&lt;h1&gt;
  
  
  My Journey
&lt;/h1&gt;

&lt;p&gt;Walking into my Discrete Mathematics course in Computer Science, I felt like I had put on my big boy pants and was moving beyond simple coding projects. I was going to dive deep into Computer Science concepts and be a wizard programmer. I sat down and managed to get through some set theory, a few week later we started talking about graphs, Dijkstra's algorithm, proof by induction, and I looked like this guy:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9L4WDRKt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.gifer.com/1K6U.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9L4WDRKt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://i.gifer.com/1K6U.gif" alt="wtf meme" width="480" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I ultimately made a poor decision. I switched my major to Information Technology (IT). IT wasn't a bad major, it just wasn't what I REALLY wanted to do so it was a poor decision for me. The love learning hard things gave way to the pressures of life.&lt;/p&gt;

&lt;p&gt;10 years later here I am, and so help me, I am determined to understand all the things I gave up! I have been building utilities and automating for years now. I understand systems, trade-offs, containers, Linux, architecture, design patterns, testing, security, project management, managing larger scale, design patterns, cross-team initiatives, and more. I appreciate every bit of that experience, but I still have major gaps in my programming ability.&lt;/p&gt;

&lt;p&gt;Finally, I've circled back to what initially attracted me to tech and that was to dive deep into computer science, to understand the math behind the scenes, to know it well enough to teach others, to improve my ability, and build bigger and better things. That may sound boring to some of you, but I love it! Tonight I'm implementing Dijkstra's algorithm to make sure I understand it and I'm thrilled!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lEf1B_FU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://media1.tenor.com/images/1f84b096cbe1cc9f3763c803bb17e10e/tenor.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lEf1B_FU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://media1.tenor.com/images/1f84b096cbe1cc9f3763c803bb17e10e/tenor.gif" alt="excited gif" width="498" height="280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My point in all this is that you should focus on what's exciting to you. It's okay to be confused. There are resources to help you and I wanted to share some. Nothing I've done is a waste, my focus just drifted from what I was passionate about because I gave up for a period. No more! And I hope you will focus on what you're passionate about too!&lt;/p&gt;

&lt;p&gt;There are more resources than ever out there. There is no reason a concept should be too hard to grasp because somewhere, someone has explained it in a way that may make sense to you. You just have to find it. I often joke that my job is knowing my way through a book or a search engine rather than engineering.&lt;/p&gt;

&lt;h1&gt;
  
  
  Some Useful Resources for Learning
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Learning how our brains work is important
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;"Deep Work" - book on how to really learn concepts and ideas and how to make effective use of time.&lt;/li&gt;
&lt;li&gt;"&lt;a href="https://www.coursera.org/learn/learning-how-to-learn"&gt;Learning how to Learn&lt;/a&gt;" is a course on Coursera. It was free when I took it. Alternatively, the book "A Mind for Numbers" is done by the same person and covers most of the same ideas.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Programming and Computer Science Resources
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Book "A Common-Sense Guide to Data Structures and Algorithms". If you're newer to some of these concepts or have struggled to understand them, then this book is for you. I highly recommend.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.100daysofcode.com/"&gt;100 Days of Code Initiative&lt;/a&gt; - Great idea, and I just started it myself! If you do it, let me know, I'll follow your progress.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://learn.freecodecamp.org/"&gt;Free Code Campus&lt;/a&gt; - Great if you can't afford a code campus and want to learn basics of web-development.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.hackerrank.com"&gt;Hacker Rank&lt;/a&gt; - Useful for interview preparation, learning a new language, and deepening understanding of concepts. After solving a problem, you can switch over to the discussion tab to see how others have solved it. I re-implemented some of those solutions as a hands-on way to better learn some of the concepts that I may have missed or overlooked.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.meetup.com/"&gt;Meetup&lt;/a&gt; - A local community or group of folks to work with can open up a lot more work, practice, and networking opportunities. Who knows there might be a tech group near you, or maybe you can start one yourself! You don't have to be a pro to start one or join one. Just be willing to learn and make something happen.&lt;/li&gt;
&lt;li&gt;And of course &lt;a href="https://dev.to"&gt;Dev&lt;/a&gt; - This is a great community!&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There's a billion other resources out there. If you get lost or confused, ask for clarification or try another resource. Somewhere you'll find something that sticks.&lt;/p&gt;

&lt;p&gt;What are your favorite resources? Which ones have been the most help to you?&lt;/p&gt;

&lt;p&gt;Happy New Year and Happy Coding!&lt;/p&gt;

</description>
      <category>learning</category>
      <category>beginners</category>
      <category>career</category>
      <category>personaldevelopment</category>
    </item>
    <item>
      <title>Pipelines: Not just a Pipe Dream</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Sat, 29 Dec 2018 17:10:09 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/pipelines-not-just-a-pipe-dream-15p5</link>
      <guid>https://dev.to/_morgan_adams_/pipelines-not-just-a-pipe-dream-15p5</guid>
      <description>&lt;h1&gt;
  
  
  The Joke: Testing in Production
&lt;/h1&gt;

&lt;p&gt;"Testing in production" has become a common joke in the development world - mostly because so many of us have been there and it kind of stings to think about it. You may have heard about these development pipelines, but after looking into them, thought it was too big an investment and the reality is that they're not cheap! Continuous delivery is not something you should try and spit out overnight. &lt;/p&gt;

&lt;p&gt;Everyone wants to have confidence that when they deploy code to production and to &lt;strong&gt;&lt;em&gt;know&lt;/em&gt;&lt;/strong&gt; that their code is ready. Before having a pipeline of some sort, every release is like that scene from Jurassic Park, when Samuel L Jackson starts bringing power back on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/OCu7zWojqFA1W/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/OCu7zWojqFA1W/giphy.gif" alt="Hold on to your butts"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So how do we get to a point where we're confident our code is ready for production? Pipelines!&lt;/p&gt;

&lt;h1&gt;
  
  
  What is a pipeline?
&lt;/h1&gt;

&lt;p&gt;Let's start with some definitions for those newer to this idea.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Pipeline - (from Gitlab &lt;a href="https://docs.gitlab.com/ee/ci/pipelines.html" rel="noopener noreferrer"&gt;https://docs.gitlab.com/ee/ci/pipelines.html&lt;/a&gt;)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A pipeline is a group of jobs that get executed in stages. All of the jobs in a stage are executed in parallel (if there are enough concurrent Runners), and if they all succeed, the pipeline moves on to the next stage. If one of the jobs fails, the next stage is not (usually) executed. You can access the pipelines page in your project’s Pipelines tab.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Environment - somewhere where your code runs for a some specific purpose&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Staging - a set of computing infrastructure that runs your code for the purposes of integration testing, user experience testing, penetration testing, and other testing before deploying to your customers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Production - the set of computing infrastructure that runs the code your customers see and where customer data is stored&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, once we've put some code together, we first want to deploy it to some kind of staging environment that looks like production, test some stuff out, and then go to production. Your staging environment ideally looks exactly like production, but if you're cash strapped a local VM, &lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt;Docker&lt;/a&gt; container, or their equivalent in the cloud will work just fine. The point is that you test your build to make sure it actually runs &lt;em&gt;before&lt;/em&gt; you get to production.&lt;/p&gt;

&lt;p&gt;Pipelines can unfortunately get more complex than that. Here are some components that may or may not be in your ultimate pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Merge Request&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;Changelog&lt;/li&gt;
&lt;li&gt;Build Application&lt;/li&gt;
&lt;li&gt;Code Analysis&lt;/li&gt;
&lt;li&gt;Unit Tests&lt;/li&gt;
&lt;li&gt;Integration/API Tests&lt;/li&gt;
&lt;li&gt;Performance Tests&lt;/li&gt;
&lt;li&gt;Multiple environments (Staging (often broken down into multiple environments), Production)&lt;/li&gt;
&lt;li&gt;Smoke Tests&lt;/li&gt;
&lt;li&gt;Regression Tests&lt;/li&gt;
&lt;li&gt;Visual regression Tests&lt;/li&gt;
&lt;li&gt;Release Candidate&lt;/li&gt;
&lt;li&gt;Versioning&lt;/li&gt;
&lt;li&gt;Promoted to Production&lt;/li&gt;
&lt;li&gt;Dark launch&lt;/li&gt;
&lt;li&gt;Percentage-based deployments (day 1 to 10% of customers)&lt;/li&gt;
&lt;li&gt;Automated deploy&lt;/li&gt;
&lt;li&gt;Metrics&lt;/li&gt;
&lt;li&gt;Rollback&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We could easily keep keep adding to that list, but it might already seem excessive if not impossible to organizations with limited resources or those unfamiliar with pipelines. Honestly a lot of these components will depend on what your organization needs and you may not need everything there.&lt;/p&gt;

&lt;p&gt;The Gitlab link I mentioned earlier keeps it pretty simple &lt;a href="https://docs.gitlab.com/ee/ci/pipelines.html" rel="noopener noreferrer"&gt;https://docs.gitlab.com/ee/ci/pipelines.html&lt;/a&gt;, but it also has a feature set that supports building out your pipelines so if you don't use Gitlab you'll have to use other software. Here's a pretty tech agnostic diagram that they use on that page that shows what your pipeline could look like at a high level&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%2Fdocs.gitlab.com%2Fee%2Fci%2Fimg%2Fpipelines-goal.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%2Fdocs.gitlab.com%2Fee%2Fci%2Fimg%2Fpipelines-goal.png" alt="Pipeline diagram"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  So Where Do You Start?
&lt;/h1&gt;

&lt;p&gt;Where you start may depend on resources available. If you are cash strapped or running a project solo, you can still have a pipeline! If you have the resources to start building out a pipeline, but are only just now getting started, no problem because I would recommend starting in the same place.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a script that can build your software&lt;/li&gt;
&lt;li&gt;Create a script that can deploy your software once it's built. This can also be reused to deploy to a staging environment if you have one available.&lt;/li&gt;
&lt;li&gt;Create a script that can roll back to your previous release&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You are already doing these 3 things anyway. You might as well automate those steps with scripts. You can always replace these with something more sophisticated later.&lt;/p&gt;

&lt;h1&gt;
  
  
  Next Steps
&lt;/h1&gt;

&lt;p&gt;Once you have those 3 pieces you can start introducing other components with minimal investment.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ensure code reviews are part of your process if you're not running a solo project.&lt;/li&gt;
&lt;li&gt;Start adding unit tests every time you touch the code. When you run your build, add a few lines to execute your unit tests. Toss in a linter while you're at it.&lt;/li&gt;
&lt;li&gt;Add a staging environment of some sort. With a bit of scripting you can do something phoenixable (quickly create/destroy) in AWS or even in a local VM (run a local container, or maybe check out &lt;a href="https://www.vagrantup.com/" rel="noopener noreferrer"&gt;vagrant&lt;/a&gt;) if you want. You have options.&lt;/li&gt;
&lt;li&gt;Use something like git tags/docker labels to version your code.&lt;/li&gt;
&lt;li&gt;Maintain a changelog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are free tools or modules you can download to help you with most of these steps. Pretty much every language has testing libraries and ways to measure code coverage. You can also easily find linters.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why bother?
&lt;/h1&gt;

&lt;p&gt;I have been on more calls at 2AM than I care to think about - sometimes consecutive nights! It's a dark place to be in (no pun intended) when you are debugging production from 2-6AM.&lt;/p&gt;

&lt;p&gt;An investment in a good pipeline will save you a lot of pain and heartache and ultimately give you confidence in you and your organization's ability to release quality software. Even better, your customers will be more satisfied.&lt;/p&gt;

&lt;h1&gt;
  
  
  Make Progress
&lt;/h1&gt;

&lt;p&gt;There's a lot you can do improve your development pipelines. You don't have to do it all. Start slow, start easy. You don't even need to follow my suggestions, start with what's right for you/your team. Identify quick wins. There are a lot of tools out there to help you in this process.&lt;/p&gt;

&lt;p&gt;Eventually you can get to a point where most things are automated. Some of my favorite parts of an automated pipeline is after a deploy to production, you have monitors that watch your metrics, determine that your new release is sending page times through the roof, and triggers an automatic rollback or at least a notification that you may need to rollback. Then I can wake up at 2AM push the button to roll back and go back to sleep!&lt;/p&gt;

&lt;p&gt;Here are the some key principles&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leave your code/pipeline a little better every time you touch it, whether it's an additional unit test or automating some piece.&lt;/li&gt;
&lt;li&gt;Look for the quick wins. Some of them may save you heaps of time.&lt;/li&gt;
&lt;li&gt;If you have a long release cycle, a good pipeline can help you ensure quality leading up to a release.&lt;/li&gt;
&lt;li&gt;Focus on quality. That new feature doesn't help anyone if it errors out all the time.&lt;/li&gt;
&lt;li&gt;Don't rush to production if you can help it.&lt;/li&gt;
&lt;li&gt;Don't test in production!&lt;/li&gt;
&lt;li&gt;Sleep better&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I love a good quality pipeline. What have you seen work well? What would you add? What would you like to see me talk more about? I'm happy to go into more details if folks are interested.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>beginners</category>
      <category>productivity</category>
      <category>testing</category>
    </item>
    <item>
      <title>Programming Challenges: More Than Just Brain Teasers</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Mon, 24 Dec 2018 10:07:59 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/programming-challenges-more-than-just-brain-teasers-mi1</link>
      <guid>https://dev.to/_morgan_adams_/programming-challenges-more-than-just-brain-teasers-mi1</guid>
      <description>&lt;h1&gt;
  
  
  Intro: When All You Have Is A Hammer
&lt;/h1&gt;

&lt;p&gt;"When all you have is a hammer, everything looks like a nail". This is known as the "&lt;a href="https://en.wikipedia.org/wiki/Law_of_the_instrument"&gt;Law of the Instrument&lt;/a&gt;" or "Maslow's Hammer" (plus some other monikers). The meaning behind this is that sometimes we get familiar or comfortable with a tool and bias towards using that tool to solve problems. This post is a tale of a recent experience I had where I let go one of my hammers and added something new to my mental tool belt.&lt;/p&gt;

&lt;p&gt;I deviated from programming early on in my studies and moved to a more operational role. One thing that was readily apparent is that the tools and systems I learned about handled problems to varying efficacy. MySQL is not always the best database. Nginx isn't the best load balancer even if you can get it to load balance. Just because I can write a 1000 line bash script doesn't mean I should.&lt;/p&gt;

&lt;p&gt;Ultimately, I've had to continue learning about new ways to solve problems. I subscribed to various blogs, watched conference talks as they were posted online, followed engineering leaders on Twitter, and even gave up Perl (this was about 8 years ago :) ).&lt;/p&gt;

&lt;p&gt;I've recently started focusing on my programming skills again, but before I talk about that, first a flash back to when I first started programming as a teenager.&lt;/p&gt;

&lt;h1&gt;
  
  
  A Pattern
&lt;/h1&gt;

&lt;p&gt;Given an m x n 2D array which represents a maze, return a list of indices representing the solution to navigate the maze.&lt;/p&gt;

&lt;p&gt;As a 17-year old programming newbie in Java, I was stumped. Every time I ran some tests, "ArrayIndexOutOfBoundsException" or "Error: Returned solution has 0 entries". Smashing my face on the keyboard and a few choice swear words later... I gave up.&lt;/p&gt;

&lt;p&gt;It was a rough experience, but what I remember most was when another programmer showed me how he would mark paths he had traversed with a 2D boolean array of the same size to track where he had been. I thought it was the most brilliant solution ever. Clearly I hadn't been out much, but it was like a light turned on in my head. I distinctly remember him saying "Sometimes it's just easier to use a separate structure for tracking things". Note that he said "Sometimes" and not "Always" because I didn't at that point.&lt;/p&gt;

&lt;p&gt;I soon saw other programming challenges where maintaining another structure to track "visited" items proved very handy. The first time I reused this approach was when I wrote a program to find words on a &lt;a href="https://en.wikipedia.org/wiki/Boggle"&gt;Boggle&lt;/a&gt; board. Handy! But it didn't always work and even made the problem harder.&lt;/p&gt;

&lt;h1&gt;
  
  
  Present day
&lt;/h1&gt;

&lt;p&gt;Fast-forward to present day... I'm happy to say, I am now working on my programming skills again! I love to build!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.hackerrank.com/"&gt;Hackrank&lt;/a&gt; is where I currently spend a lot of time working through various programming challenges and reading the associated discussions about how others have solved the problems I was working on (this is actually one of my favorite things about these challenges).&lt;/p&gt;

&lt;h2&gt;
  
  
  Cycle Detection
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;SPOILER ALERT - I talk through some details about solving a Hackerrank challenge here&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--UqcoZCI_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/WypqVFv/listloop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--UqcoZCI_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://i.ibb.co/WypqVFv/listloop.png" alt="Linked List Loop" width="303" height="99"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Recently, I came across a challenge that prompted this post: "Cycle Detection". In this challenge you are supposed to detect a loop in a singly-linked list. I knew this pattern! I would just keep a separate structure with the nodes I had visited and detect the loop if I crossed one of those nodes.&lt;/p&gt;

&lt;p&gt;Fortunately, all the edge cases on all these problems I had working on made the cogs in my brain start turning. Something about the solution didn't seem right. It's not wrong, but what if I had a linked list that had a million nodes? What if it had more? Was there another way to solve this problem?&lt;/p&gt;

&lt;p&gt;After submitting my solution, I flipped over to the "Discussion" section where my eyes were opened and I drooled over someone else's short and elegant solution. &lt;/p&gt;

&lt;p&gt;They simply had another pointer that traversed the list twice as fast. If the first pointer and the second pointer where ever identical then there was loop in the linked list. Clever and SO much simpler than my solution!&lt;/p&gt;

&lt;p&gt;Where else might I see collision type problems? Maybe I had just discovered another pattern... I casually added that to my mental tool belt. It was interesting as I thought about that solution and how both of these techniques could be used in networks (among others).&lt;/p&gt;

&lt;h1&gt;
  
  
  Your Mental Tool Belt
&lt;/h1&gt;

&lt;p&gt;Learning the fundamentals is a lot of fun. What is even better is when you start to draw connections between various fundamentals and you see a bigger picture. Learning different ways to approach problems gives you more to work with and enables you to move beyond your hammer - or rather, it helps you identify when the hammer is the right tool for the job.&lt;/p&gt;

&lt;p&gt;What makes you and I better at what we do is learning how to solve problems and learning new ways to do it! Even for the simple things. Even as we become more advanced and develop expertise, it is important to set aside our bias (hammer) and see how else we can do things.&lt;/p&gt;

&lt;p&gt;Do you have more than just a hammer? Do you see too many nails? Keep honing your craft, try something new, explore a new subject, read another book, read another dev.to article - whatever you do... keep learning!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
      <category>coding</category>
      <category>learning</category>
    </item>
    <item>
      <title>That's Brilliant!</title>
      <dc:creator>morgana</dc:creator>
      <pubDate>Fri, 23 Nov 2018 06:44:21 +0000</pubDate>
      <link>https://dev.to/_morgan_adams_/thats-brilliant-5m6</link>
      <guid>https://dev.to/_morgan_adams_/thats-brilliant-5m6</guid>
      <description>&lt;h1&gt;
  
  
  We don't share enough
&lt;/h1&gt;

&lt;p&gt;I had just walked out of meeting where we were discussing a roadmap for some of our internal systems. I had an idea that could have solved a particularly hard problem, but just sat on it and kept my mouth shut until after the meeting.&lt;/p&gt;

&lt;p&gt;I pulled my manager aside and shared the idea with him. “That’s brilliant! Why didn’t you say so earlier?”. I just stared back - I was expecting to get burned for a bad idea. He proceeded to chase down everyone who was in that meeting to talk to them about it &lt;strong&gt;and&lt;/strong&gt; telling them that I had thought of it. I was at a loss, but that didn't stop me from strutting around the rest of the day.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why you should speak up
&lt;/h1&gt;

&lt;p&gt;There may be some of you who have had similar experiences. I see it with other engineers all the time - especially now that I am running a team of my own.&lt;/p&gt;

&lt;p&gt;I don’t know what makes us not share or speak up more. Maybe it’s impostor syndrome, maybe some of us feel there is a hierarchy and the junior engineer shouldn’t speak up, or maybe we just assume someone else has already considered it. It really doesn't matter - the end result is that we don't share enough.&lt;/p&gt;

&lt;p&gt;I’m here to tell you that for whatever your reason you and I don’t speak up, it’s wrong. For those of you in a toxic work environment where offering solutions isn’t valued, find a new job when you can. That kind of environment will hold you back and you don't need that kind of negativity in your life anyway.&lt;/p&gt;

&lt;p&gt;You are an engineer and your employer hired you because they thought you had something to contribute. It’s up to you to deliver. That means not only writing code and implementing someone else’s solutions, but to come up with your own solutions, speak up, and share them!&lt;/p&gt;

&lt;h2&gt;
  
  
  4 reasons why you should share your ideas:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Your view of the world is different.
Ignore that saying “you’re unique just like everyone else” which implies you’re no different from everyone else. Your experiences and perspective have a unique spin that make you see things different from everyone else. You have something to contribute and it’s honestly worse to have the solution and your manager get exasperated when you sit on it (story of my life - trust me).&lt;/li&gt;
&lt;li&gt;You might learn something.
Ideas get shot down all the time and that is perfectly okay. I have learned so much from some of the senior engineers I have talked with as they show me better ways of approaching problems. They often have something to teach if you’re willing to listen. Do this enough and you’ll find that you become the person with something to teach.&lt;/li&gt;
&lt;li&gt;You’re idea is a piece of the puzzle.
One of the main reasons you brainstorm in groups is because even the most knowledgeable people don’t know everything. How many of you have been exasperated at a senior engineer or manager because they didn’t “get it”? As an engineer you need to learn how to help them understand (again, find a new job or role if you are in a culture in which this is hard to do). You don’t have to be the hero with all the answers. You would be surprised how much folks appreciate it when your idea helps fill in the gaps.&lt;/li&gt;
&lt;li&gt;Your career growth will accelerate.
When you share ideas, others learn how you think and will start to understand you and your expertise. They’ll be more willing to work with you and brainstorm with you. Soon you’ll be mentoring others and develop a network of engineers you can reach out to to help get things done. You will even find people coming up to you saying “I hear you’re the expert on [something]”. &lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Find your way forward
&lt;/h1&gt;

&lt;p&gt;I know so many of us don’t enjoy interacting with people as much as we do the tech. You have so much to gain though if you make the effort whether you want to get into management, build stuff, or become that senior engineer that is a mentor to many. Take it from this shy, introvert drowning in impostor syndrome and is happiest behind a monitor than in a group of people. Sharing ideas has a multiplier effect if you want to progress your career and get things done.&lt;/p&gt;

&lt;p&gt;If you don't know where to start, try a post here! Share something you've been learning about recently, show off a project you're working on, or throw out an idea worth discussing with others. It doesn't have to be earth-shattering. Even simple ideas or learnings need to be shared. There's a good chance someone else needed what you've been learning about.&lt;/p&gt;

&lt;p&gt;Admittedly, this my debut post on dev.to. I have been a silent reader for some time and am finally eating my own dog food, coming out of my shell, and trying to give back to this community. Give it a try yourself and write your own post. You might be surprised how many people resonate with your ideas. You might even find folks who comment “That’s brilliant! Why hasn’t someone said that before?”&lt;/p&gt;

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