Naming things is one of the two hardest problems in computer science. The other one is cache coherency and off by one errors.
The number of times I have labeled something as fart, poop, fart_poop, temp_fart_poop, etc, and just forgot about it is not okay.
U nd to rembr tht mny snr devs grw up prgrmng on old hrdwr tht ddn’t hv mch mmry & oftn th lang ony allwd shrt var nms anywy. Also thy wr th gen of txtspk fr smlr rsns.
Yngr snr devs pckd up bd hbts frm tht gen.
And here’s a sentence that’s not squashed to cleanse your palettes / give a sigh of relief because I figure if I need a break from typing like that, you need a break from reading it.
Nmng thngs s hrd.
Long, descriptive names are great! That’s how APIs like CNLabelContactRelationYoungerCousinMothersSiblingsSonOrFathersSistersSon make your code look so clean!
I’m glad you provided a link, because I would not have believed you otherwise. Take my upvote.
Many years ago I had to try to debug a memory manager written by a really talented software engineer, with an interesting take on naming things…
-
He referred to blocks of memory as “cookies”.
-
He had a temporary variable named “handy” because it was handy to have around.
-
He had a second temporary variable that referenced the first one that he called “son_of_handy”.
-
If corruption was detected in a block of memory then it would set the flag “shit_cookie_corrupt”.
-
If too many cookies were corrupt then the system would halt by calling the function “oh_shit_oh_shit_oh_shit”.
I like him already
To be honest I’d like to see his resume, kinda wanna hire him
proposal to rename exit() to oh_shit_oh_shit_oh_shit()
I will keep this legacy alive within my code
-
Fuck character limits for names. Looking at you, ABAP.
Ah yes, gotta love /company/product_abc table names.
Character limits and a stupid badly used Hungarian notation to waste limited characters to tell use what the ide already knows.
If you have a table, (that’s an array for sane programmers) name the variable as a plural and we will know it’s a table.
Don’t name two variables the same stupid abbreviation with different Hungarian notation characters stuck to the front
I’ve worked with the Windows API and “things the IDE already knows” isn’t something you should rely on. Everything is an LPVOID if you cast and recast long enough. In Windows various longs returned by the system are actually secretly pointers or handles, and using them as if they’re the type the IDE derives can lead to very annoying bugs.
Using plurals for lists and tables isn’t very clear, unless you have explicit naming guidelines about them. Plenty of people use plurals to indicate counts, and neither are good uses of them in my opinion.
itemCount
anditemList
solve everything here.But that is a typing weakness of that language. I just prefer using languages where the compiler actually does know what the types are at all time and thus can inform me instead of me trying to make sure that types align correctly.
That is tedious work that has been proven to be a terrible idea to shift onto humans. Strong type systems make much more robust code.
Abap only has one collection type, and its tables. Contextually it’s not hard to read what a collection of things are and what a single thing is.
If I am looping through comments and do something with comment, it’s contextually clear what ma going on. The exact type can be easily checked for when it’s actually needed.
Naming a count of something the plural seems like a much less intuitive thing. Especially sense generally the count is gotten from the collection.
Are you not blind after staring at ABAP?
Can you bleach my eyes with some really bad ABAP code? I’ve never seen ABAP and I want to feel scared
I’m not gonna lie, I haven’t seen ABAP in 10 years and was only briefly familiar with it. But I did what one does and asked GPT4 for some tax computation ABAP.
DATA: lv_income TYPE P DECIMALS 2 VALUE '50000', lv_tax_rate TYPE P DECIMALS 2, lv_tax_amount TYPE P DECIMALS 2. * Select the appropriate tax rate from the tax table based on income SELECT SINGLE TAX_RATE INTO lv_tax_rate FROM ZTAX_TABLE WHERE INCOME >= lv_income ORDER BY INCOME ASCENDING. IF sy-subrc = 0. lv_tax_amount = lv_income * lv_tax_rate / 100. WRITE: / 'Income:', lv_income, / 'Tax Rate:', lv_tax_rate, / 'Tax Amount:', lv_tax_amount. ELSE. WRITE: / 'No tax rate found for income', lv_income. ENDIF.
This isn’t even like the worst of it. It’s an old enough language they still thought the compiler shouldn’t have to do more work.
So you have to declare all variables, types, and methods in the top section of the class, and the method implementation in its own section. That means while working on a method, the method signature is a long way away. And because abap developers are allergic to splitting up code into reasonable classes, that can be a couple thousand lines away.
Oh and all classes are in the global namespace. So all the classes you make must start with the letter z because SAP reserves any and all names that don’t start with z.
Oh and they didn’t feel like making library code to do a lot of basic stuff, oh no, they thought that 3000+ keywords was a much better system. Especially sense hovering over a keyword gives no documentation and discoverable is therefore pretty terrible.
Also they wanted everything to be sentenced like so keyword structures are often many special words in specific orders and hopefully you can write enough of it to get a prompt to fill in the rest.
Oh my, that’s an abomination, I’m literally squinting my eyes to read it. That
ENDIF
tho, that’s where I draw the line °~°Oh that looks awful. Maybe it’s just because I don’t know how to read it, but the fact that it is similar to SQL (definitely pronounced sequel at this time) messed with my head
Let me introduce you to Cobol …
Hey, sometimes we put a little effort into our acronyms. I published a component named UTI and it was too late to change it by the time management caught on.
Documentation is like sex: Even when it’s bad, it’s still pretty good.
Which makes my incomprehensible notes to my future self an elaborate form of masturbation.
Does anyone have any good advice on variable naming? Here’s some of my rules I try to live by:
- camelCase
- use prefixes
- prefixes should be one word followed by an underscore.
- 10 character limit or 3 word limit, not counting the prefix
- functions should be prefixed with the file in which they’re defined, ie
utils_FooBar
- file names should be one word
- Start Bools with
is
- Don’t use
not
in bool names.- This has farther-reaching implications that will keep you from making confusing code most of the time (I’m sure this will be controversial, but it works no matter what they say)
- start output with
_
- Globals should be
g_VARIABLENAME
- use the least amount of words possible
- but being too verbose can draw attention - use this to aide in readability
calc_ImportantValueThatWillDecideTheUsersView
is better thancalc_SumYears
if the variable is more important than the others.
- Even the greatest variable names are not replacements for documentation
- Even the most readable code is not replacement for documentation.
- Force yourself to love documentation.
Edit: I realize I was speaking about function-naming with the prefix stuff.
For variables, I still use prefixes, but for variable type. Even if you define the variables as types, it’s still incredibly useful. For instance,
a string is
s_MyName
,enumerable is
e_MyType
,A number is int or double or whatever
i_MyAge
ord_MyWeight
This might be obvious for custom objects, but I’d still do it like this
p_Person
orper_Person
.Seriously it does make a huge difference
Not sure if you’re trolling or serious.
Sorry, I’m serious. These are things I have picked up from 18 years in the industry.
Hah, I (a Sr developer at the time) once built an entire mapping layer in our ETL system to deal with the fact that our product had long and expressive names for every data point but our scientists used statistical tools that had no autocomplete and choked on variable names longer than 32 chars so they named everything in like 8 chars of disemvoweled nonsense.
May those who build such unergonomic tools choke on a hair ball