这绝对是主观的,但我想尽量避免它变成争论。我认为如果人们恰当地对待它,这将是一个有趣的问题。

这个问题的想法来自于我对“你最讨厌的语言的哪五件事?”问题的回答。我认为c#中的类在默认情况下应该是密封的——我不会把我的理由放在这个问题上,但我可能会写一个更完整的解释来回答这个问题。我对评论中的讨论热度感到惊讶(目前有25条评论)。

那么,你有什么有争议的观点?我宁愿避免那些基于相对较少的基础而导致相当宗教的事情(例如,大括号放置),但例如可能包括“单元测试实际上并没有多大帮助”或“公共字段确实是可以的”之类的事情。重要的是(至少对我来说)你的观点背后是有理由的。

请提出你的观点和理由——我鼓励人们投票给那些有充分论证和有趣的观点,不管你是否恰好同意这些观点。


当前回答

如果你是一个开发人员,你应该会写代码

去年我做了很多面试,在我的面试部分,我应该测试人们的思维方式,以及他们如何在白板上实现简单到中等的算法。我一开始的问题是:

假设可以使用函数4 *(1 - 1/3 + 1/5 - 1/7 +…)来估计圆周率,使用更多的项来获得更高的精度,编写一个计算圆周率的函数,其精度为小数点后5位。

这是一个应该让你思考的问题,但对于一个经验丰富的开发人员来说不应该是遥不可及的(它可以用大约10行c#来回答)。然而,我们的许多候选人(应该是中介机构预先筛选的)甚至无法开始回答这个问题,甚至无法解释他们将如何回答这个问题。所以过了一段时间,我开始问一些更简单的问题,比如:

给定圆的面积是π乘以半径的平方,写一个函数来计算圆的面积。

令人惊讶的是,超过一半的候选人不能用任何语言编写这个函数(我可以阅读大多数流行的语言,所以我让他们使用他们选择的任何语言,包括伪代码)。我们有“c#开发人员”,他们不能用c#编写这个函数。

我对此感到很惊讶。我一直认为开发人员应该会写代码。现在看来,这似乎是一个有争议的观点。当然是在面试中!


编辑:

在评论中有很多关于第一个问题是好是坏的讨论,以及你是否应该在面试中问这么复杂的问题。我不打算在这里深入研究这个问题(这是一个全新的问题),除了说你在很大程度上错过了文章的重点。

是的,我说过人们在这个问题上无法取得任何进展,但第二个问题很琐碎,许多人在这个问题上也无法取得任何进展!任何自称为开发人员的人都应该能够不假思索地在几秒钟内写出第二个问题的答案。很多人做不到。

其他回答

代码越少越好!

如果用户说“就这样?”,而你的工作仍然是隐形的,那么你的工作就做对了。荣耀可以在其他地方找到。

在很多情况下,使用正则表达式解析HTML是可以的

Every time someone posts a question on Stack Overflow asking how to achieve some HTML manuipulation with a regex, the first answer is "Regex is a insufficient tool to parse HTML so don't do it". If the questioner was trying to build a web browser, this would be a helpful answer. However, usually the questioner wants to do some thing like add a rel tag to all the links to a certain domain, usually in a case when certain assumptions can be made about the style of the incoming markup, something that is entiely reasonable to do with a regex.

应该禁止调试器。这将迫使人们编写可通过单元测试测试的代码,最终将导致更好的代码质量。

从所有编程ide中删除复制和粘贴。复制和粘贴代码是非常糟糕的,这个选项应该完全删除。然后程序员可能会懒得重新输入所有的代码,所以他会创建一个函数并重用代码。

无论何时使用单例,都要给自己一个耳光。单例几乎从来没有必要,大多数时候只是全局变量的花哨名称。

c++是有史以来最糟糕的编程语言之一。

它具有委员会设计的所有特征——它不能很好地完成任何给定的工作,而且某些工作(如面向对象)做得很糟糕。它有一种“厨房水槽”的绝望,不会消失。

它是学习编程的可怕的“第一语言”。你(从语言中)得不到优雅,得不到帮助。取而代之的是陷阱和雷区(内存管理、模板等)。

它不是一种学习面向对象概念的好语言。它表现为“带有类包装器的C”,而不是一种合适的OO语言。

我可以继续讲下去,但现在就讲到这里。我从来不喜欢用c++编程,虽然我是在FORTRAN上“磨砺”的,但我完全喜欢用C编程。我仍然认为C是最伟大的“经典”语言之一。在我看来,c++肯定不是这样的。

欢呼,

-R

EDIT: To respond to the comments on teaching C++. You can teach C++ in two ways - either teaching it as C "on steroids" (start with variables, conditions, loops, etc), or teaching it as a pure "OO" language (start with classes, methods, etc). You can find teaching texts that use one or other of these approaches. I prefer the latter approach (OO first) as it does emphasize the capabilities of C++ as an OO language (which was the original design emphasis of C++). If you want to teach C++ "as C", then I think you should teach C, not C++.

但就我的经验而言,c++作为第一语言的问题在于,这门语言太大了,无法在一个学期内教授,而且大多数“介绍”文本试图涵盖所有内容。在“第一语言”课程中涵盖所有主题是不可能的。在我看来,你至少要把它分成两个学期,然后它就不再是“第一语言”了。

我确实教c++,但只是作为一种“新语言”——也就是说,你必须精通一些先前的“纯”语言(不是脚本或宏),然后才能注册这门课程。在我看来,c++是一种很好的“第二语言”。

-R

另一个编辑:(对康拉德)

I do not at all agree that C++ "is superior in every way" to C. I spent years coding C programs for microcontrollers and other embedded applications. The C compilers for these devices are highly optimized, often producing code as good as hand-coded assembler. When you move to C++, you gain a tremendous overhead imposed by the compiler in order to manage language features you may not use. In embedded applications, you gain little by adding classes and such, IMO. What you need is tight, clean code. You can write it in C++, but then you're really just writing C, and the C compilers are more optimized in these applications.

I wrote a MIDI engine, first in C, later in C++ (at the vendor's request) for an embedded controller (sound card). In the end, to meet the performance requirements (MIDI timings, etc) we had to revert to pure C for all of the core code. We were able to use C++ for the high-level code, and having classes was very sweet - but we needed C to get the performance at the lower level. The C code was an order of magnitude faster than the C++ code, but hand coded assembler was only slightly faster than the compiled C code. This was back in the early 1990s, just to place the events properly.

-R

有时您必须对数据库进行非规范化处理。

大多数程序员都不认同这种观点,但有时为了性能,你不得不牺牲一些东西,比如标准化。