[HN Gopher] How Developers Choose Names ___________________________________________________________________ How Developers Choose Names Author : matt_d Score : 144 points Date : 2021-04-18 12:46 UTC (10 hours ago) (HTM) web link (arxiv.org) (TXT) w3m dump (arxiv.org) | zexodus wrote: | Research like this could lead to IDE's suggesting names for some | of our methods. Exciting! | emodendroket wrote: | Given how much it freaks the IDE out I can't imagine writing a | method before naming it. | spinny wrote: | very badly, sometimes randomly, magic 8 ball | | would not be surprised if some dev somewhere considered naming | his/hers first born "/tmp/first_born" until coming up with a | better name | | we can also add mathematicians and physicists to the group of | people that are exceptionaly bad at naming stuff | Smaug123 wrote: | Primo is an actual name in Italian; the others have fallen | (more) out of fashion, but certainly Quintus, Septimus and so | on used to be perfectly reasonable Latin names. | adithyasrin wrote: | Variable names are alright, available domain names are a | different beast | slver wrote: | The more shared a name is, the greater the pain in selecting | it. Given domain names are worldwide, no wonder then. | ttiurani wrote: | With naming what IMO matters more than choosing one name, is | choosing a name that is consistent with other similar names in | the codebase. A new developer will learn your project's specific | convention in a few minutes, but will be completely lost if the | convention is routinely violated here and there. This is | especially important with what verbs to use in methods, and how | to name interfaces/classes in a way that respects both the | business domain and the techical use. | | I've seen way too many times how much confusion is created and | time wasted when a developer not too familiar with the project | comes up with a brand new verb for a common action, and couples | it with a new synonym for an existing business domain entity - or | worse still, uses the same name previously meant for a completely | different domain entity. | | The unfortunate burden with this is that a new developer might be | right that their name is better for their use case, which then | leads to laboursome debates about which is more important: | consistency or slightly crisper name for the one use case. | hinkley wrote: | You have to be careful with your definitions. Don't use | different definitions of the same verb/noun in different | places. You get one. If you need another definition elsewhere, | use a synonym. | | It is not beneath you to hit thesaurus.com while picking a | name. | jeremydeanlakey wrote: | A thesaurus is one of my favorite dev tools. | archsurface wrote: | Naming gets far worse than that. I've worked on code where the | naming was not just unhelpful, it was outright misleading. One | of the worst I remember was a project which unsurprisingly was | named after a game of thrones character. As I never watched | game of thrones it took me about two weeks before I could even | remember the stupid name, during which time I was also | dumbfounded as to how the program worked until I realised the | naming in the code was equally bad, completely misleading. Then | there's the place where the stg1 environment was actually the | dev0 environment... | saurik wrote: | When I was working on a small game startup back 20 years ago, | I renamed our all the high-level projects of our codebase | into specifically- _ancient_ Greek and then left a | "glossary.txt" in the root directory so people could brush up | on their language skills... this did not last for very long | ;P. | wsc981 wrote: | _> I 've worked on code where the naming was not just | unhelpful, it was outright misleading._ | | It's one way to achieve job security for life though: | https://github.com/Droogans/unmaintainable-code | dnautics wrote: | One of the best coding interviews I had was an paired | debugging session and the problem boiled down to a poorly | named parameter at the beginning. | scubbo wrote: | > Then there's the place where the stg1 environment was | actually the dev0 environment... | | Hey, think yourself lucky. It's only a pretty recent | occurrence that my team has more than just the two "Prod" and | "Non-Prod" environments... | aYsY4dDQ2NrcNzA wrote: | Using the name "prod" for anything other than delivering | code to external customers is one of my eternal pet peeves. | vas1 wrote: | Couldn't agree more with this. Consistency is key even if the | convention used is awkward | jariel wrote: | Yes, convention is more important that the quality of the | convention. The convention abnegates the need to think about | things, and for a developer, thoughts are precious. | PicassoCTs wrote: | With a good convention, even more important, structure can be | derived and deduced, without reading the documentation. I | love it, when i begin to grasp the structure of a codebase, | write a line and hit auto-complete and the codebase was | reliable. Functionname exists and parameters expected are | served up. The code just feels so much more discover-able in | such moments. | jawns wrote: | This goes double for APIs, and triple for externally facing | APIs, where typically the people who are working with it aren't | familiar with your code base or naming conventions. | | That's why good API design is so hard. Every name you assign to | something becomes a convention by default. | cconroy wrote: | oh man; they should of selected 42 or 1337 study subjects! | makach wrote: | This reminds me of this old quote from qotd: We had fairly random | naming for our servers, so I proposed we named them after planets | - and the admin responded with "great idea, you mean like | planet01, planet02, planet03.." | | It's a funny story, but naming means ALOT when you are | developing, or building systems or processes that requires a name | or an identificator. | | Also don't be afraid of changing the name if it no longer | reflects on its purpose. | swyx wrote: | sharing a relevant bit of research I did collecting naming | practices across a bunch of different languages and frameworks: | https://www.swyx.io/how-to-name-things/ | granshaw wrote: | I have a rule called "name it what it does, not how it's used" | which is a mistake I often see with junior developers and | sacrifices information density | | Eg it's more helpful for readability to do "onClick => | updateDate()" rather than "onClick => handleClick()" | | (Not the best example and I've seen far more egregious, but those | examples are escaping me now) | rickbad68 wrote: | This example is not good for talking about naming as there is | no proper design which would have a function like this. In any | proper design there would always be a separate function for | each of the concerns. | bryanrasmussen wrote: | the benefit for handleClick in a react codebase at least is, | aside from convention, generally there will only be one click | action per component and then you can see right when you come | into the component - hey there is a click somewhere in this | component. | | In that case what I find preferable is onClick => handleClick() | | handleClick = () => { stuff in handle click updateDate(); } | | on edit: I see lots of others made same point one node lower. | dexwiz wrote: | I completely disagree with this example. Only in first order | implementations does that click just change the date. As you | refine UX you may add some debounce, error handling, | alternative behavior, etc. DOM events rarely end up | corresponding to such simply expressed handlers. | | Also when you are reading the reverse, it's not clear on what | on what updates date. The worst scenario is when two listeners | share a handler. | irrational wrote: | What are your naming recommendations? | dexwiz wrote: | Exactly what OP discourages. Ha dleClick for onClick, | handleDragOver for onDragOver, etc. | echelon wrote: | These are both pretty bad if used non-locally across files. | Maybe it's a bad habit from Java, but verbosity helps a lot, | | updateDateCallback() | | updateDateFromClick() | | These show how it's used and what it's doing. | | (actually, "up-date date" kind of irks me,) | | handleDateChangeClick() | | dateChangeModalClickEvent() | | And what does this thing actually do? Is it updating data, or | making the update UI visible? It's kind of unclear. | | If you're showing/hiding UI rather than performing the model | update, | | showChangeDate[Field/Modal/...]() | | beginChangeDateFlow() | | ... | | Code should read kind of like a book. | 3grdlurker wrote: | I'm an engineering lead and I made a rule of using the | handleClick() style instead of updateDate() in our codebase. | The reasoning is that the latter sounds more like an atomic, | standalone function, whereas handleClick() may have some | internal checks that could eventually call something like | updateDate(), but the internal checks are beyond the | responsibility of the updateDate() function. | granshaw wrote: | Yes my example was if updateDate literally just updates the | date - I take this a step further too, Eg if the function has | some extra checks, I'll name it maybeDoX(), which is a | somewhat uncommon practice in common programming languages | [deleted] | city41 wrote: | I agree. It's also nice to know when you see a `handle` | function, it is getting slotted into an `on` somewhere. | Within the handle I prefer to call functions such as | updateDate(). | | But this whole thread brings up something about coding that | has always irked me, it's very opinion based. When two people | strongly hold the opposite opinions on the same team, it can | be a massive hassle for absolutely zero benefit. | nitrogen wrote: | _When two people strongly hold the opposite opinions on the | same team, it can be a massive hassle for absolutely zero | benefit._ | | On teams, or in life in general, IMO when there is no | consensus, or even an anti-consensus, the only rational | global decision is not to make a global decision. | hinkley wrote: | It also quickly explains to you that no, you can't refactor | this method to change the arguments. | DrSiemer wrote: | In training interns I had to figure out what part of my | coding advice to them is best practice and what part is | just the way I like to do things. | | It's good to know the difference and it gave them the space | to challenge me on some of those methods, which in turn | helped me write better code. | hanniabu wrote: | Personally I would have both and within the handleClick() | function do whatever it needs to do and call an atomic | updateDate() function (assuming it's updating the date | globally). Although for anything generalized standalone | function I like to put that in its own namespace, such as | helper.updateDate(). | dapids wrote: | Or be explicit. Call it AtomicUpdateDate if such | functionality is really desired. Nobody should assume any | operation is atomic ... Unless it is explicitly stated to | be so. | | EDIT: sorry meant to reply to the parent comment. | jbluepolarbear wrote: | I take this approach as well; especially, when the handle | takes an event param and can then let the object react with | the correct behaviour. | throwawayboise wrote: | validateAndUpdateDate() | TechBro8615 wrote: | > may have some internal checks that could eventually call | something like updateDate | | This sounds like exactly the kind of pre-mature optimization | that leads to overly-abstract function names throughout the | codebase. Your point is a good one, _once the function does | something more than `updateDate()`_. But until then, just | call it `updateDate()`. As a bonus, this way any time you | _do_ choose to use `handleClick()`, the name is conspicuous | enough that you pause to see what side effects it might have. | rileymat2 wrote: | I'd agree in some cases, but then you get weird debouncing code | in your update date function. Because, no one wanted to change | the onClick function name in 38 different places when it starts | to do more. | Forge36 wrote: | onClick => onAccept => submitRequest | | The downside is lots of little functions, the plus side is | smaller behaviors. (Ie avoiding 5 levels of nesting in a | single function.) | MattRix wrote: | This sort of thinking leads to codebases that are too | abstract, where it's hard to follow the flow of execution. | | There's nothing wrong with 5 levels of nesting. It's much | easier to follow than 5 separate functions. | hallway_monitor wrote: | If you don't have refactoring that can rename functions | across your code base, now you have two problems | rileymat2 wrote: | In 16 years as a developer, I have never seen this beyond | the scope of a single project/language. Once things cross | boundaries it stops. | marshmellman wrote: | What boundary would be involved in the handleClick | example? Or are you speaking more generally about renames | across API contracts? | rileymat2 wrote: | Here is a great example that came up last week. Almost | exactly like the OP. (It is even an onclick!) | | I have a C# .net asp project. All of the JS, .cshtml | templates and C# controllers are in the same visual | studio solution. So it has complete vision into the code. | | So the boundary is from cshtml template to javascript | function and then another one from the ajax call to C# | controller. | | Visual studio has complete vision, but loses the | connection at each boundary, so intellisense says that | the C# controller function is never called. | | I am not criticizing Visual Studio, it is a great tool, | but this is a hard problem. | [deleted] | dividedbyzero wrote: | Even within those bounds, I found it doesn't always work | terribly well (depending on the language, tooling and | project complexity) | echelon wrote: | I've hit this many times. | | Microservices and JSON APIs. | | Common library code (eg. common session handling) | incorporated into dozens of microservices. | | Monorepos (which actually make this problem somewhat | easier). | katzgrau wrote: | Agreed, and something to add in the explanation of what to do | is the "why." | | When someone (or you) is reading the code later, you see a | method call and know exactly what it does. This prevents you | from having to click in or find it just to figure out what it | does. | | Frequently, if you click into a vaguely named method, it | doesn't do the thing you were searching for and you wasted a | little time and need to backtrack, only to repeat the cycle | with other vaguely named methods. | ape4 wrote: | But how its used is often inseparable from what it does. And in | UI code its nice to have all user actions called OnXxx or some | convention. | username90 wrote: | That is all well and good, until you have many components all | needing to handle clicks. Then it is better to do a handleClick | abstraction and put the updateDate inside it. | bitwarrior wrote: | It entirely depends on what the function is receiving. | | In your example, assuming we're looking at a React codebase | (since this seems to square with React's style of events, etc), | the resulting data being set into the updateDate function would | be an event. | | This, unfortunately, doesn't make any sense for a function by | the name of updateDate to receive. I would expect to receive at | least a new date to update with in the parameters, or ideally | in a functional world, both the state to update and the new | date we want applied to it. Anyone thinking they could simply | reuse the updateDate function somewhere else is going to be | woefully disappointed they largely cannot, since it would have | been constructed around receiving an Event object. | | In that case, I find the "handle" nomenclature to be very | useful, as it appears to be largely shorthand for functions | design to handle an _event_ (and we tend to see this pattern | being used in various React libraries and documentation). React | does have a few of these shorthands it tends to use (such as | useEffect largely being short for useSideEffect). | | Ultimately, I recommend using both functions. One, a | handleClickUpdateDate function (notably _not_ a hyper-generic | handleClick function which conveys nothing) that receives the | event and pulls out the necessary information out of that event | to determine what the date is that the user has selected. It | then will call the updateDate function with only that date, | which creates a nice, reusable updateDate function if we need | it anywhere else. | | This roughly squares with the idea of having functions that | handle the data transport layer (such as receiving data via | HTTP or gRPC, etc) whose responsibility it is to receive those | events, pull out the necessary information out of the package, | route the request to the correct controller, and ultimately | return the result in a shape that satisfies the original | transport mechanism. In this case, our handle* function is | responsible for receiving the original transport of data, then | routes the request through to the appropriate controller which | is entirely unaware of the means of data transport. | | It also means we have a nice, easily testable unit of | updateDate to verify our state modification is working to our | liking without needing to assemble an entire Event object. | | Anyhow, that's how I think of these things ;p | tcbawo wrote: | I completely agree with this, but I additionally advocate for | function/method names to be formed verb-object. Plus IMHO | active, descriptive verbs are best, instead of 'do', 'handle', | or 'manage'. As others have mentioned, handle click might be | appropriate as a shim/landing point for satisfying an | interface. Logic is best when focused without unnecessary | dependencies/side effects. The best naming comes along with a | strong design and architecture, when all the pieces can justify | their existence and boil down to the essence of what the system | is trying to accomplish. | rickbad68 wrote: | This seems such a weird study. Names are important, but not so | much as what is being named. In one sense, names become easy | given a properly abstracted design. Further, it's not names so | much that are paramount to program comprehension, but more the | quality of the design. With a bad design that doesn't properly | separate concerns it won't be possible to come up with good names | because functions/data structures will represent multiple | concerns. Any time names are controversial it probably indicates | a design problem, even for unique/complex abstractions, there is | usually a name which everyone agrees is the perfect name for a | thing.. | johnchristopher wrote: | As a non native english speaker I have a recurring problem with | this: | | > getInstances(); // ok, returns an array of instances | | > getInstanceId(); // ok, returns an id | | > getInstancesId(); // ??, returns an array of id | | > get InstancesIds(); // ?? returns an array of id | | > getIdsOfInstances(); // ?? returns an array of id | | > getAllInstancesId(); // ?? returns an array of id | | > getAllInstancesIds(); // ?? returns an array of id | | How do I conjugate that ? And what about the possessive `s` ? | crazygringo wrote: | As a native English speaker (and former English teacher), hope | this helps: | | > _getInstances(); // ok, returns an array of instances_ | | Correct. | | > _getInstanceId(); // ok, returns an id_ | | Correct. | | > _getInstancesId(); // ??, returns an array of id_ | | Unusual, but would return a single ID referring to a collection | of instances. | | > _get InstancesIds(); // ?? returns an array of id_ | | Correct. | | Though more common would be getInstanceIds() since you don't | need to pluralize twice. E.g. we don't say "blues shoes", we | say "blue shoes", so these aren't "instances ID's" but | "instance ID's". | | However, in naming functions or variables you'll sometimes see | plurals repeated for clarity. E.g. getInstanceIds() is | ambiguous because it could refer to the ID's of multiple | instances, or multiple ID's of the same instance. While | getInstancesIds() makes it clearer that it's the ID's of | multiple instances, even though it's not actually grammatically | correct. | | > _getIdsOfInstances(); // ?? returns an array of id_ | | Same as getInstanceIds(). Both are correct, though | getInstanceIds() would probably be more common -- most people | wouldn't put in the extra word "of" simply because it's an | extra word, but sometimes it might be clearer for consistency | with other function names. | | > _getAllInstancesId(); // ?? returns an array of id_ | | It would mean the ID for the collection of all instances, | though that would seem very unusual. Perhaps if there were a | global account ID for a service or API you used. | | > _getAllInstancesIds(); // ?? returns an array of id_ | | Sams as getInstanceIds(), but "All" presumably means it doesn't | include a parameter to filter -- so I'd assume this implied the | existence of another function such as | getCollectionInstanceIds() or similar that it was contrasted | against. | | > _How do I conjugate that ? And what about the possessive | `s`?_ | | Obviously you can't or shouldn't use apostrophes in variable | names, so people generally try to avoid the possessive s. | That's why we generally change nouns to noun adjectives -- | instead of "computer's ID" (computer = noun) we use "computer | ID" (computer = noun adjective). | pcthrowaway wrote: | > Though more common would be getInstanceIds() since you | don't need to pluralize twice. E.g. we don't say "blues | shoes", we say "blue shoes", so these aren't "instances ID's" | but "instance ID's". | | Completely agree with all your points (as a native English | speaker who also minored in English) | | However, for the sake of clarity (since we're trying to | disambiguate between places the 's' could indicated | possession vs. plurality) "instance IDs" should not have an | apostrophe. | | The only time an apostrophe goes in a non-possessive plural | is in a contraction. E.g. "the '90s" | | Then we also have fun words that probably should never be | used which get an apostrophe on both ends (contraction at | beginning + possessive plural) | | e.g. " ... the '60s' countercultural attitudes ..." | | But for clarity it might be better to go with | | "... the countercultural attitudes of the '60s ..." | crazygringo wrote: | That's a hotly debated issue that different style guides | give different answers to. | | Some style guides insist plural all-capital abbreviations | should never have an apostrophe ("IDs"), other insist they | should ("ID's"). | | Your personal usage is absolutely valid, but it should be | recognized as opinion and not fact. "ID's" is equally valid | in modern usage. | | Edit: You can read an extensive discussion of it here: | | https://en.wikipedia.org/wiki/Acronym#Representing_plurals_ | a... | pcthrowaway wrote: | Interesting. I've seen the apostrophe for acronyms which | involve periods: e.g. "C.D.'s" (NYT has an article about | this being their preferred style) | | I've seen it for one-letter words where you don't want to | switch case: e.g. "dot your i's and cross your t's" | | But I haven't seen it in upper-cased abbreviations | followed by a lower case plural 's'. Or if I have, I've | assumed it's wrong. Would love it if you can refer me to | a modern style guide which doesn't recommend dropping the | `'` in this usage, as my own background has drilled into | me that "IDs" is preferred for clarity. | crazygringo wrote: | I just added a link to a Wikipedia discussion in my | comment above, which should answer your question. It | gives an example: | | > _...whereas The New York Times Manual of Style and | Usage requires an apostrophe when pluralizing all | abbreviations regardless of periods (preferring "PC's, | TV's and VCR's")._ | samatman wrote: | I would make a case that _in our field_ , one which has | an abundance of initialisms and non-period-separated | acronyms, we shouldn't shadow the possessive. Consider | "this script retrieves JSONs from all API URLs and | validates them against their respective schemas" and | "this function extracts the URL's fragment, if any, and | checks it against a set of page targets". If you use an | apostrophetic plural, does the latter receive one URL, or | a collection of them? | | URL was carefully chosen, since you can't make a | consistent ruling about initialism vs. acronym, I've | worked with people who pronounce it "you are ell" and | people who say "earl", and sometimes both! Absolutely no | one is going to start spelling it U.R.L., either. | | Especially given the abundance of non-native speakers, | let's not add a peculiar and ambiguous edge case to one | of the more frustrating rules of English grammar. | crazygringo wrote: | I'm intrigued, but I'll admit entirely confused, by your | comment. | | First, I don't know what it means to "shadow" the | possessive. Do you mean we shouldn't hide it? Although it | always has an apostrophe so we're never hiding it. | | Second, I don't understand your examples. Your second | example clearly necessarily uses the possessive, while | the first is a plural, but the first would clearly be | plural even with an apostrophe: | | > _" this script retrieves JSON's from all API URL's"_ | | And since a possessive necessarily precedes another noun | in this type of construction, it would still be clear: | | > _" this script retrieves JSON's from all of the API's | URL's"_ | | It's clear in speech and clear as written, even though | the "'s" serves two grammatical purposes here. | repsilat wrote: | One thing that _getInstancesIds()_ might mean is "get the | (multiple) ids for each of multiple instances". | | I don't know why an instance would have more than one id, | probably more plausible with different nouns, but a similarly | named function might return an array of arrays, or a | flattened equivalent, possibly uniqued. | | Probably a bad idea though. I have been guilty (though | pleasurably, pridefully guilty) of abusing plurals -- day, | days, dayses etc. If you can let the types do the talking | that's obviously better, and more descriptive (and less | eccentric) names can help a lot with communication and | clarity, but there is also sometimes a place for brevity, and | for levity. | johnchristopher wrote: | Thanks everyone, much appreciated :). | halfmatthalfcat wrote: | getInstanceIds | augustk wrote: | I have never understood the practice of using a verb phrase | ("get") for functions with no side-effects. To me it makes more | sense to name the function after the result, i.e. _Instances_ , | _InstanceIds_ , _AllInstanceIds_ etc. | codr7 wrote: | The advice I once got and since internalized is to reserve | 'getX' to give a hint that something happens besides | returning 'X', lazy initialization is a common use case. | halfmatthalfcat wrote: | Preforming I/O is a side effect. Accessing an external | database is a side effect. Using a verb to imply external | access to "get" some resource is appropriate in this | instance. | resonantjacket5 wrote: | getInstancesId() would usually mean a singular id corresponding | to the group of instances. | | Only ones with an "s" at the end of the id should return an | array if you have the existing "getInstanceId" either that or | invert that function to be getIdOfInstance and subsequently | getAllIdsOfInstance for the array version. | | Generally speaking don't use the possessive "s" it is implied | by being next to it. Also I usually use "instance" in this case | more like an adjective | | Edit: usually I think of it as (current subject) verb adjective | object. | | So server get instance IDs becomes getInstanceIds() or zoo | clean active dogs becomes cleanActiveDogs() | slver wrote: | One of the most cruel things evolution did to us is that we | constantly seek meaning, order, correctness, where there are none | to speak of. | cbcoutinho wrote: | I'd argue that the ability to unite people by assigning meaning | onto things, places, and ideas is the single reason why humans | have been so successful in advancing civilization to where it | is today. | | Edit: eschew -> assign | papito wrote: | Sure, but now it's actually DE-volving our society in form of | QAnon and religious "interpretations", and technology here is | not blameless in the least. | selfsimilar wrote: | Pedant note: eschew means 'to go without'. You probably meant | 'assigning'. | cbcoutinho wrote: | Whoops, thanks | slver wrote: | That's precisely the problem. It's very useful, when it's | useful. Which leaves us spinning in circles when it's not. | 3grdlurker wrote: | It would be impossible for you to say this (circular) | sentence and call something a "problem" if you didn't think | that there was some basis of right/wrong, which contradicts | your top-level comment. | slver wrote: | See, this shouldn't cause a deep sorrowful void within | me, but it does. | coliveira wrote: | Well, with the internet we don't need to do it anymore. | Everyone has lost the battle to organize the internet, and it | is now the helm of run away AI algorithms. And the same is | happening to other areas which are controlled by AI and "big | data". | 3grdlurker wrote: | That awfully sounds anti-knowledge. Humans didn't use to think | that there was an order or correctness to all the facts that | fall under science and mathematics today. | dudeman13 wrote: | How do you know that there isn't meaning, order and correctness | if you don't search for it? | | There are very few situations where you can definitely say that | there isn't meaning, order and correctness as opposed to not | knowing if you are just too dumb to find them. | rileymat2 wrote: | > Based on the results of this experiment we developed a 3-step | model of how names are constructed: (1) selecting the concepts to | include in the name, (2) choosing the words to represent each | concept, and (3) creating a name from these words. | | This seems flawed, when I look to name something, one of the most | key things is what other things are named in that context, and | patterns and consistency between them. | | It appears the study described a problem, instead of putting them | in preexisting code? | karmakaze wrote: | This is a actually the way I name important things. There's | even a 4th step: Choose only a few of the important or | distinguishing concepts to include in the name. For examples in | a database model you end up with x_y_z_name_id because of | relations on relations, that might get reduced to y_z_name or | x_z_name, dropping the part that is of widest/implicit context. | jariel wrote: | This is one of the most interesting artifacts of programming, and | it's probably impossible to explain to people outside the field. | How at the same time it's trivial and important, and a constant | cause of neuroticism. | | It takes up far too much tought-space to the point I would gladly | follow some ugly set of conventions merely to have to just never | think about it. | hallway_monitor wrote: | Sure, following some guidelines and standards is helpful. But | never having to think about naming is almost like never having | to think about logic. What you name things dictates how future | developers think about them. Just this week we had a feature | that could belong in an existing module or it could require a | new module all depending on how we define the domain and | therefore the name of the existing module. | jariel wrote: | "s almost like never having to think about logic. " | | Not really, because naming is 98% convention when it's done | right. | | The challenge is establishing all the conventions for a | project, and then sticking to them. | | If there are really good conventions in place, well known, | then naming is considerably easier. | | In fact, even if the conventions are not super good - they | can be powerful when they are very well adhered to. | | Example: recently broke a rule and decided to use a known | naming anti-pattern by suffixing variable names with the | system type. This is normally not good. But within this | module, the meta typing was ambiguous - by adding the suffix, | the code was magically more clear. That little convention, | very easy to apply, solved a clarity problem far more so than | any issues around what functions should be called. So we used | it for the module and that module only. | | Apple has some pretty hardcore naming conventions that I | don't really like, but what's more important then whether | they are good or not, is that they are very consistently | applied - in other words - a lot less to think about. | anonu wrote: | I find that I am remarkably internally consistent with how I name | things. I sometimes forget about a filename, class or function | that I wrote months ago (thats another problem in itself). But | when I go to name the new thing I am about to write I realize | that it already exists. I then pat myself on the back. | nicetryguy wrote: | I thought you just added "ly" and called it a day? | bitwize wrote: | You watch your program buzz, | | But don't know what anything does. | | How do you name things so they're obvious to the eye? | | Descriptively, | | descriptively, | | descriptive... L-Y! | amelius wrote: | Say what you want, but it's better than how mathematicians choose | names imho. | thom wrote: | I would be interested if any task-performance based studies had | been run with different naming schemes and enough developers to | see which naming conventions worked best. Some simple job like | fixing a bug or a simple refactoring, judged on time to | completion and correctness. | hallway_monitor wrote: | That would be great empirical data to see. However from | anecdotal data across almost two decades, is extremely obvious | to my case study that naming is second only to application | architecture in its impact on ease or difficulty and risk of | updating the code base in the future. | baby_wipe wrote: | My process: | | (1) How would I explain face-to-face what this code does to | another developer? | | (2) Use the key words from that explanation to make a name as | short as possible without losing clarity. | | Example: | | Step 1: This class handles all the navigation work for the sign- | up flow in our mobile app. | | Step 2: SignUpFlowNavigator | loloquwowndueo wrote: | Naming things - one of the four hardest problems in computing | (the others are sorting and off-by-one errors) :) | ravenstine wrote: | Don't forget time comparison. | | Your unit test of a function comparing dates relies on server | time and usually fails if run around 12pm. Whatever. Nobody | uses this app around lunch time anyway. Just tell your | teammates in the to ignore that. Wait, why is the test failing | every time today?! Did we just switch to DST? Uh oh... | papito wrote: | This has to come with a trigger warning. | fiddlerwoaroof wrote: | "Our JavaScript date library and the date library we're using | in Clojure disagree on the first day of the week. | Elasticsearch disagrees with both too" | emodendroket wrote: | You can avoid this problem by always passing in either a time | or a time provider and never just relying on Time.now or | whatever it is your language provides. | fiddlerwoaroof wrote: | This. Nearly every date/time library comes with this sort | of attractive nuisance that is just waiting for a chance to | ruin your day. | mnutt wrote: | I recently came across a 15 year old bug in qt involving both | time comparison _and_ cache invalidation: the code was trying | to set timers to fire when the next cache entry was set to | expire, but the timeout was in seconds while the eviction | code compared milliseconds. The result was 100% cpu usage for | up to a second as the timer spun without evicting the cache | entry. | neilparikh wrote: | Funny related story: For an internship, I worked on a app | that would show your sleep data in a nice visualization (this | was for a smartwatch). I implemented a basic version, and | used it for a few weeks. It seemed to work fine for me, so I | released a beta version for others in the company to dog | food. | | Within a day, I got a bug report from a coworker that it | rendered incorrectly for them. I was pretty surprised, since | I had been using it for a long enough that I would have | expected to encounter all the edge cases. | | I dug into the code, and realized that this bug only happened | if you went to sleep before midnight, which I never did... | gavinflud wrote: | Funnily enough, I recently had to help with an issue where a | company's payment screen was not loading correctly and | instead displaying "Invalid session". They use a third-party | vendor to handle payments and display their payment form in | an iFrame on their website. | | There is an initial request to create a session that has to | pass the desired expiration time of the session. | Unfortunately, the vendor requires the time to be in Eastern | Time. The poor, naive soul that originally implemented this | just got the current date, added 15 minutes, and converted it | to "EST". As soon as daylight savings hit a few weeks ago, | the expiration time was automatically being set to 45 minutes | in the past, the vendor was responding with "Invalid Session" | and the company was unable to take payments from customers. | netflixandkill wrote: | Discussions about naming schemes make me think of the old joke | "until I got married, I had no idea there was a wrong way to | boil water" or other variations of banal tasks :) | | Perhaps there is an answer lurking out there in the universe, | but it feels more likely it'll only be invalid pointer Aborted | (core dumped) | jwdunne wrote: | Looks like you need to invalidate your cache of hardest | problems in computing ;) | amelius wrote: | Proper caching makes any problem 10x as hard. | athrowaway3z wrote: | Twice as hard is a underestimate imo. | GuB-42 wrote: | Twice as hard? Or is it three times? | | Like they say, there are 10 kinds of people, those who | understand ternary, those who don't, and those who | mistake it for binary. | froh wrote: | five... naming, sorting, of by one concurrency errors and. | fiddlerwoaroof wrote: | I see a transaction rolled back, and the autoincrement id | column no longer matches the row count. | mod wrote: | Well, the app is broken now because we relied on the | autoincrement id column never having a missing value and | didn't handle the error when it has one missing. | mmmd wrote: | Honorary mention: Copy/Pass by reference or value | karmakaze wrote: | Sorting actually isn't one, at least anymore. Exact once and | in-order delivery although part of 'distributed' computing | should be, since most computing is distributed, right down to | our multicore processing hardware. | loloquwowndueo wrote: | It is - do your sorting, then show the results to | stakeholders and you'll see they all want different, mutually | conflicting sort orders. | ed25519FUUU wrote: | How about numbering? I always use to get a sideways glance back | in the day (before we all started using uuids) when starting the | number for a server group at 0. You'll only have 9 servers in the | first group and 10 thereafter if you start at 1! Yet some people | insisted. | dw-im-here wrote: | Says in the paper they had 337 subjects, so we'll have to match | them with 337 irrelevant anecdotes so that we too can be | scientists | nuclearnice1 wrote: | "But choosing good meaningful names is hard. We perform a | sequence of experiments in which a total of *334 subjects* are | required to choose names in given programming scenarios." | anon_tor_12345 wrote: | you think that's bad? this paper | | http://pdinda.org/Papers/ipdps18.pdf | | surveyed ~150 and concluded therefrom. the more hilarious thing | being that they drew conclusion completely unscientifically | i.e. by just interpreting vague plots (i.e. without performing | t-tests or anything like that). | [deleted] | efortis wrote: | In this video [1] the developer uses the prefix *old* where I | normally used *prev*. Today I renamed all those "previous in | time" to "old" for distinguishing them from the previous or next | of a list. | | [1] https://youtu.be/AQ0lcm2_skI?t=319 ___________________________________________________________________ (page generated 2021-04-18 23:01 UTC)