17 ms·
I'm not knocking the article, but endless aesthetic discussions like this are one of the reasons why I can't wait to leave the industry. The very definition of
by spicyusername 3y ago
I'm not knocking the article, but endless aesthetic discussions like this are one of the reasons why I can't wait to leave the industry. The very definition of bike-shedding.
compare acquire and take_ownership
Who cares!? Those are both great names for a function...
If you put 10 software engineers in a room, you'll get 10 different answers to any question. Every company you work for will be filled with endless "smart guys", ready to spring in to action and nitpick you to death about arbitrary things.
It's exhausting.
We need more languages that come with rigid rules for things like style, so we can stop wasting time and get on with solving problems.
- kspacewalk2 3y agoWhile I share your frustration, I think leaving the industry because of it is an overreaction. It's fairly easy to just ignore the aesthetic discussions and focus on solving problems. Whenever someone brings up renaming a function from perfectly_good_name_1 to perfectly_good_name_2 in code review, I immediately agree without discussion and move on with my life.
- spicyusername 3y agoIndeed, indeed. Maybe a more accurate phrasing would be, "Can't wait to retire and do literally anything else with my time, including writing programs with which I answer to no one about coding style.", Hah.
- 000ooo000 3y ago>It's fairly easy to just ignore the aesthetic discussions and focus on solving problems. You probably know this but for discussion's sake: in many modern forges, your pull request can't be merged unless the comments have been resolved/closed. So you basically cannot ignore these "feedback" items; you have to engage the comment whether that means actioning it or refuting it. I currently work with the worst pedant I've encountered in my career to date, and I can empathise with wanting to leave the industry.
- Maxion 3y ago> I currently work with the worst pedant I've encountered in my career to date, and I can empathise with wanting to leave the industry. I have one of these too, one of my PRs received a comment on the third round of review about correcting a minor typo in a comment that was made years ago by someone else.
- gwright 3y agoFWIW, we started using https://conventionalcomments.org https://conventionalcomments.org a while back and found it to be a useful tool for making it easy to communicate what is an issue that needs to be fixed, a suggestion to consider, or a nitpick to optionally ignore. It is still just a tool and does require the team to buy-in and utilize it, but we've found it helpful.
- jrd259 3y agoIf the comment was in code you touched, this seems right. Typos affect searchabilty. If the typo was outside (but close to) the block you modified you shouldn't be required, and the team ought to have rules of engagement to state this.
- mannykannot 3y agoIt would be better for all if the pedant left the industry, but they typically have too much self-worth invested in an inflated perception of their expertise within it.
- SCdF 3y agoWhat is a forge in this context? Is that a name for a code repository website? I'm unfamiliar. Regardless, I think that's just a function of your team and your dynamics that you've built up. On the current team I'm on we for example don't require this (at least on GitHub its configurable), there is an understanding of nits, how to declare them and what that means, as well as an understanding of using request changes vs approve and so on. We've built this up by having discussions about what the purpose of reviews are (eg making sure your code is understandable by someone other than you), having a common understanding that perfect should never get in the way of good, etc. We regularly have retrospectives where, if we were having issues with really bad pedantry, I would hope it could be brought up.
- Aardwolf 3y agoAutomatic style formatters solve a lot of this discussion. Not all, such as the naming example here, but at least things like whitespace and line wrapping never have to be a discussion point again if you have the rule that whatever the style formatter outputs is what you use
- 3cats-in-a-coat 3y agoBikeshedding is prevalent in every popular area of human study, because it's easy to talk and write about. It's not representative of what matters to those who get the job done.
- ozim 3y agoBike shedding is not the problem here. Attitude is, if I can argue with someone and have it in a fun productive way - even if we don’t tackle most important thing we should work on at the moment - it still might be valuable. If I have to deal with smartass that nitpicks on variable names, he wastes my energy and any will to do further work for the day or if it is more heated and goes over some “Astro architecture” might even burn my willpower to do any work till the end of the week.
- 3cats-in-a-coat 3y agoI don't mean to bikeshed, but you seem to be describing bikeshedding. Bikeshedding in practice is often accompanied with aggressive arguments because some (or both) sides just really want to be right about something, as a way to offset their real worry, despite neither choice solves their real problem. Although I guess it could also be a pleasant chat, why not. Consider for example the bikeshedding society did on whether to distance 1.5m or 2m during COVID, and how precisely and how long to wash their hands. We had a ton of those. When people feel out of control they want to own a decision that makes them feel like they're back in control. Programming is complex at scale. But bikeshedding about how many characters our lines, how many lines our functions, and how to name things is always there for us to argue about. Oh and whether a class is truly single responsibility, that's an evergreen.
- jjk166 3y agoThat's not bikeshedding. Bikeshedding is focusing on an unimportant but familiar aspect of a complex project specifically because one lacks the technical knowledge to discuss the important parts. Bikeshedding might involve nitpicking, but it doesn't have to, and one can nitpick without bikeshedding. Maybe a code reviewer is genuinely so inept they can't understand anything more complex than naming standards, but far more likely they're just a bit neurotic with regards to following standards.
- 000ooo000 3y ago>nitpick you to death about arbitrary things Yep, it gets tedious. It really grates on me when reviewers are willing to die on a hill over some minutia while the codebase is in tatters. Arguing over extremely minor duplication while there exists two, active, physical copies of an application in separate repos (a real example) is the most pennywise poundfoolish waste of time and it drives me crazy.
- b112 3y agoI once spent 8 months merging a codebase with almost every single function duplicated three times, and all that was required for each (most of the time) was another parameter, one conditional in function, and all 3 could be merged. So I did that! And at the same time cleaned up the code, fixed bugs, and adding required new functionality, and all while merging in constant change from the main codebase. After reducing a 1M line codebase to 280k lines, when almost done, after that 8 months, I was asked "how much longer". My response of "a month for testing" was apparently too long for the new manager, who turfed all those fixes, including the new functionality. And I wasn't even behind schedule, I was ahead. Once abandoned, everyone just copy and pasted my changes... in triplicate, into the old codebase. Which took 3 months, instead of 1. Bah. A year of my life wasted.
- glenjamin 3y agoThis is a great cautionary tale about what happens if you don’t continuously integrate changes in an incremental fashion.
- b112 3y agoIt's a great cautionary tale of management dumbassery. (yes I am still bitter)
- 6keZbCECT2uB 3y agoSpending 8 months when the business value at the end was mostly improved velocity doesn't sound likely to be a good tradeoff, especially if this is done as a big bang effort which either succeeds holistically or fails. You might have better success in the future by finding ways to integrate maintenance improvements incrementally.
- diegoperini 3y agoI wonder if there are linters that can check if a method/function name starts with a spell-checked English verb.
- matwood 3y agoI don't consider myself a great programmer, but I do think I do two things well. One is solve problems. Like a dog with a bone I become obsessive about figuring something out. The other is I don't care about style, and will happily fit the existing style. For me, it's consistency above all else. I agree completely with you that arguments around style are exhausting.
- JohnFen 3y ago> For me, it's consistency above all else. Entirely this. I have a preferred style when I'm writing my own code. When I'm writing code for someone else, though, I will roll with whatever the house style is[1]. I just want consistency and predictability. Once I know the naming scheme, I should be able to take a really good guess as to what any given function or variable name is by knowing what they do, and vice versa. [1] I consider it a red flag if a company doesn't have an established house style. It matters not what the style consists of, only that it exists and is mostly adhered to.
- draw_down 3y ago[dead]
- zajio1am 3y ago> Who cares!? Those are both great names for a function... The source code has two purposes - to be processed (compiled/interpreted) by software, and to be read by humans. While it is relatively clear what is considered good code for the first purpose, it is harder to say what it is for the second one. An essay could be written in an elegant style or be full of clumsy wordings and hard to understand sentences, despite having the same meaning. The same is true for source code.
- bborud 3y agoNaming things sensibly and doing so consistently is pretty important in designing software because names are relied on to convey meaning. Sensible naming helps people. Bad and inconsistent naming confuses people. Naming matters more for interface types and APIs than for local variables. "acquire" and "take_ownership" might be equally good names for an operation, but you should pick one and stick to it throughout the codebase. And it would make sense to poll other people about what they think is a good name. Especially if you don't really care one way or another. Other people may have valid perspectives or they may just be better at expressing meaning through names. You can't really nail everything down in the official style guide for a language without it becoming baroque and oppressive. If you want to avoid bikeshedding, have a process in place for choosing naming conventions. Name someone as the arbiter. If consensus cannot be reached within a reasonable amount of time, the arbiter decides. It might help to keep a record of naming choices so people understand the reasoning behind why certain practices are chosen. Most programming is a social activity in that multiple people will have to deal with the code. Not caring about something as essential as naming, and wanting to avoid effort because you don't care, can be seen as a kind of anti-social behavior. On well functioning teams I've worked on, naming tends to not be a big issue because over time a team develops a common vocabulary. When in doubt, ask someone else on the team how they interpret a name.
- coffeebeqn 3y agoI agree that consistency is what’s important. If almost everything in the codebase roughly follows the same API then it takes less effort for people to use the various parts
- Kapura 3y agoI agree that "Who cares!" should be the default response here, as long as it's clear, but I think some folks (especially in engineering) think that "more rules = more clear," or "if we encode all of this information in the variable name, the variable name will always be clear," which is an error in thinking this particular article seeks to correct. I have actually been in the throes of battle with co-workers over relaxing our variable naming standards because they are too damn prescriptive, which (in my opinion) reduces code clarity, while also setting up conflicts between those who think code should be as clear as possible in the file versus those who think that we should follow the standard even though we know it to be flawed and produce overly-verbose code. My core argument is very much "who cares as long as it's clear" but having a specific piece of ammo where I can say "here are several arguments specifically against our current style" may convince some of these folks to loosen up a little bit. The bike-shedding is indeed ridiculous; going back and forth in Swarm for days over names for code that has fundamental algorithmic flaws. Awful stuff.
- drewcoo 3y ago> If you put 10 software engineers in a room, you'll get 10 different answers to any question. Again with the hypothetical dichotomies!
- Joker_vD 3y agoIn my experience, getting N software engineers in a room produces exactly N different answers only if you don't allow them to debate further. If you do, the upper bound on the number of different answers seems to be is at least 3N.
- halfnormalform 3y agoThe latter is probably a better name if there are other functions involving "ownership" (give_ownership, split_ownership, etc.), but otherwise you're right.
- squirtlebonflow 3y agoYep, I've seen situations where the programmer goes for brevity, and then runs into problems in the future when they want to "be consistent" take_ownership -> acquire (fine at first) give_ownership -> unacquire (not even a word) split_ownership -> halfacquire (complete nonsense) then there needs to be a way to split ownership other than an equal 2-way split and you're fucked. I haven't seen this exact situation, but I've seen stuff like this. And sometimes, I was the programmer. Names should be as short as possible while still being meaningful AND keeping in mind future work requirements. On a tangent, I'm always frustrated when as a developer, I don't learn much about the actual business. There's always a situation down the road where if you had known what the company was planning on doing in the next quarter, or couple years, you could have saved everyone some work by doing things differently.
- cperciva 3y agounacquire This reminds me of when some code was lightly edited to remove references to "master" and "slave", only to end up with a function "enminion".
- Shrezzing 3y ago[flagged]
- chinchilla2020 3y agoYeah it is unfortunate. Ever dealt with a rotating code review that passes through multiple hands? It's funny watching the principal architect and technical fellow ask me to refactor my code again to remove the changes that the other one asked me to make! I spent a month in one such code review. No wonder management hates listening to engineers. If we have a good point to make, they ignore it because of the last 3 engineers who wasted time with stylistic, pedantic arguments.
- ecshafer 3y agoA particular gripe of mine is the tendency for some code reviewers to nitpick code golf solutions that don’t really improve clarity, maintainability, or quality (and might arguably reduce them). Going from 40 characters to 30 characters for a functionally equivalent statement isn’t a win worth mentioning in my book.
- soligern 3y agoI mean we have AI that generates both the function and an appropriate name for it. If you lean into that paradigm, all of this is a waste of time.
- geodel 3y agoIt is more of software self-actualization. Just like human would need food, water, shelter, before they move on to top of pyramid. I agree software need to be basic error free, compilable, buildable and deployable before naming and structuring aesthetics becomes important. > Who cares!? Those are both great names for a function... Now the author has written many good quality working software systems, it is natural that they want to talk about next level things.
- omoikane 3y agoWhat we used to do is announce in our team chat: "anyone around for a round of bikeshedding? I need to name a thing". The thing being named is usually not user facing, so it was more of a team building exercise than anything related to compliance or style. We would get it done in a few minutes and never discuss this name again, because we already had this discussion. The actual names that came out of these exercises are generally pretty good, and often a shorter name would win over a longer one.
- JohnFen 3y ago> "anyone around for a round of bikeshedding? I need to name a thing" I have to come up with many names for things in code every day. I can't imagine the slowdown having to workshop every name would incur...
- Shaanie 3y agoI'm sure the names have different importance, though. A local variable name in a small method probably barely matters, whereas the name of a variable in a widely used external API matters quite a lot.
- omoikane 3y agoThis is the kind of exercise can be done in the background while waiting for stuff to compile. It's also not for trivial things like private or local variables and such, so not really a frequently occurring speed bump. An example would be a set of enum names that I need to share with my teammates, where it might be a lot of hassle to replace them all if we don't decide on proper names now, but any set of names would work.
- datavirtue 3y agoHmmm...no mention of business domain language. The main reason I want to leave the industry.
- npsimons 3y ago> We need more languages that come with rigid rules for things like style, so we can stop wasting time and get on with solving problems. This is where I'm at now. Decades ago, I was an "only spaces, no tabs" guy. Still am to an extent. But what made me more open was realizing it wasn't spaces or tabs specifically that mattered, only that code is readable, and consistently formatted code is more readable. Seeing things like `gofmt`, which mix tabs and spaces, and comes with the language? Your debate about spaces versus tabs is over, now we can get back to tackling real problems, and your code will be rejected at CI if it isn't run through the standard formatter. Same thing with `black` for Python. Above all else, be consistent. I can understand hate for "standard" language libraries that have functions with wildly different naming schemes or input and output arguments that aren't consistent - those should DIAF (looking at you, PHP "standard" library). But as to the names themselves? Doesn't particularly matter much. Unless you're the Bruce Tognazzini of API design, you probably don't have anything of substance to back up why it should be "make_" versus "create_".
- sdfghswe 3y ago> Above all else, be consistent. Aren't you still doing the same thing though? You have your arbitrary rules and they're absolutely truths... until you change your mind about them. Except before the rule was "only space no tabs" and now it's "be consistent"?
- npsimons 3y agoGiven how many people here are disagreeing except on "be consistent", I feel I'm in good company in having that as my rule. I'm not being inconsistent, I'm learning, growing and adapting. "Strong opinions, weakly held." But yes, "A foolish consistency is the hobgoblin of little minds." The question is, what is "foolish"? I'm arguing against things like `strpos` and `str_rot13`. I'm arguing against having similar functions where argument order is inconsistent. These are the sorts of things that slow developers down and force them to check the documentation every time just to make sure they aren't introducing bugs by default.
- 3y ago
- benhoyt 3y agoNot surprisingly (as the OP), I disagree. Good names help people understand concepts; bad names confuse. Choosing good names is not merely aesthetics, it's bringing clarity, meaning, and culture. That said, in this particular case, I think Russ could have chosen a better example. Neither "acquire" nor "take_ownership" are terrible. But when you're a language designer (like Russ), the names you choose shape people's code and their thinking for the next 10, 20, even 50 years. When you're a library designer (many of us are), it might only be a few years, but still. I think as code reviewers we should take this as seriously as the context demands: for internal names and local variables, it's not too important. For public API names, very important. For language changes, extremely important. Some good quotes from Bob Nystrom, author of "Crafting Interpreters": "Names are the structure we impose on the formless sea of bits that is computing." http://journal.stuffwithstuff.com/2016/06/16/long-names-are-long/ http://journal.stuffwithstuff.com/2016/06/16/long-names-are-... "For me, thinking about names is inseparable from the process of design. To name something is to define it." http://journal.stuffwithstuff.com/2009/06/05/naming-things-in-code/ http://journal.stuffwithstuff.com/2009/06/05/naming-things-i...
- spicyusername 3y agoI don't disagree that things like function naming are important. I understand that it's important to think critically about the philosophical North stars of your work. This is precisely what it means to be an "expert". I appreciate the work you're doing adding your voice to the discussion. That being said, it doesn't change the fact that, for me, it's tiring working in a profession where nothing is "real". There is never going to be an end to these kinds of discussions, because everything is abstract, relative, and ever-changing. Unlike many other professions grounded in the limitations of physical reality: carpentry, civil engineering, hair cutting, etc, Software Engineering is a house of cards of artificial abstractions. The tools and architectural patterns are mostly free from physical constraint, so they can change at will, and they do. What is "good" is highly dependent on context, and in our case that context is fluid, changing along every dimension all the time, making it very hard to establish a shared understanding of any given problem. This translates into a work culture where there is always room for debate about what to do, since there is almost never an objective best next step. And debate we do.
- toss1 3y ago>>Who cares!? Serious devs care. I was once at a software conference where Bjarne Stroustrup was givnig some presentations, and in the after-session questions, I thought I'd ask about something that had been bugging me about software design in general — I'd found myself spending what I thought might be excessive time to designing naming systems for the projects I worked on, and I wondered what he thought about spending time on naming conventions. With no hesitation, he said "Not at all, naming is very important", and very useful to get right up front, even for solo projects, as good clear naming helps speed the entire building and maintenance. So, yes, both "acquire" and "take_ownership" are relatively synonymous, but one will clearly be better and more consistent with the other in the context of your naming system. And this will matter to at least some serious devs. (But YMMV; if you have tried it a couple times and found it doesn't help you a bit, then you probably shouldn't spend more time on it)
- Pannoniae 3y ago"We need more languages that come with rigid rules for things like style, so we can stop wasting time and get on with solving problems." I have the complete opposite opinion. Most software engineers are obsessed with style, and I don't think accommodating it is the right solution. I think the right idea is just not enforcing any stylistic rules at all (while obviously keeping the readability and maintainability-related rules) and just let everyone write code how they want, while forcing them to tolerate other people's coding, naming, brace placement, etc. styles.