[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)