[HN Gopher] Professional Programming: The First 10 Years
___________________________________________________________________
 
Professional Programming: The First 10 Years
 
Author : keegancsmith
Score  : 116 points
Date   : 2022-05-17 08:22 UTC (2 days ago)
 
web link (thorstenball.com)
w3m dump (thorstenball.com)
 
| troelsSteegin wrote:
| "Code has mass". Following from that, attention is force and
| understanding is acceleration.
 
  | dokem wrote:
  | I think understanding would be velocity. Acceleration would be
  | change in understanding, which is proportional to attention.
 
  | nh23423fefe wrote:
  | No I dont think that follows. Forces don't cause accelerations.
  | But attention is required for understanding.
  | 
  | > Every additional line of code you don't need is ballast. It
  | weighs your codebase down, making it harder to steer and change
  | direction if you need to
  | 
  | So code as mass is the scalar part of the momentum. So the
  | directional part is where this code is going in "purpose
  | space".
 
  | kqr wrote:
  | Code has mass has another interesting corollary: large enough
  | collections of code tends to almost gravitationally attract
  | more code. This results in god classes and those huge libraries
  | of diverse functionality that usually go by the name "misc" or
  | "util".
  | 
  | The mechanism for this is fairly obvious: it is usually
  | convenient to put new functionality next to existing one
  | because it allows you to reuse things that maybe should not be
  | reused. The more diverse a big lump of code, the more potential
  | future functionality is convenient to add to the lump.
  | 
  | This is a reason to be very vigilant against this type of
  | accidental reuse and incohesive modules. It's a reinforcing
  | feedback loop that needs a balancing mechanism.
 
| kderbyma wrote:
| Always leave something unfinished at the end of the day
| 
| --
| 
| definitely helps me get focused the next day
 
| lysecret wrote:
| Really enjoy the fearlessness. I wanted to share my main guide
| for programming, my dad always told it to me it comes from
| KentBeck: First, you make it run. Then you make it right.
| 
| It is a bit connected to fearlessness, because you need to be a
| little fearless to start something without knowing where it will
| go. I think fearlessness originates from a trust in oneself, and
| maybe the universe too haha
 
| civilized wrote:
| A lot of really good stuff here, for example reaffirming YAGNI
| and a focus on customer value. One part I think falls short:
| 
| > Negativity begets negativity
| 
| I think this is coming from a very common and fundamentally
| misguided premise - the obsessive focus on emotional valence, on
| whether we're being positive or negative. The real problem is not
| whether we are being positive or negative, it's the rush to
| attach emotional valence to things we have not adequately
| understood or described. As C. S. Lewis said, "the human mind is
| generally far more eager to praise and dispraise than to describe
| and define. It wants to make every distinction a distinction of
| value." This rush to emotional endpoints is the root of both
| toxic negativity _and_ toxic positivity.
| 
| Instead of taking positivity and negativity as endpoints, take
| them as prompts to better understand your surroundings. You are
| feeling bad about something - why? What about it makes you feel
| that way? Would improving it cost more than it would benefit? Is
| it the least bad of the alternatives?
| 
| A willingness to feel and acknowledge and investigate your
| negative emotions is a superpower. It gives you x-ray vision into
| things that very few other people have. They look away from
| problems and let them fester because they've been taught to be
| allergic to negativity. The ability to look at problems is
| inseparable from what the author points out is a very important
| trait, the ability to roll up your sleeves and get stuff done.
 
  | AnimalMuppet wrote:
  | People are emotional, at least to some degree. Most people find
  | emotions contagious. If you're surrounded by people being
  | negative, it's _draining_ , even if you don't give in to the
  | negativity.
  | 
  | One think I would say the article is wrong on, though - snark
  | doesn't have to lead to cynicism. At my place, we talk a fair
  | amount of smack, but it's just entertainment. (One difference -
  | the smack is self-directed at least as often as it's directed
  | at any particular other person.)
 
    | misternugget wrote:
    | Author here. Just wanted to add that I don't think all forms
    | of snark, sarcasm, and cynicism are bad. Or even negativity!
    | But what I learned the hard way is that there's a time and a
    | place for this and often it's not "your team & whenever
    | something pops in your head". I very much agree with the GP
    | here in that I value mindfulness when it comes to negativity.
 
      | civilized wrote:
      | I just wanted to say I loved your post and I think this is
      | a very hard thing to articulate in our culture. Because
      | you're absolutely right about the social impacts of many
      | forms of negativity. But "negativity" seems too broad of a
      | term for the thing we need to avoid. But then, what is the
      | more precise alternative? I guess "mindless negativity" is
      | something closer, at least.
 
    | civilized wrote:
    | On the other hand, if you model productive negative thinking
    | and communication, people will be relieved that they have the
    | space to express their problems, and you will accelerate
    | genuine team bonding and psychological safety.
    | 
    | I have success stories from my personal experience doing
    | this.
 
      | chrsig wrote:
      | I think some big things to consider is what the negativity
      | is trying to accomplish, how is it presented, and is any
      | solution presented?
      | 
      | Is there vindictiveness in the negativity? resentment?
      | superiority? smugness? irritation? is it directed at a
      | person, a process, a project?
      | 
      | Is the negativity being brought up just for the sake of
      | complaining? to solicit empathy or solidarity?
      | 
      | Is the negativity specific? actionable?
      | 
      | Those may be valid feelings, and great things to
      | examine...and then probably keep to yourself, and find
      | productive ways to either soothe/cope or change the
      | environment/root causes.
      | 
      | I say this as someone that endeavors to do what you've
      | described in your initial post, but also as someone that
      | struggles with adhd/depression, keeping it to myself can be
      | it's own struggle. And then I worry that I've rained on my
      | coworkers parade, or that I've worsened their work
      | environment.
      | 
      | People have something of a battery when it comes to this
      | sort of thing, and it can definitely be drained, so it's
      | important to be conscientious of that.
      | 
      | Mindfulness exercises and meditation help me a great deal
      | with all of the above, by doing what you suggest, and being
      | inquisitive about the feelings. And also being aware of how
      | the body is behaving during those feelings.
 
        | civilized wrote:
        | Yeah, doing negativity right isn't easy! It's essential
        | to look inward for how the expression might impact
        | people.
 
  | ilrwbwrkhv wrote:
  | This is very well said. I am trying to practice this myself as
  | I find myself to be very mercurial. I have been going through
  | the book living untethered by michael a. singer to guide the
  | way.
 
| derekstride wrote:
| > Look at that little program go, holding the internet together,
| despite the 17 TODOs in it.
| 
| This hit a little too close to home.
 
| ctvo wrote:
| > Fearlessness is undervalued
| 
| Being technically fearless is also a trait I've identified in
| engineers I enjoy working with. It's hard to quantify how you
| gain this. I think it's a combination of strong fundamentals and
| deep curiosity. It forms when things stop being magic.
 
  | robervin wrote:
  | Absolutely agree, but I like to think the magic bit can stick
  | around as wonder. Perhaps that's bundled into deep curiosity.
 
  | humbleMouse wrote:
  | This is what I tell anyone trying to learn programming or any
  | computer related craft. The first step is to not be afraid of
  | the computer. Only then you can learn.
 
  | albertzeyer wrote:
  | I observed that many people are really afraid even of basic
  | things. "I don't want to click here because I don't know what
  | it does. Maybe it breaks my computer or deletes all my stuff."
  | 
  | Maybe it's because I started using computers as a child (~9
  | years old or so) but I always had the mindset to just try
  | things out. You cannot really break the computer or delete
  | stuff. Every tool will always put a very clear warning before
  | you do sth stupid. And if you are really unsure with some
  | action, just make a backup before. Reinstalling Windows every
  | so often was anyway the norm in my youth.
  | 
  | And just trying things out, clicking through the menu, through
  | the actions, just playing around, make some dummy playground,
  | this is often how I discovered the functionality of most tools.
  | This is a very effective way to get familiar with most tools.
  | 
  | But others, when they say they don't know how to do X in tool
  | Y, they never have just tried around. And when I ask them why
  | they have not, they tell me that they are afraid of breaking or
  | deleting sth.
  | 
  | With coding, it's very much the same. And now that we have Git,
  | with some backup somewhere remote, and hopefully a test suite,
  | maybe even with CI, it's even much less of an issue if you
  | break sth because it always can be undone and you normally
  | should notice with the tests (or if you don't, you can blame
  | the incomplete tests).
  | 
  | Btw, regarding reading other code bases: I very much can
  | recommend that. You will most likely learn a lot. And there are
  | many great open source projects where you can just dive in.
 
    | kqr wrote:
    | It goes deeper than this. It's not just about trying things;
    | some people do the opposite: they try too many things at
    | once.
    | 
    | The real skill lies in trying things systematically,
    | carefully, querying your mental model of the system and
    | invalidating hypotheses along the way.
 
    | gombosg wrote:
    | You mostly can't break computers, except when stuff actually
    | breaks in production and it hurts users/customers a lot. And
    | thus we have engineers responding to incidents and writing
    | postmortems. :D I have learned a lot from alert and incident
    | management!
 
  | jrvarela56 wrote:
  | I think it's a mix of curiosity, lack of deadline pressure -
  | and something else I can't put my finger on.
  | 
  | An example is being comfortable reading a dependency's source
  | code. Once you realize you can do this by going to Github/Gilab
  | - or even navigating to where a function is defined via your
  | editor - you realize it's all layers 'down' and you can go in
  | there as far as you want. Another example is using dev tools to
  | prettify the code (but it's rarely readable).
  | 
  | Another thing is the payoff: how often can you deep dive and
  | make changes to solve your problem? This determines if the
  | reading through a huge library is worth it.
  | 
  | Starts with curiosity but requires lots of time available and a
  | bit of confidence that the endeavor could lead to a solution.
 
    | ctvo wrote:
    | > I think it's a mix of curiosity, lack of deadline pressure
    | - and something else I can't put my finger on.
    | 
    | I'm not sure I agree on lack of deadline pressure.
    | 
    | There's a virtuous cycle somewhere if I squint that's
    | fundamentals -> makes it easier to find where the problem is
    | -> makes you more willing to dive deeper -> leads to stronger
    | fundamentals. In parallel maybe, curiosity -> dive deeper
    | reading other people's code / learning about software ->
    | stronger fundamentals
    | 
    | This all leads to things like "I bet this is a network or
    | protocol level issue in this dependency" -> even in someone
    | else's large, open source codebase, I can quickly track down
    | the problem without needing to understand the entire
    | structure, for example. But gaining that ability to intuit
    | takes time, especially for newer engineers.
    | 
    | Edit:
    | 
    | Technically fearless though isn't really the above example
    | for me, it's more, if the business needs it, and we want to
    | allocate resources, there's nothing I can't build or learn
    | how to build in a reasonable amount of time. When you're
    | layers and layers of abstractions up, you're constrained at
    | each layer on what you're allowed to build. Perhaps a simple
    | definition of being technically fearless is the ability to
    | drop down layers of abstraction as needed to solve problems.
    | 
    | I think John Carmack[1] is technically fearless, for example.
    | Known for video games, but I would hire John in any domain
    | and have no doubt he'd be successful.
    | 
    | 1 - https://en.wikipedia.org/wiki/John_Carmack
 
      | afarrell wrote:
      | That definitely relies on a lack of deadline pressure...
      | which is really about knowing that your team lead trusts
      | your judgement in how you allocate time.
 
| gombosg wrote:
| Awesome article!
| 
| > Typing can be the bottleneck Agree! Learning touch typing (at
| 30 :)) was a big relief for my fingers and wrists. Also it's
| important to have a good mechanical or scissor keyboard so that
| typing actually feels good.
| 
| > Hiring is hard And it's like dating: you only get to know the
| people who you actually hire and never learn what would have
| happened to the people that you have rejected. That is some
| selection bias in the system.
 
| danielvaughn wrote:
| The point about other people's code rings true for me. What I've
| been trying to do is gather a collection of good code I've
| written over the years - solutions that can work for a variety of
| problems. They're like my own little npm packages, except I have
| full access to the source and completely understand them inside
| and out. I can also completely explain how they work to my team,
| and how they can make changes to the behavior if need be.
 
  | gryn wrote:
  | A lot of the time it's not characteristics of the code itself
  | but the business mission it needs to fulfill.
  | 
  | good code can give you a lot of headaches if the external
  | business environment sees qualitative changes while that sloppy
  | code over there is has being going hassle free for the last 6
  | years because the end-goal and patterns that it needs to
  | fulfill didn't change much during that period.
 
| calderwoodra wrote:
| Amazing post, thanks for putting this together.
| 
| Three points I think are undervalued in my experience:
| 
| > Typing can be the bottleneck
| 
| > The most important trait in developers: rolling up their
| sleeves because it has to get done
| 
| > Nothing really matters, except bringing value to the customer
| 
| I often feel the code needed to deliver value is not that complex
| and most senior folks can do it, but in an effort to "save time"
| on typing, they try to design something complex and debate
| endlessly, when what's really needed is rolling up your sleeves,
| getting it done, then saying "oh that? I finished coding it and
| it works, let's ship it already"
| 
| (edit: formatting)
 
| terrycrowley wrote:
| Great article. The point about fearlessness resonated. Ray
| Tomlinson (wrote the first inter-machine email, picked the @
| symbol, helped design TCP) was one of the best and most fearless
| engineers I ever worked with.
 
___________________________________________________________________
(page generated 2022-05-19 23:02 UTC)