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

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

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

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


当前回答

意见:在开发领域的持续时间并不总是等同于经验。

许多行业看重一门语言的“多年经验”。是的,5年的c#学习是有意义的,因为你可能会学到新的技巧。然而,如果你在公司工作并维护相同的代码库很多年,我觉得作为一个在不同情况和客户需求下工作的人,你似乎没有获得足够的接触不同情况的机会。

I once interviewed a person who prided himself on having 10 years of programming experience and worked with VB5, 6, and VB.Net...all in the same company during that time. After more probing, I found out that while he worked with all of those versions of VB, he was only upgrading and constantly maintaining his original VB5 app. Never modified the architecture and let the upgrade wizards do their thing. I have interviewed people who only have 2 years in the field but have worked on multiple projects that have more "experience" than him.

其他回答

1)商业应用程序闹剧:

我认为整个“企业”框架都是烟雾和镜子。J2EE、。net、大多数Apache框架和大多数用于管理这类事情的抽象所产生的复杂性远远大于它们所解决的问题。

以任何常规的Java或。net ORM,或任何所谓的现代MVC框架为例,它们都能“神奇”地解决乏味而简单的任务。您最终会编写大量难看的XML样板文件,难以快速验证和编写。你有大量的api,其中一半只是为了集成其他api的工作,不可能回收的接口,以及只需要克服Java和c#的灵活性的抽象类。我们根本不需要那么多。

那些拥有自己的描述符语法、过于复杂的数据库和群件产品的不同应用程序服务器呢?

这里的重点不是复杂性==坏,而是不必要的复杂性==坏。我曾经在大型企业安装中工作过,其中一些是必要的,但即使在大多数情况下,一些自制脚本和一个简单的web前端也足以解决大多数用例。

我会尝试用简单的web框架、开源数据库和简单的编程结构来取代所有这些企业级应用。

2) n年工作经验要求:

Unless you need a consultant or a technician to handle a specific issue related to an application, API or framework, then you don't really need someone with 5 years of experience in that application. What you need is a developer/admin who can read documentation, who has domain knowledge in whatever it is you're doing, and who can learn quickly. If you need to develop in some kind of language, a decent developer will pick it up in less than 2 months. If you need an administrator for X web server, in two days he should have read the man pages and newsgroups and be up to speed. Anything less and that person is not worth what he is paid.

3)常见的“计算机科学”学位课程:

The majority of computer science and software engineering degrees are bull. If your first programming language is Java or C#, then you're doing something wrong. If you don't get several courses full of algebra and math, it's wrong. If you don't delve into functional programming, it's incomplete. If you can't apply loop invariants to a trivial for loop, you're not worth your salt as a supposed computer scientist. If you come out with experience in x and y languages and object orientation, it's full of s***. A real computer scientist sees a language in terms of the concepts and syntaxes it uses, and sees programming methodologies as one among many, and has such a good understanding of the underlying philosophies of both that picking new languages, design methods, or specification languages should be trivial.

一个编程任务只有在它不可能的时候才有趣,那是在你说服自己能够成功解决它之前。

我想,这就是为什么我的许多项目都在“to_be_continue”文件夹中完成了一半。

许多开发人员对在哪里放置东西没有充分的认识,导致在文件、类和方法级别上源代码组织混乱。此外,相当一部分这样的开发人员基本上对代码组织问题一无所知。试图教导、哄骗、威胁或羞辱他们保持代码干净是徒劳的。

在任何一个非常成功的项目中,通常都有一个开发人员,他有良好的组织意识,非常安静地对代码库进行扫把,以防止混乱。

程序员不应该接触Word(或PowerPoint)

除非你正在开发一个文字或文档处理工具,否则你不应该使用只产生二进制blobs的文字处理器,就此而言:

生成的XML文件是二进制blob

程序员应该编写纯文本文档。程序员编写的文档只需要传达意图,而不是格式。它必须能够使用编程工具链进行生产:编辑器、版本控制、搜索实用程序、构建系统等等。当你已经拥有并知道如何使用这个工具链时,使用其他任何文档制作工具都是在浪费时间和精力。

当需要为非程序员生成文档时,应该使用轻量级标记语言,例如reStructuredText(如果您正在编写纯文本文件,您可能正在编写自己的轻量级标记),并从中生成HTML、PDF、S5等。

显然我的想法是哈斯克尔有变量。这既是一个“无关紧要”的问题(根据至少8个SO用户的说法)(尽管似乎没有人能就哪个无关紧要的答案是正确的达成一致),也是一个糟糕的问题(根据至少5个反对者和4个投票关闭它的人的说法)。哦,我(以及计算科学和数学家)错了,尽管没有人能给我一个详细的解释。