[HN Gopher] Three virtues of a great programmer
       ___________________________________________________________________
        
       Three virtues of a great programmer
        
       Author : tosh
       Score  : 125 points
       Date   : 2024-02-15 17:10 UTC (5 hours ago)
        
 (HTM) web link (thethreevirtues.com)
 (TXT) w3m dump (thethreevirtues.com)
        
       | henryreynolds wrote:
       | Impatience also makes you write more performant software because
       | you can't stand waiting on build/test/run cycles.
        
       | samatman wrote:
       | I would say that the character arc of Perl, and the profession
       | generally, leads me to this observation: laziness and impatience
       | are virtues. Be careful with hubris.
        
         | mcbuilder wrote:
         | I'd say wisdom should be the third, but that in turn often
         | leads to hubris.
        
           | ludston wrote:
           | Wisdom is to know yourself. Hubris is the belief that your
           | accomplishments and skills are greater than they are. Are
           | these not mutually exclusive?
        
         | dgfitz wrote:
         | I'd even go so far as to say !hubris
         | 
         | Pride often leads to unintentional blindness and irrational
         | defensiveness. Humility is where the fun is.
        
         | Enk1du wrote:
         | Hubris was really about building the community. It encouraged
         | you to build things that you would want to share, so that we
         | could all benefit from your Laziness and Impatience.
        
       | pugworthy wrote:
       | If you're not familiar with Larry Wall's style this might seem a
       | bit off putting.
       | 
       | The first time I ever saw him speak was the 1997 first annual
       | O'Reilly Perl conference. I remember thinking, "This guy is a
       | jerk" while also thinking "I love this guy"
        
         | iamcreasy wrote:
         | Is there any publicly available talk of Larry Wall that might
         | evoke it today?
        
           | cratermoon wrote:
           | Any of his "State of the Onion" talks.
           | https://www.youtube.com/watch?v=a1SEt_-QMDo
        
           | Enk1du wrote:
           | A quick explanation of the Three Virtues by Larry and then an
           | impromptu explanation of why Hobbits would make good
           | programmers
           | 
           | https://www.youtube.com/watch?v=G49RUPv5-NU
        
         | UncleOxidant wrote:
         | By all accounts he's actually a really nice guy.
        
       | hyperhello wrote:
       | I don't have the time or want to read the page, but I'm sure I'm
       | already as good as him.
        
         | amiantos wrote:
         | You're only dunking on yourself here, the page is four
         | sentences long. Being proudly ignorant is still just ignorance.
        
           | teach wrote:
           | _whoosh_
        
           | petsfed wrote:
           | You missed the joke. Should I diagram it for you?
        
             | drewcoo wrote:
             | In UML, the joke would be much longer. And is the punch
             | line solid or dotted?
        
           | stacktraceyo wrote:
           | Yikes
        
       | zbentley wrote:
       | Oh Larry, never change.
       | 
       | I often give a similar list as a glib answer in interviews when
       | asked "what are your greatest strengths?"
       | 
       | Mine are usually: I'm stupid (not smart enough to
       | overcomplicate), lazy (prefer turning MVP in on time rather than
       | adding too many bells and whistles), and forgetful (document
       | everything because I won't remember what I was doing the next
       | day).
        
         | lexarflash8g wrote:
         | What is your biggest weakness: "I work too hard" -- humblebrag
        
           | amarant wrote:
           | As someone currently recovering from burnout, that is indeed
           | my greatest weakness, and it's anything but a brag!
           | 
           | Working too hard means you're liable to disappear for
           | 6+months, no sane employer should want that!
        
             | multiplied wrote:
             | Do you work too hard or spend a lot of time on work?
             | (before downvoting me, please consider that those things
             | maybe different)
        
               | amarant wrote:
               | A bit of both I suppose. In my case I think taking on too
               | many responsibilities and stressing out too much over any
               | production issues that arose were the main ingredients
               | for disaster.
               | 
               | But there were others as well. Burnout is complicated.
        
             | elvis10ten wrote:
             | As someone who has worked hard for years (at some point I
             | had three con-concurrent jobs), I'm not sure working hard
             | is the variable that causes burnout :thinking_face:
             | 
             | I will say tho, it gave me persistent back problems and RSI
             | for two years :). But that again is not just "working
             | hard". It was bad posture, lack of stretching, breaks and
             | exercise, I think.
             | 
             | Edit: Perhaps it's the nature of the work or working hard
             | unhealthily (physical and mental?) or the person's
             | characteristics.
        
               | tommica wrote:
               | I remember hearing about burnout, that it becomes more
               | likely to happen the less meaningful work you do.
        
               | actionfromafar wrote:
               | Not sure about that.
        
               | amarant wrote:
               | What's the equivalent of "victim blaming" for sick
               | people?
               | 
               | Because this is that.
        
           | pompino wrote:
           | Are they still asking that ridiculous question?
        
         | akavi wrote:
         | I've never been asked "my greatest weakness" or "my greatest
         | strength" in an interview. What sort of jobs have asked you
         | those questions?
         | 
         | (I've worked (and interviewed) as a programmer at VC backed
         | startups and FAANG in SF and NYC over the past 12 years)
        
         | layer8 wrote:
         | That kind of cuteness in an interview would be a red flag for
         | me. OTOH, I also wouldn't ask that question.
        
       | petsfed wrote:
       | I've never really liked his inclusion of hubris here. Hubris is
       | often defined as unjustified arrogance. Justified confidence,
       | even if you're a jerk about it, was never the fatal flaw of a
       | Greek hero.
       | 
       | So I've always substituted arrogance for hubris: the belief that
       | you better understand, and can better address, the requirements
       | than any off-the-shelf library/program/ecosystem.
        
         | mattbee wrote:
         | When you learn programming, you are told to never roll your own
         | crypto, or to always use the ready-made libraries, or to avoid
         | manual memory management - and you can have a perfectly
         | fruitful career following rules like that.
         | 
         | But you don't get big changes or ambitious intellectual growth
         | without spotting that - if you did choose to break those sorts
         | of rules - you could build something really new and exciting.
         | 
         | Anyhow that's how I've always taken the "hubris" part - knowing
         | when there's an opportunity to achieve something in a way that
         | _someone_ will tell you is too risky.
        
           | bluefirebrand wrote:
           | > When you learn programming, you are told to never roll your
           | own crypto, or to always use the ready-made libraries, or to
           | avoid manual memory management
           | 
           | I've always taken this sort of advice, such as "never
           | reinvent the wheel" to mean "inventing the wheel is time
           | consuming so give yourself an advantage by using already
           | existing wheels", which really has nothing to do with hubris.
           | 
           | I never took it as "Don't bother trying to reinvent the wheel
           | because you aren't capable of it"
        
             | eloisant wrote:
             | You can build a better wheel if you want to focus on that.
             | 
             | If you want to build a car however, focus on building the
             | car and not creating a new kind of wheel.
        
         | francisofascii wrote:
         | I read hubris here as...you want to be the best, you don't want
         | to be criticized, so you will work hard and be super motivated
         | to make your program work very well, handling all the various
         | edge cases, making it better than the competition.
        
           | graemep wrote:
           | Yes, but that is not what the word hubris means. It means
           | pride in the seven deadly sins sense. The pride that comes
           | before a fall. Hubris would not mean working hard to reduce
           | the scope for criticism. It would mean not accepting valid
           | criticism because you think you are better than the critics.
           | 
           | He could have just used the word "pride" (which is far
           | broader and has positive meanings too) instead. In some ways
           | "ambition" might be a better fit.
        
             | clayg wrote:
             | Ambition might stand out in the same list as laziness. Plus
             | I'd be reticent to tell programmers to "be more ambitious!"
             | - I see greenhorns esp just trying to do too damn much at
             | once.
             | 
             | In the context of "code that is going to be reviewed" maybe
             | even "vanity" might have been closer to what he was getting
             | at? (did you even RUN this?) Except us old neck beards
             | obviously don't care about how WE _look_ ;)} - just how our
             | code reads.
             | 
             | I think "take pride in your work" would have substituted
             | well; but given the options, maybe hubris was fine - he
             | explains what he means in a couple of sentences.
        
       | tmaly wrote:
       | One could have also titled it Three Virtues of ChatGPT
        
       | Simon_ORourke wrote:
       | I'd add a variation on that third one - it's all they've got
       | going for them.
       | 
       | The really great coders I've worked with live and breathe the
       | work, and come 5pm on a weekday they just continue on coding only
       | this time for fun at home themselves.
        
         | lexarflash8g wrote:
         | If you come at 5pm or past to work on an OSS project or your
         | own side project more power to you. For a corp job why work
         | longer than you need to when you are not paid for it? Bragging
         | rights?
        
       | HermitX wrote:
       | I would also like to add one more thing: hesitation. From my own
       | experience, in my programming career, the most time my team
       | wasted was on redoing something from scratch. Why redo it?
       | Because the previous design was not comprehensive enough to meet
       | subsequent requirements. If everyone could spend more time
       | researching and discussing the plan before starting, and get
       | things right in one go, in my view, this is much more effective
       | than rushing into development work.
        
         | leetrout wrote:
         | Hindsight / survivorship bias affects this viewpoint.
         | 
         | You will never get it "right" the first time as much as you can
         | avoid doing it "very wrong".
         | 
         | The key is to have enough experience and taste to appropriately
         | break down problems into pieces that encapsulate the volatility
         | of the various domains.
         | 
         | Then you can refactor easier which should be the real goal.
         | 
         | Prune and tend to the garden.
        
           | AnimalMuppet wrote:
           | Yeah. It's easier to not do something stupid than it is to do
           | something smart. Take the time to avoid doing stupid things
           | (which takes somewhat more time than you expect!) and _don
           | 't_ take the time to try (and usually fail) to be overly
           | smart.
        
         | quietbritishjim wrote:
         | > Because the previous design was not comprehensive enough to
         | meet subsequent requirements.
         | 
         | YAGNI.
         | 
         | Hesitation to avoid unnecessary work, sure. But not to
         | anticipate future requirements.
         | 
         | The number of times I've had to fight a fancy design that left
         | expansion points / abstractions for future features that were
         | never needed (or not in the form the designers expected)
         | enormously outnumber the times any such thing was useful.
         | 
         | Just make the code do its current job in the simplest way
         | possible. That's the easiest design to expand later.
        
           | twh270 wrote:
           | There's "simple" and there's "naively simple". I agree 100%
           | with YAGNI, but you can also wedge yourself into a corner
           | with a design that allows no room for growth unless you scrap
           | it and start from scratch.
        
       | rlv-dan wrote:
       | Hobby programmer perhaps. But a professional systems developer in
       | a larger corporation? Not so sure...
        
       | GMoromisato wrote:
       | I'd add Curiosity instead of Impatience. Impatience is related to
       | Laziness. In both cases we want the computer to do the work
       | instead of us.
       | 
       | But Curiosity is orthogonal and important. The best programmers I
       | know were always curious: Why was it built that way? Why does it
       | give that output? Why did she say that? Curiosity is the
       | beginning of knowledge. If you're not curious, you will miss out
       | on a lot of opportunities for learning and improvement.
        
         | softfalcon wrote:
         | Seconded, and I'd add this is a quality of a great human being.
         | 
         | Curious people are curious about others too, not just systems.
         | 
         | It's related to caring. You have to care to be curious and we
         | could use more people taking care in their lives.
        
       | annoyingnoob wrote:
       | How did that work out for Perl?
        
         | IvyMike wrote:
         | They had a good run.
        
       | augustk wrote:
       | I think programming is an basically an exercise in effective
       | communication. Edsger Dijkstra said that
       | 
       | "Besides a mathematical inclination, an exceptionally good
       | mastery of one's native tongue is the most vital asset of a
       | competent programmer."
       | 
       | This means being able to write down a description of a problem or
       | a solution in a clear and concise way. This is the test I would
       | use if I hired people (not only programmers). At my job I have
       | noticed that quite a few people cannot write proper sentences or
       | are way too verbose in their writing.
        
         | soneca wrote:
         | > _"... an exceptionally good mastery of one 's native tongue
         | ..."_
         | 
         | Does that imply that one cannot be a competent programmer if
         | working on an environment where the spoken tongue is not their
         | native one?
        
           | ineptech wrote:
           | No, I'm 90% certain both Dijkstra and OP meant that what's
           | critical is mastery of any tongue. In context, he was talking
           | about what makes someone good at programming, not about the
           | need to contribute to a team or communicate ideas.
           | 
           | https://www.cs.virginia.edu/~evans/cs655/readings/ewd498.htm.
           | ..
        
           | jdbernard wrote:
           | I don't think so. I think the core of Djikstra's thought is
           | that mastery of your native tongue coincides with strong
           | communication skill and ability to logically organize and
           | present thoughts. You can articulate your thoughts and do so
           | in a way that others can understand. Working outside your
           | native tongue may add hurdles, but from my experience having
           | worked with brilliant people who's native tongue is not
           | English, those hurdles can be overcome. The skills still
           | translate.
        
       | djaouen wrote:
       | Perl. Lol
        
       | ChrisArchitect wrote:
       | (1991)
        
       | lacoolj wrote:
       | I found my new bible
        
       | picometer wrote:
       | I've had a variety of responses to this list over my programming
       | life (~10 years hobby, ~10 years professional).
       | 
       | When I first encountered them as a hobbyist, they were
       | surprising, as perhaps intended, due to the framing of classic
       | vices as virtues. On some reflection though, it made sense, and
       | shaped my understanding of programming as somehow _inherently
       | different_ than other types of creation.
       | 
       | When I got started with a professional career, they functioned to
       | soften the edge of anxiety. It meant that the community of
       | programmers who came before me - which presumably included Larry
       | Wall - would understand that these patterns in coder behavior
       | were ultimately beneficial and that I would maybe fit in with a
       | corporate programming environment. (Now I know that this isn't
       | always true; sometimes coworkers, both programmers and non-
       | programmers, don't always realize these unintuitive points, and
       | in some special cases, those programmer instincts aren't actually
       | valuable.)
       | 
       | At some point, I disagreed with the framing. As others have
       | pointed out, the patterns can be reframed as classic or
       | functional virtues such as curiosity. Then I backpedaled and
       | realized that the framing is important because these are
       | unintuitive patterns and it makes us re-think habitual incentives
       | that reward, e.g., work that is more productive but not more
       | effective.
       | 
       | How did it hit me now? I realize that it's also related to power
       | dynamics. Programmers are assets to their employers but they're
       | also potential disrupters. The traditional "virtuous" framing of
       | potentially-less-effective behavior, like patience, is related to
       | the organizing and taming of a workforce.
       | 
       | It's also related to the types of problems we encounter. When we
       | work with computers, Larry's list does usually lead to more
       | effective outcomes. But when working with other humans, who have
       | their own agency and idiosyncrasies, the traditional virtues are
       | better-adapted behavior. This is also more true for the complex
       | technical systems we deal with nowadays. So, as our careers
       | transition from programming to system engineering and/or
       | management, the traditional virtues become more relevant.
       | 
       | Anyhow, this is an evergreen and thought-provoking nugget of
       | wisdom. Thanks to Larry Wall and those who have preserved it.
        
       | komodus wrote:
       | Curiosity, we waste time learning a thousand useless 'shiny'
       | things at the same time, then we apply all we learnt solving
       | problems easily
        
       | pompino wrote:
       | One missing virtue is never impart programming advice or wisdom
       | on the internet - Because 10 other programmers who know nothing
       | about you or your job will tell you in detail all the ways in
       | which you're doing it wrong.
        
         | marssaxman wrote:
         | This is essentially Cunningham's law, eh? Perhaps you _want_ to
         | learn how you could do it better!
        
       | Enk1du wrote:
       | It was kind of a thing at the time. In the Afterword of AEleen
       | Frisch's Essential System Administration (also 1991) subtitled
       | "Don't Forget to Have Fun", there are listed _seven_ virtues of a
       | system administrator:
       | 
       | * Flexibility: being able to wriggle out of tight spots and
       | escape when irate users seem to have you cornered
       | 
       | * Ingenuity: realizing that you can use syslog to send messages
       | to your friend on another system
       | 
       | * Patience: remaining capable of waiting until the final sendmail
       | bug is fixed
       | 
       | * Persistence: the compulsion to try just-one-more-thing to fix a
       | problem before going home
       | 
       | * Adherence to Routine: insisting on real milk and sugar-in-the-
       | raw in your coffee (which is Kona or nothing)
       | 
       | * Attention to Detail: noticing that the clock on one of your
       | systems is using Aleutian time, and changing all the others to
       | match
       | 
       | * Laziness: writing a 250-line Perl script to avoid typing 15
       | characters
       | 
       | I took the last one to heart and have admired those who could
       | utilize the first one, because I never could.
        
       | dang wrote:
       | Related:
       | 
       |  _The Three Virtues of a Great Programmer_ -
       | https://news.ycombinator.com/item?id=32487944 - Aug 2022 (2
       | comments)
       | 
       |  _Larry Wall 's Three Great Virtues of a Programmer_ -
       | https://news.ycombinator.com/item?id=24107571 - Aug 2020 (1
       | comment)
       | 
       |  _Develop the three great virtues of a programmer: laziness,
       | impatience, and hubris_ -
       | https://news.ycombinator.com/item?id=11516215 - April 2016 (72
       | comments)
       | 
       |  _The Three Virtues of a GREAT Programmer_ -
       | https://news.ycombinator.com/item?id=10942079 - Jan 2016 (4
       | comments)
       | 
       |  _The Three Great Virtues of a Programmer: Laziness, Impatience,
       | and Hubris_ - https://news.ycombinator.com/item?id=9788088 - June
       | 2015 (67 comments)
        
       | baerrie wrote:
       | My whole life I have been called lazy. In filmmaking as an
       | assistant this was a weakness, work harder not smarter and all
       | that. I still feel insecure about it sometimes but over the past
       | few years of transitioning into coding full time I have learned
       | that this is my best trait. Life is short, you must demand to
       | live your life how you want otherwise you will be convinced that
       | working hard for someone else makes sense.
        
       | RustyRussell wrote:
       | I always said the fourth virtue is fear (of complexity). Keeps
       | the others in check, particularly hubris:)
        
       | golergka wrote:
       | I would add stupidity. I know I'm stupid, that's why I write
       | types, tests and documentation.
        
       ___________________________________________________________________
       (page generated 2024-02-15 23:00 UTC)