    <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/">
     <channel>
        <title>ACCU  :: A Day in the Life of a Full-Stack Developer</title>
        <link>https://members.accu.org/index.php/articles/2769</link>
        <description>Professionalism in Programming</description>
        <dc:language>en-us</dc:language> 
        <dc:creator>Administrator</dc:creator> 
        <admin:generatorAgent rdf:resource="http://www.xaraya.org" /> 
        <admin:errorReportsTo rdf:resource="mailto:webeditor@accu.org" />
       <sy:updatePeriod>hourly</sy:updatePeriod>
       <sy:updateFrequency>1</sy:updateFrequency>
       <docs>http://backend.userland.com/rss</docs>




<div class="xar-mod-head"><span class="xar-mod-title">Process Topics + Overload Journal #156 - April 2020</span></div>

<table border="0" cellpadding="1" cellspacing="0">
    <tbody>
    <tr>
        <td valign="top">
            Browse in :
       </td>
       <td valign="top">

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c13/">Topics</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c221/">Process</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/">All</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c76/">Journals</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c78/">Overload</a>

                     &gt;                         <a href="https://members.accu.org/index.php/articles/c409/">o156</a>
<br />

                                            <a href="https://members.accu.org/index.php/articles/c221-409/">Any of these categories</a>

                    -                        <a href="https://members.accu.org/index.php/articles/c221+409/">All of these categories</a>
<br />
</td>
   </tr>
   </tbody>
</table>




<div class="xar-error">
   <p>
 <strong>Note:</strong> when you create a new publication type,
the articles module will automatically use the templates
<em>user-display-[publicationtype].xt</em>
and <em>user-summary-[publicationtype].xt</em>.
If those templates do not exist when you try to preview or display a new article,
you'll get this warning :-)  Please place your own templates in themes/<em>yourtheme</em>/modules/articles . The templates will get the extension .xt there. </p>
</div>
<div class="xar-norm xar-standard-box-padding">
   <h1><strong>Title:</strong>&nbsp;A Day in the Life of a Full-Stack Developer</h1>
<p><strong>Author:</strong>&nbsp;Bob Schmidt</p>
<p>
<strong>Date:</strong> 01 April 2020 18:44:23 +01:00 or Wed, 01 April 2020 18:44:23 +01:00</p>
<p><strong>Summary:</strong>&nbsp;Many roles claim to be full stack. Teedy Deigh shares a day in the life of a full stack developer.</p>
<p><strong>Body:</strong>&nbsp;<p><strong>06:00</strong></p>

<p>Uh... what... <em>Snooze</em></p>

<p><strong>06:15</strong> </p>

<p><em>Snooze</em></p>

<p><strong>06:30</strong> </p>

<p><em>Snooze</em></p>

<p><strong>06:45</strong> </p>

<p><em>Falls out of bed</em></p>

<p>Why did I set my alarm for this time of night... morning... whatever...?</p>

<p>Oh yes. Full-stack development. Read and watched some stuff on it yesterday. Couldnâ€™t find anything of substance. Sure, a whole load of stuff on web development â€“ JavaScript, HTML, CSS and the occasional database â€“ but nothing on the rest of the stack and how to do it properly.</p>

<p>So, thought Iâ€™d better explore it for myself. Full stack, full day, full on!</p>

<p><strong>07:03</strong> </p>

<p>OK, dragged a comb across my head, found my way downstairs, drank a cup. Now Iâ€™ve looked up, Iâ€™ve noticed Iâ€™m late.</p>

<p>I said was going to get my head down and online by 06:30. Time for another cup.</p>

<p><strong>07:54 </strong></p>

<p>OK, someone on the internet was wrong, but Iâ€™ve fixed that now. Where shall we start? Oh yeah, that JavaScript framework I was looking at yesterday â€“ Anglia? Nod? Mithrandir? Whatever. If weâ€™re gonna code the full stack properly, weâ€™re going to need to write our own framework. Canâ€™t just go around reusing other peopleâ€™s stacks â€“ they donâ€™t call it partial-stack development, amiright?!</p>

<p><strong>09:47</strong> </p>

<p>OK, thatâ€™s the first version of <span class="filename">OverReact.JS</span> pushed. No tests, no docs, but still enough to show these so-called full-stack developers how itâ€™s done.</p>

<p>Letâ€™s just try it out on a pet store example. No, thatâ€™s not very ethical... mmm, OK, something else thatâ€™s enterprisey... FizzBuzz it is, then!</p>

<p><strong>09:58</strong> </p>

<p>Hmm. Somethingâ€™s not working. Thereâ€™s a bug. Not sure what it could be.</p>

<p><strong>10:58</strong> </p>

<p>OK, still donâ€™t know what the problem is â€“ and thatâ€™s after five cups of coffee! Like looking for a needle and thread in a call stack. Bloody legacy code.</p>

<p>Time for a rewrite â€“ <span class="filename">OverReact.JS2</span>! Maybe this time Iâ€™ll write some tests. Gonna need a testing framework.</p>

<p><strong>12:03</strong> </p>

<p>Right, that only took three more coffees, but now the Jitters unit-test framework is good to go.</p>

<p>Hmm... must be time for breakfast, then the <code>OverReact</code> rewrite.</p>

<p><strong>12:29</strong> </p>

<p>Well, I must confess, Iâ€™m a little surprised that that person on the internet is still wrong, especially after all the suggestions I offered!</p>

<p>Anyway. Onward to <span class="filename">OverReact.JS2</span>!</p>

<p><strong>15:11</strong> </p>

<p>OK, that took a little longer than expected, but given what I can now see are the glaring deficiencies of the first version, itâ€™s important to account for all possible use cases and make everything more configurable. I think I once heard someone say that it was important to try to please all the people all of the time... or something like that.</p>

<p><strong>15:33</strong> </p>

<p>I donâ€™t believe it! A bug. Again.</p>

<p>Hmm... perhaps I should have used my Jitters framework to write some tests with?</p>

<p>Is it time for lunch? Must be time for lunch.</p>

<p><strong>15:57</strong> </p>

<p>The plan was to write some tests, but Iâ€™ve changed my mind as that will just slow me down, and Iâ€™m trying to be Agileâ„¢. â€˜Responding to change over following a planâ€™ is the mantra Iâ€™m following today.</p>

<p>The <span class="filename">OverReact.JS2</span> code doesnâ€™t look like it has any issues â€“ in fact, it looks quite happy from where Iâ€™m sitting: emoji identifiers FTW! I chose an uncompromisingly minimal coding style that shuns the excesses of commenting, indentation, long identifiers and clunky, procedural control flow. So the problem canâ€™t be there, right? Must be somewhere else on the stack.</p>

<p>Perhaps the JavaScript engine is at fault?</p>

<p><strong>18:12</strong> </p>

<p>Writing Veg.JooS, my new JavaScript engine, seems to be going well so far, although I suspect that I might be looking at an all-nighter. That, however, is not my main concern: my reliance on an existing C compiler, regardless of its long-standing open-source pedigree, may be a weak link in my tool chain.</p>

<p>Rather than stand on the toes of giants, it may be wiser to write my own compiler.</p>

<p><strong>19:49</strong> </p>

<p>Occurs to me that it might be time for lunch... or something.</p>

<p><strong>20:01</strong> </p>

<p>Well, this is turning into something of an odyssey, but I canâ€™t believe I overlooked an obvious step: I need to create a compiler compiler to save time and trouble in future!</p>

<p>OK, back to food... and, can you believe it, that person on the internet is still wrong?</p>

<p><strong>20:15</strong> </p>

<p>The patterns Iâ€™m going to use to create YakShavR are clear in my head, but thereâ€™s a couple of things I think Iâ€™m missing.</p>

<p>Ah yes, coffeeâ€™s what Iâ€™m missing!</p>

<p><strong>20:59</strong> </p>

<p>Itâ€™s clear that what Iâ€™ve been missing is the right language. No, I donâ€™t mean â€œ@#$%&amp;!â€ â€“ although thereâ€™s been plenty of that today â€“ I mean for implementing YakShavR. I started writing it in C but, you know, chickens and eggs!</p>

<p>Iâ€™ve also decided that maybe C is not the right way to go for Veg.JooS. I need a better systems programming language, something with less historical baggage, unsullied by popularity and compromise. Think I might call it ToldUSo, and will post a repo link to the person â€“ now people! â€“ on the internet who is wrong.</p>

<p>Anyway, how to break the chicken-and-egg cycle? Lisp! Pure and simple, and no need for tests as itâ€™s already functional.</p>

<p><strong>21:49</strong> </p>

<p>Two pomodoros later (minus the wasteful five-minute breaks) and Iâ€™ve got the core Lisp eval function written out on my whiteboard. Or evil, looking at the way Iâ€™ve written it â€“ well, scribbled â€“ which does highlight a bit of a problem: I was going to code it up, but Iâ€™m not sure I can read it now. Looks like it was written by a caffeinated spider.</p>

<p>Caffeine. Coffee. Yup, thatâ€™s the problem. Gonna need more of that if Iâ€™m to crack this code.</p>

<p><strong>22:41</strong> </p>

<p>OK, I think Iâ€™ve almost got it. Must be time for... a meal.</p>

<p><strong>23:45</strong> </p>

<p>Perhaps, a little unbelievably, the people on the internet who are wrong might actually be right. They pointed out that I donâ€™t seem to be willing to compromise. Damn straight! Uncompromising is my middle name (albeit one I had to get changed by deed poll, as my parents originally chose Davina).</p>

<p>Andrew Koenig observed that â€œ<em>People who brook no compromise in programming languages should program in lambda calculus or machine language</em>.â€ I need to bootstrap the Lisp interpreter and the answer has been staring me in the face. Time to get back to the metal.</p>

<p><strong>01:23</strong> </p>

<p>More coffee. Things are going well.</p>

<p><strong>02:11</strong> </p>

<p>More coffee. Things are not going well.</p>

<p>Working at this level is high RISC; I need to go high Church. Alonzo Church, that is. Lambda calculus is the purest of the pure. Itâ€™s so pure that it makes Haskell look like JavaScript. So pure, in fact, that it doesnâ€™t even have numbers â€“ there are only lambdas. Using Church numeral encodings, you define your own numbers.</p>

<p>This is perhaps the truest expression of the software craft movement: hand-crafted, artisanal integers. There are no Booleans, so you make your own truth. Mind-blowing. Want a list? You can define a pair, and then nominate roles for each element â€“ first blow your mind out in a car, second cdr be used as the tail â€“ and cons everything up from there.</p>

<p><strong>02:56</strong> </p>

<p>Food? Coffee? Am I hungry? Am I thirsty? What am I doing? Who am I?</p>

<p><strong>03:14</strong> </p>

<p>Definitely jitters â€“ no, not the testing framework. Hallucinations? Hallucinations.</p>

<p><strong>04:53</strong> </p>

<p>Wuh! Mustâ€™ve dozed off. Went into a dream.</p>

<p>Progress so far: Iâ€™ve got zeroes and ones. Lots of them. Frolicking lambdas ready to be crafted into a full stack.</p>

<p>Instead of FizzBuzz, Iâ€™m going to work on some more ambitious and algorithmic: a highly configurable, reusable, general-purpose algorithm that counts anything from sheep in a field, a semiring or a group, to holes in Blackburn, Lancashire (even if theyâ€™re rather small).</p>

<p>Feeling a little strange. And Iâ€™m out of coffee.</p>

<p><strong>06:00</strong> </p>

<p>Uh... what... <em>Snooze</em></p>

<p class="bio"><span class="author"><b>Teedy Deigh</b></span> plans to retire somewhere nice. It is said, however, that no plan of battle survives contact with the enemy. In the meantime, youâ€™ll find her hoarding zeroes and ones and toilet paper.</p>
</p>
<p><strong>Notes:</strong>&nbsp;</p>
<p><em>More fields may be available via dynamicdata ..</em></p>
</div>
</channel>
</rss>
