News for hackers. Stuff that matters.
Re:Don't Name Classes After Patterns. Mostly by jzoch on Sunday August 23, 2020 @02:03AM (#24249922)
This blog reminds me of one of the most frustrating naming patterns I see among coworkers, former students I TA'd, and open-source code: reversing the adjective or adverb with the noun. I attribute it to language barriers but seeing, in this blog, "VerseFake" instead of "FakeVerse" peeves me.

Its a VERSE class, not a FAKE class. It just so happens the class is described as a "fake" so...FakeVerse. Its like saying "Hey look a person tall!". While it sounds silly in english its incredibly pervasive in programming.

Another common pattern that drives me nuts is when people prefer nouns over strong verbs in functions. doDatabaseRestore instead of restoreDatabase.

Re:Don't Name Classes After Patterns. Mostly by ofrzeta on Sunday August 23, 2020 @02:08AM (#24249946)
It just makes sense, because you have the "parent class" in front and can order classes in docs etc. "AnimalLand", "AnimalWater", "AnimalAir" instead of "LandAnimal", "WaterAnimal" and "AirAnimal".

In fact I would probably prefer databaseRestore to restoreDatabase for the same reason because it would allow to cognitively group database methods in your flat namespace instead of grouping restore methods.

Re:Don't Name Classes After Patterns. Mostly by segfaultbuserr on Sunday August 23, 2020 @02:37AM (#24250066)
> In fact I would probably prefer databaseRestore to restoreDatabase for the same reason because it would allow to cognitively group database methods in your flat namespace instead of grouping restore methods.

This is especially important in pure C. If OOP-style programming is adopted, databaseRestore() can be strictly interpreted as a method of the Database class without ambiguity, and its first parameter is the object the operation is applied onto. In a sense, even old C & POSIX functions such as fopen(), fclose(), fseek() can be seen as a rudimentary form of OOP. On the other hand, restoreDatabase() may perform other operations that change the state outside of the database object.

Re:Don't Name Classes After Patterns. Mostly by heavenlyblue on Sunday August 23, 2020 @12:59PM (#24253272)
> restoreDatabase

It may do anything because it was probably written by an intern

Re:Don't Name Classes After Patterns. Mostly by viraptor on Sunday August 23, 2020 @02:42AM (#24250089)
That also reflects on the ordering of files for navigation. I'd rather see files `VerseFake.source`, `VerseReal.source`, `VerseOther.source` next to each other. (Unless there's a way to extend the namespace and just have `Verse/Fake.source`, ...)
Re:Don't Name Classes After Patterns. Mostly by acidbaseextract on Sunday August 23, 2020 @02:14AM (#24249974)
Completely agree. The same thing pops up with filenames, as well as many automation tools where functions end up being commands. Python's fabric for example has a help function that dumps out possible commands in alphabetical order... the "restore_database" convention ends up being painful to sort out visually.
Re:Don't Name Classes After Patterns. Mostly by bcrosby95 on Sunday August 23, 2020 @03:14AM (#24250203)
I think it depends upon your project. E.g. how far do you plan to take this - would you call it an AnimalCheetah or a Cheetah? If the latter, I would err on the side of "LandAnimal". Also, if your project is 100% about animals I would probably prefer "LandAnimal" too - otherwise you're likely to end up with a bunch of classes starting with AnimalXYZ and all you're doing is adding noise to your project when everything in it starts with Animal.
Re:Don't Name Classes After Patterns. Mostly by caylus on Sunday August 23, 2020 @10:27AM (#24252181)
> would you call it an AnimalCheetah or a Cheetah?

Depends on whether you're Hungarian :P

In all seriousness, I'd go with the prefix if these are part of a large flat namespace, but if there were a lot, then they should move to their own package and become `animal.Cheetah`.

Re:Don't Name Classes After Patterns. Mostly by caylus on Sunday August 23, 2020 @10:19AM (#24252134)
+1. It took a while for me to get on board with this at my company but I'm now a huge fan. We name our APIs "FooCreate", "FooUpdate", "FooDelete", "BarCreate", ... for nicer sorting and grouping, even though it's the opposite of how you'd say it in common English.
Re:Don't Name Classes After Patterns. Mostly by jzoch on Sunday August 23, 2020 @03:52PM (#24254758)
If you are choosing a less understandable name just so your docs are sorted we have bigger problems :). It’s a strictly worse name - one tells you what happens when you call it while the other sounds like a variable name and it isn’t clear it does something
Re:Don't Name Classes After Patterns. Mostly by dcuthbertson on Sunday August 23, 2020 @12:29PM (#24253029)
Putting the common word first also helps IDEs with search and tab-completion. Type "Animal" and you get a list of Animal-things (classes, functions, variables, or whatever) that apply to the context you're in. (Edited for clarification)
Re:Don't Name Classes After Patterns. Mostly by mjburgess on Sunday August 23, 2020 @03:46AM (#24250309)
Is this is just a more mathematical convention?

You write a_b where in english you'd say "b a". eg. Graph_users -- the user graph.

In mathematics the data element (noun) comes first and is differentiated by some property (graph_user, graph_product, etc.). For the sake of easily tracking what's going on.

So it makes complete sense to have VerseFake, VerseReal, etc.

Re:Don't Name Classes After Patterns. Mostly by jhanschoo on Sunday August 23, 2020 @05:01AM (#24250641)
Idk what you mean by mathematics since mathematics rarely deals with elements from different levels in a hierarchy without renaming.

Important influences probably include

- Lexicographic ordering, (programming) method access, directory path (which influences package namespaces)

- Romance languages put qualifiers after the bare noun by default. You have vestiges in English in titles like Secretary-General, via Norman.

Re:Don't Name Classes After Patterns. Mostly by mjburgess on Sunday August 23, 2020 @05:42AM (#24250783)
Eg., in english, "consider two kinds of graph: unweighted and weighted. Call them G_u and G_w..."

In mathematics your notation corresponds to Noun_adjective, pretty universally. I have never seen the converse.

"Consider a statistical model trained on UK data and a comparable one trained on US. Call them f_UK(x) and f_US(x)..."

"Compare a voltage applied across a resister, V_r with a voltage across a diode, V_d..."

"Consider the population growth of rabits (dP_r/dt) vs the population growth of foxes (dP_f/dt)..."

A notational description of a problem, using mathematics, always leads with the noun.

I have always considered the same phrasing in programming to just be this same mathematical convention.

"FalseVerse, RealVerse, ComplexVerse" reads weirdly to me. My strong preferece, as a physics grad cum data scientist, is VerseFalse, VerseReal, VerseComplex...

V_f, V_r, V_c

The particular variation follows the general structure, in notation.

Re:Don't Name Classes After Patterns. Mostly by jhanschoo on Tuesday August 25, 2020 @09:53AM (#24271348)
You're tunneling in on subscript notation. Consider also max f, diam C, edge(G).

In programming you also have contrary examples, e.g. FooObserver vs. BarObserver, especially when FooObserver's implementation and BarObserver's implementation are little alike they have very different roles in the application.

Re:Don't Name Classes After Patterns. Mostly by johbjo on Sunday August 23, 2020 @06:30AM (#24250926)
a_b in maths is pronounced "a of b" in English, and is often intended to be equivalent to a(b).

Superscripts in maths is closer to concatenated class names, as it separates it from being a function of something.

Re:Don't Name Classes After Patterns. Mostly by mjburgess on Sunday August 23, 2020 @06:46AM (#24250998)
Subscript to "of" doesn't always work.

A model trained on UK data is f_uk. It isnt "model of UK"... its a model of, eg., prices for goods.

f_UK is more like "the UK's model (of prices)"

I think the better way to interpret the mathematical convention is ObjectOfStudy_variation

...which is the convention being used in programming.

Re:Don't Name Classes After Patterns. Mostly by johbjo on Sunday August 23, 2020 @10:14AM (#24252097)
Kind of. Pronouncing a_b as "a wrt b" should work though.

With f_uk, it could mean a model with parameters trained for UK - "theta uk".

In my view, it's nice to have subscript-like things in the constructors. Ex:

uk_price_model = PriceModel(uk_model_parameters)

Re:Don't Name Classes After Patterns. Mostly by OnlyOneCannolo on Sunday August 23, 2020 @09:37AM (#24251844)
f = goods price model

uk = United Kingdom

f_uk = goods price model of the United Kingdom

Seems to work. Did I misunderstand?

Re:Don't Name Classes After Patterns. Mostly by chrismcb on Sunday August 23, 2020 @05:23AM (#24250711)
Has nothing to do with language barriers. And more to do with style. I woukd say the VerseFake is how most people would name it.
Re:Don't Name Classes After Patterns. Mostly by hydroxonium on Sunday August 23, 2020 @02:48AM (#24250113)
Many languages (other than English) are happy having adjectives behind.

As other commenters have observed, plenty of great reasons for doing so.

Re:Don't Name Classes After Patterns. Mostly by heavenlyblue on Sunday August 23, 2020 @12:55PM (#24253243)
You’re not programming in natural language and you’re trying to bring some natural language semantics into programming.

Please don’t. VerseFake is because the natural sorting will sort VerseFake together with Verse.

You, on the other hand - seem to have never worked with codebases that are large enough to find anything in them.

Good luck finding the right function when you call everything starting with a verb.

In programming you start with an Entity and are given a set of Verbs that are applicable to that entity, not vice versa.

You obviously studied philosophy and not engineering if you are asking questions like that.

Re:Don't Name Classes After Patterns. Mostly by jzoch on Sunday August 23, 2020 @03:57PM (#24254800)
Pretty silly reply. No need to attack. I’m fairly certain code bases can’t get much bigger than the ones I’m working on. If you abandon the idea that names should be read in a natural manner why use words at all? What a silly notion.

Many different languages style guides actually prefer verbs for functions as it makes it clearer an action is taken.

Finding function names is very easy with either approach. You have bigger problems and don’t know what you are looking for if you can’t find FakeVerse instead of VerseFake. Why is LandAnimal acceptable over AnimalLand? Why choose AnimalFast over FastAnimal? There is no reason those should be chosen: sorting is a poor argument as the loss in clarity is too great.

Re:Don't Name Classes After Patterns. Mostly by heavenlyblue on Sunday August 23, 2020 @06:01PM (#24255649)
Because all namespaces in all routinely used languages are com.land.animal and not animal.land.com

So there’s no reason in naming functions any differently when Entity within the name is just another namespace.

Also I don’t really understand why have the function name “restoreDatabase” when you could just put that function as “restore” within a module called “database”.

So you’re kind of missing the whole point of where the prefixes rather than suffixes come from.