<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Engineering on Hillel Wayne</title>
    <link>https://www.hillelwayne.com/tags/engineering/</link>
    <description>Recent content in Engineering on Hillel Wayne</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 15 Jul 2019 00:00:00 +0000</lastBuildDate>
    
	<atom:link href="https://www.hillelwayne.com/tags/engineering/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>Modeling Missing Requirements</title>
      <link>https://www.hillelwayne.com/requirements/</link>
      <pubDate>Mon, 15 Jul 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/requirements/</guid>
      <description>Many bugs are implementation errors: there is a mistake in the code that makes it not do what you wanted it to do. For example, you may have accidentally left out the &amp;ldquo;list is empty&amp;rdquo; case, or written a nonterminating function. You can identify it as &amp;ldquo;definitely wrong&amp;rdquo; for a given input. Most testing, in fact most writing on software correctness, deals primarily with implementation errors.
Above that we have specification errors.</description>
    </item>
    
    <item>
      <title>It&#39;s Hard to Reason About Systems</title>
      <link>https://www.hillelwayne.com/post/reasoning-about-systems/</link>
      <pubDate>Tue, 13 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/reasoning-about-systems/</guid>
      <description>In programming arguments, such as static vs dynamic typing,1 people use their experiences and reason to frame these debates. However, reason is often a poor grounding for justifying complex positions. Usually warnings against using &amp;ldquo;reason&amp;rdquo; take the form of &amp;ldquo;it&amp;rsquo;s easy to be biased&amp;rdquo; or &amp;ldquo;we tend to make logical fallacies.&amp;rdquo; But this presupposes that if we were less biased we could answer the question by thinking really hard. I&amp;rsquo;d like to argue that this is actually impossible: we can&amp;rsquo;t understand something &amp;ldquo;static vs dynamic&amp;rdquo; with reason alone.</description>
    </item>
    
    <item>
      <title>The best software engineering paper you haven&#39;t read</title>
      <link>https://www.hillelwayne.com/post/the-best-se-paper/</link>
      <pubDate>Fri, 12 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/the-best-se-paper/</guid>
      <description>I want to call attention to one of the best papers I&amp;rsquo;ve ever read on software engineering, ever. Ready to be dazzled? Here goes:
Fixing Faults in C and Java Source Code: Abbreviated vs. Full-Word Identifier Names (preprint)
I know, right? Sheer brilliance.
Okay, maybe it doesn&amp;rsquo;t have the most exciting subject matter, but I think everybody should read it. Here&amp;rsquo;s why:
Manageable scope. &amp;ldquo;Is clean code good?&amp;rdquo; Too broad, what is &amp;lsquo;clean code&amp;rsquo; and what is &amp;lsquo;good&amp;rsquo;?</description>
    </item>
    
    <item>
      <title>What&#39;s the Right Tool for the Job?</title>
      <link>https://www.hillelwayne.com/post/right-tool/</link>
      <pubDate>Sun, 10 Dec 2017 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/right-tool/</guid>
      <description>&amp;ldquo;Use the right tool for the job&amp;rdquo; is a pretty tired cliche. Mostly it&amp;rsquo;s used to dismiss overengineering and one-size-fits-all solutions to problems, like using microservices for your 10-user app. It isn&amp;rsquo;t a bad saying, it&amp;rsquo;s just tautologically true. I don&amp;rsquo;t think anybody wants to use the wrong tool for the job, unless they&amp;rsquo;re trying to sabotage it. &amp;ldquo;Should I use the right tool for the job?&amp;rdquo; is a rhetorical question.</description>
    </item>
    
    <item>
      <title>Introduction to Contract Programming</title>
      <link>https://www.hillelwayne.com/post/contracts/</link>
      <pubDate>Mon, 27 Nov 2017 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/contracts/</guid>
      <description>I&amp;rsquo;ve namedropped contracts enough here that I think it&amp;rsquo;s finally time to go talk about them. A lot of people conflate them with class interfaces / dynamic typing / &amp;ldquo;your unit tests are your contract&amp;rdquo;, which muddies the discussion and makes it hard to show their benefits. So I&amp;rsquo;d like to build up the idea of contracts from first principles. We&amp;rsquo;re going to work in Python, up until the point where things get crazy.</description>
    </item>
    
    <item>
      <title>Why TDD Isn&#39;t Crap</title>
      <link>https://www.hillelwayne.com/post/why-tdd-isnt-crap/</link>
      <pubDate>Mon, 30 Oct 2017 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/why-tdd-isnt-crap/</guid>
      <description>After my recent vitriol about unit testing, a couple of people sent me Why TDD is Crap as a thorough debunking of TDD and unit testing. As someone very interested in software correctness, I ended up writing a debunking of his debunking. Transcriptions will be in quotes, my responses below. Some important notes:
 From what can tell, neither of us is using TDD in the &amp;ldquo;purest&amp;rdquo; possible sense of &amp;ldquo;write the bare minimum that makes the smallest unit test pass&amp;rdquo;.</description>
    </item>
    
    <item>
      <title>Unit Tests Aren&#39;t Tests</title>
      <link>https://www.hillelwayne.com/post/unit-tests-are-not-tests/</link>
      <pubDate>Thu, 26 Oct 2017 00:00:00 +0000</pubDate>
      
      <guid>https://www.hillelwayne.com/post/unit-tests-are-not-tests/</guid>
      <description>This is an absolutely insane idea and I&amp;rsquo;m delighted by its audacity so I&amp;rsquo;m sharing it with all y&amp;rsquo;all. There&amp;rsquo;s like a bazillion things wrong with it but saying dumb shit has never stopped me before so let&amp;rsquo;s do some grambling!
The way I see it, unit tests act as a frame around your coding. The most common practice is you write the tests to cover the return values and calls, write your code, and enforce that it passes the unit tests.</description>
    </item>
    
  </channel>
</rss>