19 August 2015

Ecclesiastes Moment: The Truth, Narcissist, is that No One Cares

This is sort of a follow-up to my On Steve Jobs post.

I write this with myself as the audience, after getting slapped with fish by life for the past 10 days.

No one cares.

You've been raised in child-centric America, from 1990 to the present.  You're behaviorally Millennial; you don't remember a time before computers, minivans, or helicopter parents.  You've always felt entitled to speak your mind, in whatever the situation.

When affronted, you're either aggressive or passive aggressive.  Unlike your Gen-X forebears, you can't take critique as the standard 'Wah-Wah' din of parents, superiors, or peers.  No.  You feel the need to respond.  And those same people better listen to you, dammit, because you're _________ (insert your name here, Snowflake).   You'll either run your mouth off or go to some form of social media to complain and find surcease.

Ibid: "No one cares."

They really don't.  They may patronize you and listen to your little ideas, or your silly complaints, but they'll adopt the same attitude they would with their 4 Year Old,  "How nicely you speak!  You know some big-boy words.  Yes, that's just awful.  Now run along and play while the adults do the real work."

Consider not holding that against them.

 The word we need to use here is entitlement.  You feel entitled for someone to listen to you.  For Heaven's sake, disabuse yourself of that notion.  Whether actively or passively, they don't need you.  Their need or want of you ends with the day, the meeting, the project, or whatever.  It's transactional.

When you cease producing, they'll try and do humane things: Retrain you, relegate you, finally releasing you in a broad swathe of "right-sizing."  That day will come; employment for life is over.

So, that being said: This melancholic fretting has to end.  Today.   You've stared change in the face for two weeks now and you need to decide if it gets the better of you.  (By the way, not deciding is a decision, Buttercup.)  Your wife and family deserve better.  Your colleagues at work depend on you and they deserve better.

So, please stop sucking.  Internalize that 'No one cares' and turn towards some things and people that do, okay?

  • God loves you.  To use more modern language, you are a sinful pile of scat and Christ loves you anyway.  
  • Your family loves you.  All you kids are crazy about you.  Your wife loves you, often in spite of yourself.
  • You're blessed to have a job.  Yes, it's going through massive transition and people are walking around 50% triggered (except you, you're running at 95% triggered)

15 June 2015

Swimming, 6 Months later

I did a quarter mile worth of laps in a pool.  Holy crap!

Maria is now on a summer swim team, racing other kids her age.  Holy crap!

Got a good pair of goggles at Costco, and my breathing patterns are better, if only my cardio would come along with it.

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.