你讨厌本身喜欢的语言有五件事情是什么? [关闭]

最近Stack Overflow上出现了一群Perl-hate,因此我想我会把“ 你讨厌你最喜欢的语言的五件事 ”问题带到Stack Overflow。 拿你最喜欢的语言告诉我你讨厌的五件事。 那些多是让你烦恼,认可设计缺陷,公认的性能问题或任何其余类别的东西。 你只须要讨厌它,它必须是你最喜欢的语言。 程序员

不要将它与其余语言进行比较,也不要谈论你已经讨厌过的语言。 不要用你最喜欢的语言谈论你喜欢的事情。 我只想听听你讨厌但容忍的事情,这样你就可使用全部其余的东西了,我想听听你但愿别人会用的语言。 面试

每当有人试图将他们最喜欢的语言推到我身上时,我就会问这个问题,有时也会做为面试问题。 若是有人找不到讨厌他最喜欢的工具的五件事情,他就不会很清楚地提倡它或者使用它来获取大笔资金。 他没有在足够多的状况下使用它来充分探索它。 他主张将其做为一种文化或宗教,这意味着若是我不选择他喜欢的技术,我就错了。 编程

我不在意你使用哪一种语言。 不想使用特定的语言? 而后不要。 您是否通过尽职调查以作出明智的选择但仍然不使用它? 精细。 有时候正确的答案是“你有一个强大的编程团队,有很好的实践和不少Bar经验。改变Foo会是愚蠢的。” 安全


这也是代码审查的一个很好的问题。 真正了解代码库的人会对它有各类各样的建议,那些不太了解代码库的人会有非特定的投诉。 我问的问题是“若是你能从新开始这个项目,你会作些什么不一样的事情?” 在这个幻想的土地上,用户和程序员会抱怨任何他们不喜欢的东西。 “我想要一个更好的界面”,“我想将模型与视图分开”,“我会使用这个模块而不是另外一个”,“我会重命名这套方法”,或者他们真的不喜欢不喜欢目前的状况。 这就是我如何处理特定开发人员对代码库的了解程度。 这也是一个线索,关于程序员的自我与他告诉个人内容有多大关系。 闭包

仇恨并非弄清楚人们知道多少的惟一方面,但我发现它是一个很是好的维度。 他们讨厌的事情也让我知道他们对这个主题的思考程度。 编程语言


#1楼

我恨“我讨厌某些语言的事情”列出的五件事怎么样? :d 函数

5-绘制橙红色不会成为苹果。 工具

设计语言时,设计师一般会考虑到它的用处。 将它用于彻底不一样的东西能够起做用,但抱怨它不是愚蠢的。 以Python为例。 我确信有人会或某人有一天会建立一个实用程序来从Python代码建立exe。 为何上帝的地球,你会这样作? 这将是整洁的 - 不要误解我 - 但它没有用。 因此不要抱怨它! 性能

精心设计的项目可能包含来自多种语言的代码。 这并非说你不能用一种语言完成一个项目。 有些项目可能彻底符合您使用的任何语言的能力。 ui

你站在木腿上吗?

平台能够对语言的做用产生很大影响。 随着时下的垃圾收集者,或甚至帕斯卡早期尝试“垃圾收集”,能够帮助内存淡化(也许malloc更多ram ??)。 计算机速度更快,固然,咱们指望更多的语言。 坦率地说,咱们可能应该这样作。 可是,为了方便编译器建立哈希表或字符串或各类其余概念,须要付出巨大的代价。 这些东西可能不会继承到它们所使用的平台。 要说它们很容易包含在一种语言中,只是告诉我你可能没有一条腿站立。

3-谁的错是真的吗?

错误。 你懂。 我喜欢虫子。 为何我喜欢虫子。 由于这意味着我能够继续工做。 没有错误,会有不少封闭的披萨店。 可是,用户讨厌错误。 但这里有一点冷水。 每一个bug 都是程序员的错。 不是语言。 具备如此严格语法的语言能够显着减小可能生成的错误数量,这将是一种彻底无用的语言。 它的能力可能一方面可能被计算在内。 你想要灵活性仍是力量? 你有错误。 为何? 由于你并不完美,并且你犯了错误。 在C中采用一个真正可识别的例子:

int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;

咱们都知道会发生什么。 然而,咱们可能有些人没有意识到的是......功能可能很是有益。 取决于你在作什么。 缓冲区溢出是该功能的成本。 上面的代码。 若是我真的把它发布给公众。 那又是..跟我说吧......“个人错”。 不是C容许我这样作。

2-咱们不该该把它放在回收站里吗?

很容易指出咱们不理解的语言中的某个功能,由于咱们不常用它并称之为愚蠢。 抱怨它就在那里等。后藤老是在招待我。 人们老是抱怨goto是一种语言。 但我打赌你的最后一个节目包括一种goto。 若是你曾经使用过休息或继续,你已经使用了goto。 就是这样。 固然,这是一个“安全”的转到,但它就是它。 Goto有它们的用途。 是否使用“隐式”getos,如continue或break,或使用显式gotos(对于任何语言使用实际关键字“goto”)。 并不是语言开发人员天衣无缝,但一般......若是功能自时间开始就存在(对于那种语言)。 可能这方面是该语言的定义质量。 意思是......因为向后兼容性,它正在被使用而且可能不会被闲置。 它今天正在使用。 和5分钟前同样。 而且使用得当。 嗯..能够说有人也使用它不正确,但这与我名单上的#3有关。

1. - 一切都是对象。

好吧..这个真的是#2的一个子集。 但这是迄今为止我在仇恨列表中看到的最烦人的抱怨。 并不是一切都是对象。 有不少不属于或不须要成为对象的概念。 把东西放在他们不属于的地方只是丑陋并且会下降程序的效率。 固然。 也许并很少,取决于语言。 这也与#5有关。 这意味着......是的。 全球还能够。 与静态方法相关的函数是能够的。 将OO编程与全局函数相结合是能够的。 如今......这并不意味着咱们都应该走出去,并从它的对象模型中“释放”咱们的代码。 在设计一段代码或整个项目时,在将它们组合在一块儿时应考虑幕后发生的事情。 不只在这个概念存在的地方还有许多其余因素。 为何将全局函数包装在类或名称空间概念中,若是它没有用处? 获取静态成员变量。 这很是让我感到高兴,由于......好吧......固然,取决于语言和实施,但总的来讲,你刚刚宣布全球化。 是的,有一些理由将这些非OO概念包装在OO包装器中。 其中一个固然是自我记录代码。 这是有道理的。 因此......就像我说的那样。 不要出去“免费”你的代码。 可是,任何优秀的现代语言都将在其OO建模以外具备全局概念。 是的,我特别指出,没有全局概念的OO编程语言极可能存在严重的设计缺陷。 虽然..再次取决于语言的意图和设计,因此我不是试图挑选任何特定的语言,并且这里有太多的东西要分析。 Anywho,考虑代码应该存在的位置而且是最有效的。 将一堆闪光添加到不添加功能或支持的东西只会更快地磨损键盘。 它没有任何好处。 嗯..除非你喜欢那些可能错误地教你一切都是对象的人的布朗尼点。

简而言之,编程不只仅是盲目地敲击键盘。 任何项目都有不少设计考虑因素。 我知道这是陈词滥调,但你必须从各个角度来看待它。 即便是如今的类型安全语言。 你不只要删除代码并指望它可以正常工做。 固然..它可能有用,但它可能不是正确的方法。 总的来讲,选择最适合特定工做和环境的语言和格式。 但没有一种语言可以消除它背后的思想。 若是你不在想......你只是在打字。


#2楼

C#/ .NET:

  • 默认状况下应该密封类
  • 应该没有lock语句 - 相反,你应该有特定的锁定对象,而且应该有诸如Acquire方法返回一次性锁定令牌。 推论:每一个对象都不该该有监视器。
  • GetHashCode()Equals()不该该在System.Object - 并不是全部东西都适合散列。 相反,让IdentityComparer执行相同的操做,并保留IComparer<T>IComparable<T>IEqualityComparer<T>IEquatable<T>接口以进行自定义比较。
  • 对不变性的支持不足
  • 发现扩展方法的方法不好 - 它应该是一个更有意识的决定,而不只仅是我使用命名空间的事实。

这些都是个人头脑 - 明天问我,我会想出一个不一样的5 :)


#3楼

C ++

  1. 模板语法
  2. 钻石继承问题
  3. 现代语言所拥有的过多/缺少标准库(虽然提高很接近)。
  4. 输入输出流
  5. IOStreams周围使用的语法

蟒蛇

  1. 空间是有意义的(有时)
  2. 强调关键字
  3. 有限的线程支持(至少目前)
  4. “自我”而不是“这个”
  5. 空间是有意义的(有时)

#4楼

C

  • 字符串操做。

必须手动处理字符串缓冲区是一个容易出错的痛苦。 因为如此多的计算实际上正在移动和修改字符串(计算机并无像人们认为的那样在大数字运算时使用得那么多),可以使用托管语言或C ++的字符串真的很棒对象来处理这些。 当我必须在直线C中进行时,感受就像在流沙中游泳同样。


#5楼

如下是一些我不喜欢Java的东西(这不是我最喜欢的语言):

  • 泛型类型擦除(即没有具体化的泛型)
  • 没法在单个catch块中捕获多个异常(不一样类型)
  • 缺乏析构函数(finalize()是一个很是糟糕的替代品)
  • 不支持闭包或将函数做为数据处理(匿名内部类是很是冗长的替代)
  • 通常检查异常,或者更具体地说,检查不可恢复的异常(例如SQLException)
  • 对文字集合没有语言级支持
  • 调用泛型类的构造函数时没有类型推断,即类型参数必须在'='的两侧重复
相关文章
相关标签/搜索