这绝对是主观的,但我想尽量避免它变成争论。我认为如果人们恰当地对待它,这将是一个有趣的问题。
这个问题的想法来自于我对“你最讨厌的语言的哪五件事?”问题的回答。我认为c#中的类在默认情况下应该是密封的——我不会把我的理由放在这个问题上,但我可能会写一个更完整的解释来回答这个问题。我对评论中的讨论热度感到惊讶(目前有25条评论)。
那么,你有什么有争议的观点?我宁愿避免那些基于相对较少的基础而导致相当宗教的事情(例如,大括号放置),但例如可能包括“单元测试实际上并没有多大帮助”或“公共字段确实是可以的”之类的事情。重要的是(至少对我来说)你的观点背后是有理由的。
请提出你的观点和理由——我鼓励人们投票给那些有充分论证和有趣的观点,不管你是否恰好同意这些观点。
低驼峰是愚蠢和没有语义的
使用lower camelCase使名称/标识符(从这里开始使用“name”)看起来像两个部分。然而,Upper CamelCase给出了清晰的指示,所有的单词都属于一起。
匈牙利符号是不同的…因为名称的第一部分是类型指示符,所以它与名称的其余部分具有单独的含义。
有些人可能会认为小写的驼峰大小写应该用于函数/过程,特别是在类内部。这在Java和面向对象的PHP中很流行。然而,没有理由这样做来表明它们是类方法,因为通过它们被访问的方式,很明显它们只是类方法。
一些代码示例:
# Java
myobj.objMethod()
# doesn't the dot and parens indicate that objMethod is a method of myobj?
# PHP
$myobj->objMethod()
# doesn't the pointer and parens indicate that objMethod is a method of myobj?
Upper CamelCase对于类名和其他静态名很有用。所有非静态内容都应该通过它们的访问方式来识别,而不是通过它们的名称格式(!)
这是我的同质代码示例,其中名称行为由其他事物表示,而不是它们的名称……(另外,我更喜欢用下划线来分隔名字中的单词)。
# Java
my_obj = new MyObj() # Clearly a class, since it's upper CamelCase
my_obj.obj_method() # Clearly a method, since it's executed
my_obj.obj_var # Clearly an attribute, since it's referenced
# PHP
$my_obj = new MyObj()
$my_obj->obj_method()
$my_obj->obj_var
MyObj::MyStaticMethod()
# Python
MyObj = MyClass # copies the reference of the class to a new name
my_obj = MyObj() # Clearly a class, being instantiated
my_obj.obj_method() # Clearly a method, since it's executed
my_obj.obj_var # clearly an attribute, since it's referenced
my_obj.obj_method # Also, an attribute, but holding the instance method.
my_method = myobj.obj_method # Instance method
my_method() # Same as myobj.obj_method()
MyClassMethod = MyObj.obj_method # Attribute holding the class method
MyClassMethod(myobj) # Same as myobj.obj_method()
MyClassMethod(MyObj) # Same as calling MyObj.obj_method() as a static classmethod
这就是我对camelCase完全客观的看法。
库克的格言随意收集……
The hardest language to learn is your second.
The hardest OS to learn is your second one - especially if your first was an IBM mainframe.
Once you've learned several seemingly different languages,
you finally realize that all programming
languages are the same - just minor differences in syntax.
Although one can be quite productive and marketable without having learned any assembly,
no one will ever have a visceral understanding of computing without it.
Debuggers are the final refuge for programmers who don't really know
what they're doing in the first place.
No OS will ever be stable if it doesn't make use of hardware memory management.
Low level systems programming is much, much easier than applications programming.
The programmer who has a favorite language is just playing.
Write the User's Guide FIRST!
Policy and procedure are intended for those who lack the initiative to perform otherwise.
(The Contractor's Creed):
Tell'em what they need.
Give'em what they want.
Make sure the check clears.
If you don't find programming fun, get out of it or accept that although you may make a
living at it, you'll never be more than average.
Just as the old farts have to learn the .NET method names,
you'll have to learn the library calls. But there's nothing new there.
The life of a programmer is one of constantly adapting to different environments,
and the more tools you have hung on your belt, the more versatile and marketable you'll be.
You may piddle around a bit with little code chunks near the beginning to try out some ideas,
but, in general, one doesn't start coding in earnest until you KNOW how the whole program or
app is going to be layed out, and you KNOW that the whole thing is going to work EXACTLY as
advertised. For most projects with at least some degree of complexity,
I generally end up spending 60 to 70 percent of the time up front just percolating ideas.
Understand that programming has little to do with language and everything to do with algorithm.
All of those nifty geegaws with memorable acronyms that folks have come up with over the years
are just different ways of skinning the implementation cat. When you strip away all the
OOPiness, RADology, Development Methodology 37, and Best Practice 42, you still have to deal
with the basic building blocks of:
assignments
conditionals
iterations
control flow
I/O
一旦你能真正地把自己包围起来,你最终会到达你想要的那个点
看(从编程的角度来看)编写库存应用程序之间的差别很小
一个汽车零部件公司,一个图形实时TCP性能分析仪,一个数学模型
一个恒星核心,或者一个约会日历。
初级程序员处理小块代码。随着经验的积累,
他们处理越来越大的代码块。
随着经验的增加,他们开始处理小块代码。