软件工程

针对在系统开发生命周期中工作的专业人士,学者和学生的问答

5
为什么MVC比PAC更受欢迎?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 我刚在SO上偶然发现一个有关PAC的问题,并对这种模式感兴趣。我想知道为什么它不像MVC那样广泛使用?与PAC相比,MVC有什么好处?


7
经验丰富的Ruby on Rails开发人员是否使用脚手架?
在Ruby on Rails教程中,我读到一些文章,建议有经验的开发人员不要使用脚手架,因为他们倾向于只编写代码自行连接MVC。 在另一个地方,我读到使用脚手架是个好主意,因为它可以帮助您遵守约定,以便其他查看您的代码并与您的代码进行交互的人都可以理解您在做什么。 我是Ruby on Rails的新手,但不是MVC或Web应用程序的新手-我通常应该努力遵循脚手架约定并让它指导我吗?

7
维基真的适合存储用于软件开发的文档吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 每个人都知道,有据可查的软件开发会带来成功。但是,这通常意味着文档中不仅会涉及纯文本,而且还会涉及二进制内容,例如UML图。我听说很多人都这么说。版本控制系统不适用于二进制文件。我完全理解并同意这个问题。我问了几个经验丰富的开发人员,最好的存储文档的位置应该在哪里,而我得到的答案是“ wiki”。Wiki很好,但是我考虑了另一个潜在的问题。存储在版本控制系统中的源代码如何连接到Wiki中的相关文档?假设有人克隆了git或mercurial的存储库。他/她如何轻松找到文件?还是我只是错过了什么? 我知道某些Wiki系统具有与源代码控制系统集成的能力。但是我关心的不是集成能力。如果您已经从git仓库中克隆了源代码,并且过了一会儿,那么您将在火车上并希望继续在火车上离线工作(这是DVCS的一大功能)。然后您突然意识到,由于您在火车上离线工作,因此您无权访问文档。另一方面,如果文档存储在git存储库中,则可以访问克隆了存储库的文档。

4
数据库抽象-是否过高?
在接触了众多数据库抽象层之后,我开始怀疑每个库发明自己的不同范例来访问数据的意义何在。选择一种新的DAL感觉就像是在重新学习一种新的语言,通常我要做的只是说服该层输出我已经写在脑海中的SQL查询。 事实上,这甚至没有涉及可读性: # Exhibit A: A typical DAL rows = db(db.ips_x_users.ip_addr == '127.0.0.1') .inner_join(db.ips_x_users.user_id == db.users.id) .select(order=(db.ips_x_users.last_seen, 'desc'), limit=10) # Exhibit B: Another typical DAL rows = db.ips_x_users .join(db.users, on=db.ips_x_users.user_id == db.users.id) .filter(db.ips_x_users.ip_addr == '127.0.0.1') .select(sort=~db.ips_x_users, limit=10) # Exhibit C: A hypothetical DAL based on standard SQL syntax rows = …
18 database  sql  api-design  dsl 

2
如何在维护多个主要版本的项目上有效使用git-flow?
我已经将我的几个项目迁移到git flow工作流程中,并且我很喜欢它。但是,我还没有找到一种最佳实践来使一个项目同时维护一个以上的主要版本,从而使事情顺利进行。 具体来说,我不是在维护“免费版本”和“付费版本”或任何其他并行模型,我是在谈论一个项目,其中发布了版本1,并且仍支持次要版本(1.1、1.2等) 。),直到发布了第3版为止,此时将维持第2和第3版,直到第4版发布为止。 您如何或将如何在gitflow工作流程中一次维护一个项目的两个或多个受支持版本?
18 git  workflows  gitflow 

14
脚本语言对初级程序员有什么影响?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 前几天,我和一位老师进行了讨论。 我们讨论了更简单的脚本语言(如Python或Ruby)对初级程序员的影响。 他认为脚本语言会带来草率的编码技术,因为初学者不了解“引擎盖下”发生了什么。他还列举了脚本语言通常如何导致程序员忽略效率,内存管理,操作复杂性等问题的其他示例。 我认为低级语言对于某些人来说可能太多了,他们可能会在对编程产生浓厚兴趣之前就放弃了。当我开始学习我的第一门编程语言(C)时,我转向了指针并放弃了,因为概念太难了(以我的辩护,我才14岁)。如果不是Java,那么我可能还没有成为程序员!如果我从简单的语言开始,然后再深入研究,我会感到自己不会放弃,而且我会学到与C一样多的东西。 全班讨论之前,课程结束。 至此,我一直在鼓吹说,初学者应该从脚本语言开始,然后再深入研究。但是在讨论之后,我开始怀疑这是否是错误的想法。 那么,脚本语言对初级程序员有什么影响?

10
为什么继承和多态性被广泛使用?
我越了解不同的编程范例(例如函数式编程),就越开始质疑OOP概念(如继承和多态性)的智慧。我最初在学校学习继承和多态性,当时,多态性似乎是编写允许轻松扩展的通用代码的绝妙方法。 但是面对鸭子类型(动态和静态)以及诸如高阶函数之类的功能特性,我已经开始将继承和多态性视为基于对象之间脆弱的一组关系施加了不必要的限制。多态性背后的一般想法是,您只需编写一次函数,以后便可以在不更改原始函数的情况下向程序中添加新功能-您要做的就是创建另一个实现必要方法的派生类。 但是,无论是使用动态语言(例如Python)还是使用静态语言(例如C ++),通过鸭子输入都可以轻松实现这一点。 例如,请考虑以下Python函数,后跟等效的静态C ++: def foo(obj): obj.doSomething() template <class Obj> void foo(Obj& obj) { obj.doSomething(); } 相当于OOP的类似于以下Java代码: public void foo(DoSomethingable obj) { obj.doSomething(); } 当然,主要区别在于Java版本需要先创建接口或继承层次结构,然后才能起作用。因此,Java版本涉及更多工作,并且灵活性较差。此外,我发现大多数现实世界中的继承层次结构都有些不稳定。我们都已经看到了人为的形状和动物的示例,但是在现实世界中,随着业务需求的变化和新功能的添加,很难真正完成任何工作,然后才能真正扩展子类,或者重新建模/重构层次结构以包含更多的基类或接口,以适应新的需求。使用鸭子类型,您无需担心要建模的任何事情-您只需要担心所需的功能。 但是,继承和多态性是如此流行,以至于我怀疑将它们称为可扩展性和代码重用的主要策略是否过于夸张。那么,为什么继承和多态性如此成功呢?我是否忽略了继承/多态性比鸭子类型具有的一些重要优势?

5
Vim或Emacs是否适用于.Net或Java等语言?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 因此,我主要是.Net开发人员,他不时使用Java,Python和其他一些工具。我听说很多人赞扬Vim和Emacs一旦确定了基础知识,就大大提高了效率。我可以肯定地看到,有足够的实践,其中有多少个功能可能非常有用,甚至相信学习曲线可能值得付出努力。但是...看来,您真的必须是某种宏和热键向导,才能像在Visual Studio,Netbeans,Eclipse或其他平台上的普通开发人员一样,在Vim或Emacs中高效。我已经开始学习使用Vim,并认为它的某些功能很棒(例如,列编辑),但是似乎重量级IDE所提供的许多工具根本无法替代,即使是最费劲的文本也无法购买。编辑。 为Linq-to-SQL生成dbml文件 自动化测试 设计UI 创建/组织项目和解决方案 我知道Vim和Emacs可以非常强大地完成VS可以做的很多事情(例如智能感知,重构等),并且它可以完成我提供的部分或全部示例,但是说起来很现实在这些平台上工作的人实际上会从Vim或Emacs中受益?
18 ide  vim  emacs 

5
什么是“跨职能团队”?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 4年前关闭。 “跨职能团队”的一般含义是将达到目标所需的不同领域的专家组合在一起的团队。 但是,在敏捷看来,跨功能意味着不仅要合并不同的专家,还要使他们混合在一起。Henrik Kniberg 以此方式定义了跨职能团队:“跨职能团队意味着整个团队拥有构建产品所需的所有技能,并且每个团队成员都愿意做更多的事情,而不仅仅是他们自己的事情。” 但是线在哪里?是否要求开发人员成为测试人员进行迭代是否正常?

26
如果您可以向图灵测试候选人提出问题,那将是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 您如何区分男人和机器?

3
有没有研究编程语言学?
编程语言是形式语言,但与许多形式主义不同,它们还具有通过其操作语义或(对于标记语言而言是表示语义)定义的某些固有含义。编程语言尽管确实是形式化的,但就它们允许的交流而言,它们与自然语言非常相似。 尽管编程语言的开发是人为的,但是自然语言的演化,借用,混合和变异的过程都具有相当明显的人为对应物。所以我想知道:从语言学家的角度来看,有没有对编程语言的演变和行为进行过大规模,深入的研究 ?


5
敏捷商店在Joel测试中真的可以得分12吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 6年前关闭。 我真的很喜欢Joel测试,自己使用它,并鼓励我的员工和受访者认真考虑一下。但是我认为我的得分永远都不会超过9,因为有些观点似乎与敏捷宣言,XP和TDD相矛盾,后者是我世界的基石。 特别是:有关日程安排,规格,测试人员和安静的工作条件的问题与我们正在尝试创建的内容以及我们在真正敏捷中所采用的价值观背道而驰。 所以我的问题是,真正的敏捷商店是否有可能获得12分? 编辑: 根据以下回答者的推荐,我向我的博客添加了链接,该链接最初是我在博客上写的,因此我想在此处发布问题。 http://simonpalmer.com/2011/03/16/why-i-will-never-score-more-than-9-on-the-joel-test/ 我之所以这样说,是因为我同意下面所说的很多内容,并且我想宣布我的完整立场。
18 joel-test 

4
弃用Web API:最佳做法?
最终,您需要折旧部分公共Web API。但是,我对最好的方法感到困惑。如果您拥有大型的第三方应用程序库,仅仅废弃旧版本的API似乎是错误的方法,因为几乎所有应用程序都会在一夜之间失败。但是,您可能无法永远保持古老的Web api的可用性,因为它可能已过时,或者发生了重大更改,因此无法使用它。 淘汰旧的Web API的最佳做法是什么?
18 api 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.