07 May 2015

PragmaticAndy Burns Down the House

I've been a software developer throughout the "Agile Revolution."  My first team lead, back in 2001 said these words to me and I've always taken them to heart:
I think the world's pretty done with us [Software Developers].  I feel like we've got about 5 years to get our act together or that's it.
Apropos, that same year a highly influential group of practitioners signed the Agile Manifesto.   Amid waves of Dot-Com-Bubble-Bursting, offshoring, and right-sizing, they kept it simple:  Here's what works; apply liberally.

That was 14 years ago.  In the intervening time, much like Protestantism after Luther, factions emerged:  eXtreme Programming, Scrum, Kanban, Scaled Agile Framework.  Characteristically, 25-year-old me thought these were all leaps forward.   At 36-and-a-half, my cynicism grows: I've seen Agile roll-out to 1000+ developers in 2 world-wide organization across different corporate and civic cultures.  I'll gladly replace Sisyphus rolling the rock uphill in Hades before I'd do it again.

Apparently I'm not alone:  Yesterday, Andy Hunt--one of those very signatories--took his football and went home.

* * *

Okay...now what?

Maybe before we jump into something else--a Trademarked name already, and a .com!--we ought to take some time to grieve and reexamine, lest the next thing be worse that what's ending.

For my part:

  • I like making clients happy, whether that's the guy in the next cube or a customer 12 timezones away.  It's validating.
  • Sometimes to do that, you need a spec (a contract), sometimes you need a conversation.  Throwing specs away was naive, just as much as slavishly expecting spec == quality.  
  • I like demo'ing often and getting instant feedback from a client (or her designee).  
  • I like designing things before I code.  Sometimes.  I shouldn't be shouted down for that by someone invoking 'YAGNI' or 'BDUF' as magic talismans.
  • I like hacking together a PoC without much design.  Sometimes.
I want to make: 
  1. Software that works.
  2. Software that somebody finds useful.
  3. Software that doesn't get thrown away every 6 months.
Maybe GROWS (TM) [BLECH!] will end-up being a panacea.  Part of me genuinely hopes something works and gains adoption as "Standard Practice" so we can have solid standards in Software Engineering the way that Mechanical and Civil Engineers do.  I question whether I'll live to see that day.

The largest part of me couldn't care less.  I'd rather be coding.

06 May 2015

Programming via Ecclesiastes

Ecclesiastes is Solomon's valediction as an old man.  From the purported wisest man that ever lived--gifted with wisdom from God Himself--comes a book that seems a real downer on the hollowness of nearly every pursuit in his hedonistic life.

Sometimes, having worked as a developer for 16 years, I'm reminded off Ecclesiastes.

With apologies to Solomon:

To everything there is a season:
  A time to build big, and a time to build small,
  A time to write, and lots more time to sustain,
  A time to break systems apart,
  A time to pull systems together.
A time to delete, and a time to merge.


Most telling is the author's refrain:  "All is vanity! There is nothing new under the sun."

It doesn't discourage me, but it does make me think:  Is this worth rewriting/redoing, or should I just use something off-the-shelf.  The thrill of just writing everything myself is gone, replaced by the understanding that whatever I write is more "mental surface area" for the rest of my colleagues to understand, versus using a well-documented and understood implementation.

And in that, growth.  To everything, there is a season.

03 April 2015

Refutation: Go's Design is a Service to Experienced Developers


Reference:  Why Go’s design is a disservice to intelligent programmers

I honestly can't decide if this article is sarcastic praise for #golang hitting every one of its design goals, because once you look past the ad-hominem crap, it's there:

  • "Similar to Go, the book is easy to read with good examples and clocking in at about 150 pages you can finish it in one sitting." 
    • Read: Go's easy to learn.  The documentation is excellent.
  • "I’ve always thought that the developers at Google are hand picked from the brightest and best on Earth. Surely they can handle something a little more complicated?" 
    • He misses the point entirely.  Those same devs choose to go away from the frills to get leaner and faster.  Code is a means to an end at Google, and they realize that it's going to be read by other developers many times more than it's written.  Simplicity and clarity surmount all else; Google's stultifying C++ style guide makes this apparent.
  • "There are no shortcuts in Go, it’s verbose code or nothing."
    • Shortcuts get abused.  See: C preprocessor macros.
    • I read this as "'I have to check return values and handle errors' == verbose code."  This is not a valid Software Engineering view.  IMO, it should be obvious whether code handles errors properly.
  • "The language could be described as C with training wheels."
    • Thanks!  I rather like C.  I just wish it had a decent Standard Library, no header files, less "undefined" behavior, inbuilt concurrency, package management, and garbage collection. 
      • Oh wait, that's Go.
    • Obligatory:  Java is C++ with training wheels.  That worked out rather well.
  • "Their recommendation was to just copy the entire repository at that time into your project and leave it as-is."
    • This is known as 'vendoring your dependencies', and it's a common practice.
  • "There is [sic] no new ideas in the language apart from the concurrency support (which is excellent by the way) and it’s such a shame."
    • Unsupported assumption: Something must contain new ideas to be valid.
    • "Concurrency support...is excellent."  Yes, it is.  Loads better than the shared-state locking pthreads crap we've dealt with for 20 years.

Every fact in this article--aside from Generics--points to Go achieving its design goals.  In a very backhanded way, TFA supports why people writing server-side code at scale should consider using Golang.

* * *

The summary demonstrates so many problems in our industry right now:

[Go] has been written for lesser programmers using an old language as a template.

Fellow programmers, can we get over ourselves, please?  To categorically refute the above:
  1. On any given day, we're all lesser programmers.  For my part, I'm certainly not on all cylinders on 3 hours' sleep in the middle of crunch trying to ship product.  It's no sin to want code that's easy to reason about when you read it.
  2. Choosing something easier to read and sustain does not make you a lesser programmer any more than choosing to read Hemmingway in lieu of Shakespeare.
  3. Ah: 'using an old language'.  This is the heart of it.  'Go' isn't cool, so let's set it aside.
I find the above exasperating, simply because it's the same naïveté that's led to 1000 JavaScript Web MVC Frameworks, LISP fragmentation, etc.   

As Software Engineers--if such a PE-worthy profession ever emerges--we must surmount simple fad and fashion and entertain what's useful, evaluating on merit alone.



07 March 2015

Journaling Some Work

It's 1:38 pm. But for a snowstorm on Thursday, this would be my 7th straight day at work.

I'm doing things that people variously term "unwise," "strange," or "nearly impossible."

I've nearly gotten them to work, but not yet.  That's why I'm here.

01 March 2015

Sunday Afternoon at Work

"Well, sir, you certainly didn't have afternoons like *this*, when you were doing the Architect Gig."

Gotta love that inner critic.  There's always something.

My response:  Indeed, but I didn't *ever* have weeks like last week where we found and solved problems in realtime with a team of engineers, either.  It was lonely, and devoid of the kind of dopamine-enhanced highs I got.

Last week was hard.  Every day except for Wednesday, I was here 'til late.  On two nights, mine was the last car out of the parking log.   Snowpocalypse 2015 put us behind, and a Linux/PAM story that won't die put us even farther behind.

I'm enjoying it, but not today.  Today, I'm just tired.

Time to drive to Louisville to get Joey.