In this thread, an Oracle Product Manager (username “Alex Keh”) refused to make Oracle’s EF provider to conform with .NET’s PascalCase
coding standard for class names and property names, saying that it is only “cosmetics” without any “functional needs”.
I discussed it with my team. One of the key things we want to know is
why developers are spending so much time changing the case between
Oracle and EF. Is there a compelling functional need to change from
upper case to Pascal case, not just a cosmetic one?On the feature request tool and this thread, people have asked for the
feature, but not offered a reason why Pascal casing is so important
that they would be willing to conduct the manual mapping changes.
For me, the main reason is that I don’t want to see Oracle’s UPPER_CASE
name convention mixing in my .NET code, but it seems that this is not enough. How would you justify effort to support PascalCase convention?
3
How do home builders justify the effort that every wall stud is 16″ from each other? How do aircraft engineers justify that bolts/rivets (whatever they use these day) on an aircraft’s wing are all evenly spaced?
Maybe exact spacing doesn’t matter and maybe capitalization doesn’t matter but outside of software engineering it is very easy to look at these things that don’t matter and tell a difference between a well-crafted product and something that was slapped together. Why should software be any different?
Having consistent style throughout your code base allows your engineers to read it efficiently without their brain going, “WTF” every time they open a new source file. Maybe capitalization by itself isn’t a major contributing factor, but the key is overall style. More standard and consistent look and feel of all your code makes you use less brain cycles trying to read it and more cycles trying to understand it.
Developers are spending time on Oracle’s capitalization because they are trying to clean up the mess and align all those studs/rivets/bolts (whatever software equivalent is). Maybe it is just aesthetic to a Program Manager but when a developer fixes one of these things, it is one less thing that bugs him about the code base, so next time he has to work on the file, he can avoid one more annoyance/distraction and jump right into the guts. Good software engineers are generally those that pay a lot of attention to details. It is important because when you are write a piece of code, it can fail in a 1000+ different ways and paying attention is how you avoid spending 90% of your time looking for bugs. But when a person pays attention to details, they notice ALL details.
One of the well-known authors (can’t remember source but either Robert C. Martin or maybe Brooks or DiMarco) once mentioned an analogy that even a product manager should understand: if you need to make a dinner, would you rather do it in a messy kitchen with dirty counters and utensils all over the place? Or would you prefer to enter a spotless, clean environment where everything is exactly where it should be? Sure you can get your work done in both types of environments but a) you’ll definitely be more efficient in a clean one and b) if nothing else, it just makes your work day that much more enjoyable. Sifting through 1000s of lines of code on daily basis is a software engineer’s (NOT product manager’s) work environment and they should have full right to go in and clean it up. Because your happy engineer is your productive engineer. Your engineer whose hands are tied so much that he can’t even fix capitalization is an engineer who goes home and works on his resume or his own startup software.
And this last part is mostly a rant that might get me flamed, but here goes… In the last year or so I’ve head the pleasure of crossing paths with numerous pieces of software produced by Oracle and most of the time I did walk away with a feeling that their official policy is to slap sh#t together. I don’t know any other company at that level who takes more than 6 months to fix a security vulnerability or who defines a class which internally contains the data you need but the only way for you to get that data is to call toString() and then parse what you get back.
5