<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on The Intuitive Programmer</title>
    <link>/posts/</link>
    <description>Recent content in Posts on The Intuitive Programmer</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 12 Apr 2022 09:33:42 -0500</lastBuildDate>
    <atom:link href="/posts/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>The Architecture of new Angular projects</title>
      <link>/2022/04/12/the-architecture-of-new-angular-projects/</link>
      <pubDate>Tue, 12 Apr 2022 09:33:42 -0500</pubDate>
      <guid>/2022/04/12/the-architecture-of-new-angular-projects/</guid>
      <description>&lt;h3 id=&#34;sometimes-you-build-to-learnand-that-means-to-fail&#34;&gt;Sometimes you build to learn&amp;hellip;and that means to fail&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve stated earlier that personal projects are the gateway towards developing
one&amp;rsquo;s confidence in an endeavor. I&amp;rsquo;m working on a habit tracker, to keep track
of my habits and eventually to provide me feedback on how I am doing and
building towards my own goals.&lt;/p&gt;
&lt;h3 id=&#34;let-your-creativity-wander&#34;&gt;Let your creativity wander&lt;/h3&gt;
&lt;p&gt;Sometimes in thinking through a software project, I get caught up in the
details. Things like, how am I going to have the list refresh after adding a new
product. Am I making the right initial decisions. I&amp;rsquo;ve found solace in breaking
that thought pattern. Engaging with visual diagrams has been a helpful way to
help me navigate the process. Being open to the process of design allows a lot
more flexibility to what it is that you engineer.&lt;/p&gt;
&lt;p&gt;Below are some of my simple proof of concepts that cover what I wanted most out
of my habit tracker. A list of high level habits that I want to accomplish and a
view that shows me the days that I&amp;rsquo;ve accomplished those habits on a calendar.&lt;/p&gt;
&lt;p&gt;
&lt;figure class=&#34;image&#34;&gt;
&lt;img src=&#34;habit-library.png&#34;&gt;
&lt;figcaption&gt;
&lt;h4&gt;Habit Library Main Page&lt;/h4&gt;&lt;/figcaption&gt;
&lt;/figure&gt;


&lt;figure class=&#34;image&#34;&gt;
&lt;img src=&#34;calendar-details.png&#34;&gt;
&lt;figcaption&gt;
&lt;h4&gt;Detail view of completed habits&lt;/h4&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 id=&#34;just-the-beginning&#34;&gt;Just the beginning&lt;/h3&gt;
&lt;p&gt;There&amp;rsquo;s a point in any new product where the excitment is overriden
by the work. In fact, getting this prepared I was stuck on a
specific issue around setting up my login page that took days to
resolve. That&amp;rsquo;s okay. It&amp;rsquo;s important to develop a muscle of
persistence in the face of the seemingly unimportant details. The
truth of the matter is that, the details are super important. It&amp;rsquo;s
often easy to fantasize about an outcome that you want but what&amp;rsquo;s in
the space between is the work and you can work to avoid the work (think
about it) or you can see the work as something that is to be gotten
through. If you&amp;rsquo;re not feeling that sense of cutting through
something then it might be a time to take a look at how you would
like to spend your energy. It might be software engineering but
perhaps in a different novel way?&lt;/p&gt;
&lt;p&gt;Work, Reflect, Relax and Repeat.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;A&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Test Driven Development: Angular Reactive Forms</title>
      <link>/2022/03/14/test-driven-development-angular-reactive-forms/</link>
      <pubDate>Mon, 14 Mar 2022 09:33:42 -0500</pubDate>
      <guid>/2022/03/14/test-driven-development-angular-reactive-forms/</guid>
      <description>&lt;h3 id=&#34;reactive-forms-learning-by-doing&#34;&gt;Reactive forms: Learning by doing&lt;/h3&gt;
&lt;p&gt;I&amp;rsquo;ve been developing using Angular for over a year. One thing that I love about
working with the framework is how logical it can appear. To the lay programmer,
it might be overly rigorous and lacking in the flexibility that other
development tools might have (think React). To me, I love the rigor that comes
in understanding it because it does provide a stable productive working
environment in my opinion.&lt;/p&gt;
&lt;h3 id=&#34;mapping-your-entity-to-your-form&#34;&gt;Mapping your entity to your form&lt;/h3&gt;
&lt;p&gt;Once you have an idea of what it is you are wanting to build, doing so in
Angular with the right pattern is trivial! Take for example this coffee form
example below. We initialize a form group.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;orderForm&lt;/span&gt;: &lt;span style=&#34;color:#66d9ef&#34;&gt;FormGroup&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;FormGroup&lt;/span&gt;({});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then we set the fields appropriately. Not that we can set if a field
is required as well as set the default value of the field
programmatically.&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-typescript&#34; data-lang=&#34;typescript&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ngOnInit&lt;/span&gt;()&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; {
    &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;orderForm&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;fb&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;group&lt;/span&gt;({
      &lt;span style=&#34;color:#75715e&#34;&gt;// this maps to the name input field...the validator required denotes
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;// that it is a required field!
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Validators&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;required&lt;/span&gt;],
      &lt;span style=&#34;color:#75715e&#34;&gt;// we set email to a blank field
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;email&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;],
      &lt;span style=&#34;color:#75715e&#34;&gt;// we set the default selection of item to the Coffee value
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;item&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Coffee&amp;#39;&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;Validators&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;required&lt;/span&gt;],
      &lt;span style=&#34;color:#75715e&#34;&gt;// we set the size of the order form to default to Small
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Small&amp;#39;&lt;/span&gt;,&lt;span style=&#34;color:#a6e22e&#34;&gt;Validators&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;required&lt;/span&gt;],
      &lt;span style=&#34;color:#75715e&#34;&gt;// we set the notes to be blank
&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&lt;/span&gt;      &lt;span style=&#34;color:#a6e22e&#34;&gt;notes&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;]
    })
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The last part is to set the formControlNames appropriately on the template file.
Notice how similar the form control names are to the actual input fields!&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-html&#34; data-lang=&#34;html&#34;&gt;&amp;lt;&lt;span style=&#34;color:#f92672&#34;&gt;input&lt;/span&gt;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;id&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name-field&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;required&lt;/span&gt;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;formControlName&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;type&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;
        &lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;field1&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;field-divided&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;rinse-and-repeat&#34;&gt;Rinse and repeat&lt;/h3&gt;
&lt;p&gt;Developing intuition is a process that takes time. Angular does a great job of
providing predictable patterns that can be intuited on when working with
business logic of a varying nature. Here we can see how the OrderForm might be
an entity that is stored on the back end and how it can easily be extended to
expand on or enhance the functionality of the application.&lt;/p&gt;
&lt;p&gt;Check out this repo to see a basic test set up for validating the prescence of
the field and inputs. Try to expand on it!&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/developer-alvin-muniz/tdd-reactive-form&#34;&gt;https://github.com/developer-alvin-muniz/tdd-reactive-form&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;A&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Developing Intuition: Enjoying what you do as a beginner.</title>
      <link>/2022/03/10/developing-intuition-enjoying-what-you-do-as-a-beginner./</link>
      <pubDate>Thu, 10 Mar 2022 09:33:42 -0500</pubDate>
      <guid>/2022/03/10/developing-intuition-enjoying-what-you-do-as-a-beginner./</guid>
      <description>&lt;h3 id=&#34;programming-is-hard&#34;&gt;Programming is hard&lt;/h3&gt;
&lt;p&gt;Making a career out of it is even harder. But, is this the equivalent of saying
that being a lawyer is hard, or even running a small business? The point is,
that this life is hard. For career switchers, becoming a software engineer might
seem like a fast track to life in the easy lane. Good pay, and relatively high
demand for the skill set makes software engineering a hot commodity. At record
rates, people are coming into the profession and loving the allure of such a
career. The question becomes, how long does this last.&lt;/p&gt;
&lt;h3 id=&#34;so-you-have-the-job&#34;&gt;So you have the job&amp;hellip;&lt;/h3&gt;
&lt;p&gt;The thing is, once you get the job, things only get more difficult. Now there
are benchmarks from which you derive a certain output. Those benchmarks might be
reasonable or they might be astronomically out of your league. It might be
difficult to focus on what to learn because, as professionals of a sought after
skill, we are constantly being exposed to the latest and greatest piece of
technology. This is a choose your own adventure game. Finding some aspect of joy
in it is important. In life we are constantly faced with having to make a choice
and it&amp;rsquo;s often the truth that, if we side with a feeling that resides in our
body and heart, we would likely be prone to having the kind of career we want.
Objects of the mind are just that and fickle. Ask yourself these questions, ask
for support and guide your evolution in a way that&amp;rsquo;s unique to your
qualifications.&lt;/p&gt;
&lt;h3 id=&#34;iterate-through-your-good-ideas&#34;&gt;Iterate through your good ideas&lt;/h3&gt;
&lt;p&gt;Where most people loose sight of enjoyment is where they loose sight of
themselves. Day after day, year after year, we are being validated by expanding
on the vision of others. I&amp;rsquo;m proposing that less time be spent iterating through
the dreams of others and more time spent in your world crafting, creating and
communicating.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;A&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Test Driven Development: A lesson in failing first</title>
      <link>/2022/03/07/test-driven-development-a-lesson-in-failing-first/</link>
      <pubDate>Mon, 07 Mar 2022 09:33:42 -0500</pubDate>
      <guid>/2022/03/07/test-driven-development-a-lesson-in-failing-first/</guid>
      <description>&lt;h3 id=&#34;function-under-test&#34;&gt;Function under test&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s say we have a function that returns 3 names in a list.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;listOfNames&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(){&lt;/span&gt;
    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; Arrays&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;asList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;John&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Jerry&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Joseph&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To test it, we might write a test like the below.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Test&lt;/span&gt;
&lt;span style=&#34;color:#a6e22e&#34;&gt;@DisplayName&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;should return a list of names&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shouldReturnAListOfNames&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(){&lt;/span&gt;
    List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; expected&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Arrays&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;asList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;John&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Jerry&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Joseph&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt;
    List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; actualList&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;postService&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;listOfNames&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt;
    assertThat&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expected&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;equals&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;actualList&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Great, your test most likely passed, but is this a good test? Trying modifying a
name in the list so that the test reflects the below and run it.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Test&lt;/span&gt;
&lt;span style=&#34;color:#a6e22e&#34;&gt;@DisplayName&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;should return a list of names&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shouldReturnAListOfNames&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    List &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; expected &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Arrays&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;asList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;John&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Jerri&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Joseph&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt; 
    List &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; actualList &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; postService&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;listOfNames&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt; 
    assertThat&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expected&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;equals&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;actualList&lt;span style=&#34;color:#f92672&#34;&gt;));&lt;/span&gt;
&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This test also passed. Testing apis have a slew of different methods
that serve to provide a more fluent way of writing readable tests.
Not only is readability the key, they also serve developers but
asserting in a proper manner.&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Test&lt;/span&gt;
&lt;span style=&#34;color:#a6e22e&#34;&gt;@DisplayName&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;should return a list of names&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;)&lt;/span&gt;
&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;shouldReturnAListOfNames&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;()&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;
    List &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; expected &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; Arrays&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;asList&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;John&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Jerri&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Joseph&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt; 
    List &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;String&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; actualList &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; postService&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;listOfNames&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;();&lt;/span&gt; 
    assertEquals&lt;span style=&#34;color:#f92672&#34;&gt;(&lt;/span&gt;expected&lt;span style=&#34;color:#f92672&#34;&gt;,&lt;/span&gt;actualList&lt;span style=&#34;color:#f92672&#34;&gt;);&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now your test will fail.&lt;/p&gt;
&lt;h3 id=&#34;fail-first-approach&#34;&gt;Fail first approach&lt;/h3&gt;
&lt;p&gt;Test driven development emphasized that the process of a test shows
that it fails first before going green. The benefit of such a test
is that we are making an assertion that we do not have false positives which can
lead to sneaky bugs in our production. True story.&lt;/p&gt;
&lt;p&gt;It behoves an aspiring programmer to think of testing as a language.
Thinking of your test in terms of Given, When and Then is helpful.
Testing is hard, and I believe it&amp;rsquo;s made that much harder
because of such sneaky scenarios. Test wisely friends!&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;A&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>1% more over time</title>
      <link>/2022/02/28/1-more-over-time/</link>
      <pubDate>Mon, 28 Feb 2022 09:33:42 -0500</pubDate>
      <guid>/2022/02/28/1-more-over-time/</guid>
      <description>&lt;p&gt;The math is there, with sustained effort, results become apparent. I&amp;rsquo;m
using this blog to serve as a measure of my knowledge in java development.
I&amp;rsquo;m hoping that at some point this might help others on their journey. Today,
during a pairing session, I had forgotten how to kill the process that is on
a certain port. It was kind of agitating but it served as a reminder that we
should invite such an experience to be something of good use, something that
will serve to increase your understanding of a specific domain of choice
given that you are deliberate about it. Killing the process on port :8080&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;lsof -i :8080 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;this will print out the PID which you will then proceed to kill&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;kill -9 PID 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This might feel awkward if you haven&amp;rsquo;t done this stuff
before, but worry not, developing an understanding of what the port is and
why you need to kill it is important and an early lesson that benefits even experienced developers to revisit.  This is a quick and simple one for today and remember, as long as you do 1% of concentrated effort, you&amp;rsquo;ll see the results in the long run.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;A&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>Debug early and debug often</title>
      <link>/2022/02/20/debug-early-and-debug-often/</link>
      <pubDate>Sun, 20 Feb 2022 09:33:42 -0500</pubDate>
      <guid>/2022/02/20/debug-early-and-debug-often/</guid>
      <description>&lt;p&gt;As a new software developer, it is your responsibility to understand
the product that you are developing for and ask questions in instances where
you do not know the answer.  Having spent the better part of my career in
marketing and graphic design, I&amp;rsquo;ve developed an astute ability to listen and
ask good questions. While developing a technological understanding of the
tools is important and necessary, I found that augmenting the technical
learning with practical business domain understanding was critical in
allowing me to develop a fluency in the product that I was working with.
Between each and every goal, between each and every gap in knowledge were
small incremental steps towards understanding. Mindfully we take these steps and
enjoy the process of stepping forward with our foot grounded in our very best
understanding of the problem. Maybe it&amp;rsquo;s bad engineering, and most people
reason with problems differently. I don&amp;rsquo;t know, it&amp;rsquo;s hard to say exactly
what route is the best route and that&amp;rsquo;s why it&amp;rsquo;s mostly just important to find
what works with you and to reinforce it. The debugger works for me but
admittedly even I&amp;rsquo;m questioning that tactic, and recognizing that my style will
evolve over time and that&amp;rsquo;s a process you&amp;rsquo;ve got to fall in love with.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;Alvin&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>The felt experience of software development</title>
      <link>/2022/02/01/the-felt-experience-of-software-development/</link>
      <pubDate>Tue, 01 Feb 2022 09:33:42 -0500</pubDate>
      <guid>/2022/02/01/the-felt-experience-of-software-development/</guid>
      <description>&lt;p&gt;Software engineering has boomed. If you&amp;rsquo;re between the ages of 24 and 45,
then likely you are or know someone who is a software engineering.
Let&amp;rsquo;s remember exactly what software engineering is. The development of an idea into an actuality.
Our generation has seen such a scale of rapid development in the application development world that
anyone with an idea and knowledge of programming can potentially disrupt longstanding industries.
This is the age of the idea. The demand for software engineers is huge.
Training schools, known as boot camps, aim to upskill even the most novice of software engineers.
This drastically reduced the barrier to entry for this field. A more diverse talent pool of
applicants presented itself in a time when inequality gaps stemmed from systems
that inadvertently oppressed women and people of color. I am one of the thousand
of people who decided to pursue software engineering as a career path with little prior training
as a Fine Arts major who went into marketing and communications. I&amp;rsquo;ll share honestly and transparently.
Perhaps as a way to provide historical record of this time and place that we find ourselves in.
This blog will certainly evolve over time, and I hope to evolve with it.
I hope you do too somehow. :-)&lt;/p&gt;
&lt;p&gt;Thank you for being here in this space.&lt;/p&gt;
&lt;p&gt;Cheers,&lt;/p&gt;
&lt;p&gt;A&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
