[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) (HTM) web link (thorstenball.com) (TXT) 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)