<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>J.P. Hamilton</title>
    <description>Software craftsman, constantly evolving...</description>
    <link>http://jphamilton.github.io//</link>
    <atom:link href="http://jphamilton.github.io//feed.xml" rel="self" type="application/rss+xml" />
    
      <item>
        <title>A very roundabout tale on recruiters</title>
        <description>&lt;p&gt;I’m 45 years old. I’ve been writing software regularly since 1979 (at the wee age of 9). To be fair, it was simplistic text adventure stuff back then - Ohio Scientific FTW! - but I progressed pretty quickly. I got an Atari 800 in 1981 and started getting into 6502 Assembly. I did that for a few years and then my dad got some 8088 based Compaq piece of shit somewhere between 1984-1986…I don’t &lt;em&gt;exactly&lt;/em&gt; remember. Vague memories of Turbo Pascal and Prolog go here.&lt;/p&gt;

&lt;p&gt;What I do remember was the thing sucked. My Atari had multiple graphics modes and a dedicated sound chip and this thing had nothing really…except for more memory. I never would have guessed this would be the machine that would ultimately dominate the planet. I felt totally ripped off.&lt;/p&gt;

&lt;p&gt;Eventually I went to school, took a minor detour in the film industry, took Russian, came back to school. Always coding. Fast forward.&lt;/p&gt;

&lt;p&gt;I’ve been getting paid to write software since 1993. That’s 21 years of coding and getting paid for it. And 35 years of being on a keyboard and trying to make stuff happen.&lt;/p&gt;

&lt;p&gt;(Somewhere in here DirectX was in beta and I begged some Microsoft guy to give me access. I knew the guys name but I had to figure out his email address because it was unpublished. At the time they were only giving it out to game developers. I got a copy and was put on the beta. I made an Asteroids clone and interviewed at Cinematronics in Austin. But I didn’t make the cut.) &lt;/p&gt;

&lt;p&gt;Somewhere around 1998 I started to finally “get good”. I’m a slow learner after all. &lt;/p&gt;

&lt;p&gt;Around this time I stopped buying “Learn XYZ in 21 Days” type books and started buying books about building better software. I got sick of people telling me “how” and desperately wanted to learn the “why”.&lt;/p&gt;

&lt;p&gt;I accidentally found Robert C. Martin’s (aka Uncle Bob) articles on the SOLID principles in C++ Report. My mind was blown. I don’t think I had ever thought about software this way before. I just wanted everything to work.&lt;/p&gt;

&lt;p&gt;I wrote 2 books for O’Reilly. &lt;/p&gt;

&lt;p&gt;The first was Visual Basic Shell Programming. COM bullshit. I wasted years on COM. I could go on and on about this.&lt;/p&gt;

&lt;p&gt;The second one was Object-Oriented Programming with Visual Basic .NET (published in 2002). Uncle Bob reviewed the book for me. I never sent him a copy because I was ashamed at the direction the publisher made me take. A little known fact is this book is the first time the SOLID principles were ever addressed in the .NET space.&lt;/p&gt;

&lt;p&gt;Anyway, last week, I was contacted by a recruiter on LinkedIn. He wanted to know what my GPA was.&lt;/p&gt;

</description>
        <pubDate>Sat, 24 Jan 2015 23:13:54 +0000</pubDate>
        <link>http://jphamilton.github.io//informative/rant/2015/01/24/wtf/</link>
        <guid isPermaLink="true">http://jphamilton.github.io//informative/rant/2015/01/24/wtf/</guid>
      </item>
    
      <item>
        <title>Looks are everything</title>
        <description>&lt;p&gt;I’ve been brought in on a project that has been in progress for a year and a half now.&lt;/p&gt;

&lt;p&gt;There’s a lot wrong with it. There is “architecture” for the sake of architecture. Abstractions on top of abstractions (I really hate Repository on top of Entity Framework). Layers of needless complexity - there’s 5 layers from the UI to a place where I can make a database call. One of those is a WCF service boundary. &lt;/p&gt;

&lt;p&gt;Folks, this is a thick client desktop app where the database is going to be on the same machine.&lt;/p&gt;

&lt;p&gt;You just don’t end up in a place like this when you are driving your design from tests (which is what I like to do) or at least doing the simpliest thing that works and refactoring when it doesn’t anymore.&lt;/p&gt;

&lt;p&gt;And on top of everything, this project violates one of the most important rules of all…&lt;/p&gt;

&lt;p&gt;** The App Must Look F–king Cool **&lt;/p&gt;

&lt;p&gt;The UI is how your client is going to perceive you as a developer and the overall quality of the application. They do not care if your code is awesome or if your architecure is sweet. They want a good looking app that’s easy to use and performant. Everything else comes after. Yes, even quality. You think I’m joking? I’ve experienced time and time again.&lt;/p&gt;

</description>
        <pubDate>Fri, 23 Jan 2015 23:13:54 +0000</pubDate>
        <link>http://jphamilton.github.io//opinion/2015/01/23/blog/</link>
        <guid isPermaLink="true">http://jphamilton.github.io//opinion/2015/01/23/blog/</guid>
      </item>
    
      <item>
        <title>Corporate Code Sucks</title>
        <description>&lt;p&gt;The SDLC at my current client seems to be something like this:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Find the best people to build the app. &lt;/li&gt;
  &lt;li&gt;Turn the app over to the cheapest team you can find to &lt;em&gt;“maintain”&lt;/em&gt; it. &lt;/li&gt;
  &lt;li&gt;When the app falls apart, throw it away, go back to 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I’ve seen this cycle play out repeatedly. I’m watching it happen now. My client kept me on an extra year to develop new features along side the “maintenance team”. It’s been painful watching the tragedy unfold. That’s why they will get nothing but double quotes from me.&lt;/p&gt;

&lt;h4 id=&quot;why-is-the-app-falling-apart&quot;&gt;Why is the app falling apart?&lt;/h4&gt;

&lt;p&gt;I think there are a lot of really, really smart people in this field…that absolutely should not be writing code. I think they lack an eye for it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: Not claiming that I am hot shit here, but I have spent a considerable amount of time studying how good software is constructed and practicing said construction. I have a decent-ish eye for it.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At this point in history, I think every programmer has heard of the term DRY and knows what it means. But you’d never guess if you could peek into the average, corporate code base. Blocks of duplicated code everywhere. This is the #1 bad thing I see. &lt;/p&gt;

&lt;p&gt;No grasp of data hiding. Public things that should be private. This is the #2 bad thing I see.   &lt;/p&gt;

&lt;p&gt;Poor understanding of encapsulation. If you always have to call method A, then B, then C. How about putting the calls to B and C inside A so I don’t have to remember that stupid shit? People generally seem to be unable to group related things together. And they like to write long methods that take 20 parameters. This is the #3 bad thing I see.  &lt;/p&gt;

&lt;p&gt;This stuff is all bad, but the real reason the app is falling apart is because the people making the financial decisions don’t understand their poor choices. This is really the #1 bad thing I see, so re-order the others.&lt;/p&gt;

&lt;h4 id=&quot;keep-it-fresh&quot;&gt;Keep it fresh&lt;/h4&gt;

&lt;p&gt;If I was runnin’ this maintenance mode show, here’s what I would do:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Refactor, refactor, refactor. &lt;/li&gt;
  &lt;li&gt;Test, test, test.&lt;/li&gt;
  &lt;li&gt;Keep 3rd party libraries up to date.&lt;/li&gt;
  &lt;li&gt;Keep updating the UI. Users like this.&lt;/li&gt;
  &lt;li&gt;Keep the documentation current.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Basically, non-stop TLC.&lt;/p&gt;

&lt;p&gt;The “maintenance” team on my project is basically stabbing holes into the architecture and putting their code into the bloody wounds. There is no attempt to understand how everything fits together or try to make the app better. The only concern is fixing the bug, duplication be damned. Over time this app is definitely gonna die.&lt;/p&gt;

&lt;p&gt;They have two “testers” who apparently have the easiest job in the world, because they don’t test. When my team was in place we did a full regression test every release. We had 1 tester. They don’t do that now because they say there’s no time. When I asked about changing the release cycle to accommodate a full regression test, they acted like I was an idiot. But then if you cause a bug you get shamed by management. And everyone acts like you are an idiot then, too.&lt;/p&gt;

&lt;p&gt;We are behind on several releases of the major libraries we use. The team is still using old versions of Visual Studio, too. In the glory days, we used to update everything after every release. We were always current. We were always updating the UI, too. It sounds superficial, but the users love it. If the app feels fresh, they keep using it. It keeps them really excited about doing a bunch stuff that probably doesn’t even matter in the grand scheme of life.&lt;/p&gt;

&lt;h4 id=&quot;if-youre-gonna-trash-it-anyway&quot;&gt;If You’re Gonna Trash it Anyway&lt;/h4&gt;

&lt;p&gt;I tried to explain to my client that the requirements documentation was probably the most important thing that could come out of the project. They didn’t listen to me, of course. “No one reads that”, they said. When I said, “Wouldn’t it have been nice to have at the beginning of this project?” they didn’t quite grasp the irony.&lt;/p&gt;

&lt;p&gt;I think that if you are going to continually rewrite your apps, it would be a big help to have all of the business rules documented. &lt;/p&gt;

&lt;p&gt;It’s going to be a big help to the next team that comes in.&lt;/p&gt;

</description>
        <pubDate>Wed, 12 Nov 2014 23:13:54 +0000</pubDate>
        <link>http://jphamilton.github.io//development/methodology/opinion/2014/11/12/esdlc/</link>
        <guid isPermaLink="true">http://jphamilton.github.io//development/methodology/opinion/2014/11/12/esdlc/</guid>
      </item>
    
      <item>
        <title>A Simple Blog</title>
        <description>&lt;p&gt;After a 3 year hiatus, I came to the conclusion that I needed to start blogging again. But I didn’t want to deal with Azure or web hosting or some overly complicated blogging platform so I kept putting it off.&lt;/p&gt;

&lt;p&gt;Then I remembered &lt;a href=&quot;https://pages.github.com/&quot;&gt;Github Pages&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It was super-simple to set up, even on Windows (which is not really supported)&lt;/p&gt;

&lt;h4 id=&quot;setup-repository&quot;&gt;Setup Repository&lt;/h4&gt;
&lt;p&gt;Follow the directions at &lt;a href=&quot;https://pages.github.com/&quot;&gt;Github Pages&lt;/a&gt;. Go ahead and clone your repo.&lt;/p&gt;

&lt;h4 id=&quot;install-ruby&quot;&gt;Install Ruby&lt;/h4&gt;
&lt;p&gt;For Windows, the easiest thing to do is install it from &lt;a href=&quot;http://rubyinstaller.org/&quot;&gt;RubyInstaller&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;You will also need to install the “Development Kit” that matches your version of Ruby. This will allow you to compile native C/C++ extensions, which is required by Jekyll&lt;/em&gt;&lt;/p&gt;

&lt;h4 id=&quot;install-jekyll&quot;&gt;Install Jekyll&lt;/h4&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;gem install github-pages&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id=&quot;get-a-theme&quot;&gt;Get a Theme&lt;/h4&gt;
&lt;p&gt;Grab a theme from &lt;a href=&quot;http://jekyllthemes.org/&quot;&gt;Jekyll Themes&lt;/a&gt;. Dump all of the contents in your local repo. The theme should contain all the files and directories that are needed to start. Just poke around. You will figure it out.&lt;/p&gt;

&lt;h4 id=&quot;syntax-highlighting&quot;&gt;Syntax Highlighting&lt;/h4&gt;
&lt;p&gt;Install &lt;a href=&quot;https://www.python.org/&quot;&gt;Python&lt;/a&gt;. Jekyll uses &lt;a href=&quot;http://pygments.org/&quot;&gt;pygments&lt;/a&gt; for syntax highlighting. No need to install pygments. It’s there already. &lt;/p&gt;

&lt;h4 id=&quot;comments&quot;&gt;Comments&lt;/h4&gt;
&lt;p&gt;Add &lt;a href=&quot;https://disqus.com/admin/create/&quot;&gt;Disqus&lt;/a&gt;. You want to select “Universal Code” when asked. This will show the HTML/js block for your site.&lt;/p&gt;

&lt;p&gt;In &lt;em&gt;_layouts/post.html&lt;/em&gt; template add the block where you want the comments to appear:&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-liquid&quot; data-lang=&quot;liquid&quot;&gt;&lt;span class=&quot;p&quot;&gt;{%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;page&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;comments&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%}&lt;/span&gt;
	&amp;lt;Disqus Universal Embed Block&amp;gt;
&lt;span class=&quot;p&quot;&gt;{%&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kr&quot;&gt;endif&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;%}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Turn comments on and off in your posts&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-yaml&quot; data-lang=&quot;yaml&quot;&gt;&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;
&lt;span class=&quot;l-Scalar-Plain&quot;&gt;layout&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;     &lt;span class=&quot;l-Scalar-Plain&quot;&gt;post&lt;/span&gt;
&lt;span class=&quot;l-Scalar-Plain&quot;&gt;title&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;      &lt;span class=&quot;l-Scalar-Plain&quot;&gt;A Simple Blog&lt;/span&gt;
&lt;span class=&quot;l-Scalar-Plain&quot;&gt;comments&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;   &lt;span class=&quot;l-Scalar-Plain&quot;&gt;true&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;# &amp;lt;-------------------- Like this&lt;/span&gt;
&lt;span class=&quot;l-Scalar-Plain&quot;&gt;date&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;       &lt;span class=&quot;l-Scalar-Plain&quot;&gt;2014-11-12 23:13:54&lt;/span&gt;
&lt;span class=&quot;l-Scalar-Plain&quot;&gt;summary&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt;    &lt;span class=&quot;l-Scalar-Plain&quot;&gt;Setting up Github Pages on Windows&lt;/span&gt;
&lt;span class=&quot;l-Scalar-Plain&quot;&gt;categories&lt;/span&gt;&lt;span class=&quot;p-Indicator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;l-Scalar-Plain&quot;&gt;github pages jekyll&lt;/span&gt;
&lt;span class=&quot;nn&quot;&gt;---&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h4 id=&quot;build&quot;&gt;Build&lt;/h4&gt;
&lt;p&gt;After making a post or two, build the site (this will also serve it locally): &lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-bash&quot; data-lang=&quot;bash&quot;&gt;jekyll serve&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The &lt;em&gt;_site&lt;/em&gt; directory will contain the results. Never directly modify anything in this directory because it’s emptied on every build.&lt;/p&gt;

&lt;p&gt;If things look good locally, push back to Github.&lt;/p&gt;

&lt;p&gt;It can take several minutes for the changes to show up.&lt;/p&gt;

</description>
        <pubDate>Wed, 12 Nov 2014 23:13:54 +0000</pubDate>
        <link>http://jphamilton.github.io//github/pages/jekyll/2014/11/12/blog/</link>
        <guid isPermaLink="true">http://jphamilton.github.io//github/pages/jekyll/2014/11/12/blog/</guid>
      </item>
    
  </channel>
</rss>
