软件工程

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

3
不可变的结构和深层次的层次结构
我正在开发一个GUI应用程序,该应用程序大量处理图形-为了示例起见,您可以将其视为矢量编辑器。使所有数据结构保持不变是非常诱人的-因此我几乎可以不费吹灰之力就可以撤消/重做,复制/粘贴以及许多其他操作。 为了简单起见,我将使用以下示例-应用程序用于编辑多边形,因此我有“多边形”对象,该对象只是不可变点的列表: Scene -> Polygon -> Point 因此,我的程序中只有一个可变变量-一个保存当前Scene对象的变量。我尝试实现点拖动时就遇到了问题-在可变版本中,我只是抓住一个Point对象并开始修改其坐标。在不可变版本中-我被卡住了。我可以将的索引存储Polygon在current中Scene,将拖动点的索引存储在中Polygon,然后每次替换它。但是这种方法无法扩展-当成分级别达到5时,样板将变得难以忍受。 我确信这个问题可以解决-毕竟,Haskell具有完全不变的结构和IO monad。但是我找不到方法。 你能给我一个提示吗?


4
通过使用SSD提高VS 2010的性能[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 8年前关闭。 在Internet上搜索带有固态硬盘的Visual Studio 2010时的性能改进后,我听到了很多不同的意见。 很多人说使用SSD并没有真正的好处,但是相反,其他人则表示完全相反。我对不同的观点有些困惑,我无法真正决定购买SSD是否会有所作为。 您在此问题上的经历是什么?您使用了哪个SSD?

5
如何避免类与本机类之间的名称相似?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 我刚遇到一个“有趣的问题”,我想请您就以下问题提出意见: 我正在开发一个系统,由于多种原因(含义:抽象,技术独立性等),我们创建了自己的信息交换类型。 例如:如果有一个称为SendEmail的方法并由业务逻辑调用,则该方法具有类型OurCompany.EMailMessage的参数,该参数是完全与技术无关的对象,并且仅包含“与业务相关的数据”(对于例如,除了头编码之外,没有其他信息)。 在SendEmail函数内部,我们从EMailMEssage对象获取此信息,并创建一个MailMessage对象(该对象是特定于技术的),以便可以通过网络发送它。 您已经注意到,我们的类与“本地”语言类的名称非常相似。问题是:这正是电子邮件的含义,因此很难为它们找到另一个有意义的名称。 您经常遇到这个问题吗?您如何管理? 编辑:@mgkrebbs刚刚评论了使用完全限定的名称。这是我们目前的方法,但是恕我直言有点太冗长了。如果可能的话,我想要更清洁的东西。

5
老板对将版本控制系统用于新项目表示怀疑,我还是应该吗?
参见/software/109817/superior-refusing-to-use-subversion 我的问题是相似的,但是这是我的情况下的主要区别: 我们正在使用PHP和网络技术从头开始一个新项目。如果我愿意的话,在开发中不会出现停机时间,因为从一开始我们就会采用它。 我的开发团队包括我和我的老板。我们是一家相对较小的公司的“ IT”部门。 该Web应用程序将完全不使用源代码控制来替换旧版应用程序。由于地域法律要求的差异,决定(在我被雇用之前)决定将应用程序分入每个版本的7个完全独立的目录中。之后,不同的开发人员在不同的时间在不同的地方做不同的事情。好吧,我认为可以在它们之间修补更改,我想这就是我要发布的原因。 我老板的建议,直接从电子邮件中粘贴: 更新应作为软件包提交到​​SUBMISSIONS文件夹中。程序包应包含所有相关文件以及包含更新说明的“ UPDATE.NFO”文件,包含的所有新文件的列表(带有描述)以及所有包含修改详细信息的已修改文件的列表。 更新包应专注于单个元素,而不应偏离其预期目的。代码应设计为模块化的,并尽可能重用。 所有提交的软件包都应在提交后立即安装在每个开发人员的测试环境中。每个开发人员都要审查新添加的内容,并对在生产环境中对其安装的任何疑问发表意见。在将此标准流程更新加载到生产环境之前,至少应保留3个工作日,以进行此审核过程。高优先级更新/修复可以跳过此要求。 发明源代码控制的原因是使所有这些自动化,对吗?我建议颠覆,因为那是我在大学中使用的。老板不喜欢颠覆,因为“它使代码一团糟”(即使用二进制魔术并且不易理解)。我们曾经尝试过一次,但是我认为尝试在Windows上使用它会产生奇怪的小写/大写错误,并且我们无法检出文件。我不知道这仅仅是颠覆还是所有令人反感的源代码控制产品。 那么,我应该对老板提出什么样的论点呢?还是他是对的,有可能会因为一个奇怪的错误而失去我们所有的工作吗? 还是我完全错了?在我的情况下,真的需要源代码控制吗?这是我们正在谈论的主要的关键业务软件,因此毫无疑问,它最终将是巨大的。但是只有2个开发人员(现在)。 另外,如果我不能说服他,我是否有为我自己使用它的任何意义?我说的是实际使用svn的经验非常有限的人;我只知道结帐和提交。源代码控制(可能包括svn以外的其他产品)有哪些功能可以帮助我进行个人开发? 请没有“找另一份工作”的评论。那对辩论没有帮助。

4
如何成为更有组织的程序员?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 我是一个可以编程的程序员。但是我发现我可以把事情做好,但不能把事情做好或像大多数开源社区一样。好吧,我使用了一些来自git hub的库。我发现大部分程序结构良好。另外,读我。 我的问题是: 是社区中任何通用的文件结构或命名约定,还是个人喜好? 如何成为更有组织的程序员,而不是编写代码,是行得通的。但是更有条理地让其他人轻松进入您的项目吗?

5
是否有关于使用问题跟踪系统的弊端的研究?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我不喜欢问题跟踪系统,因为: 描述其中的问题需要花费太多时间。这不鼓励使用。 您创建了一个保存错误的地方。而且如果有他们的地方,人们通常不会太在意修复错误,因为他们可以将其放到那里,以便有一天有人可以(或不可以)对其进行修复。 随着时间的流逝,错误列表变得如此之长,以至于没有人能够处理它,这占用了我们很多时间。 我更喜欢使用白板上的便利贴来处理问题,进行面对面的对话,并在重要的bug出现后立即将其杀死。我不太在乎跟踪错误历史记录,因为我认为这样做不值得。 我一个人在这里吗?是否有关于使用问题跟踪系统的弊端(或巨大优势)的研究(书/文章/任何内容)?

5
学习图像处理的最佳方法是什么?[关闭]
想要改善这篇文章吗?提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。 关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 我是一所大学的大四学生,之前没有做过很多图像处理(智能手机上的一些基本图像压缩除外)。我将在下学期开始一项有关机器学习的研究项目,这将需要一些生物医学图像处理。在大约两个月的时间里,掌握图像处理基础知识的最佳方法是什么?还是不切实际? 我的印象是,一旦掌握了基础知识,从其他资源中学习更多内容将变得更加容易。

4
持续集成服务器在哪一点有趣?
我一直在阅读有关Jenkins等CI服务器的信息,我想知道:在什么时候有用? 因为对于一个只有5个类和10个单元测试的小项目,肯定没有真正的需要。 在这里,我们进行了大约1500个单元测试,它们在90秒钟内(在旧的Core 2 Duo工作站上)通过了(因为它们实际上是在测试“单元”,因此非常快)。我们的规则是测试失败时我们不能提交代码。 因此,每个开发人员都会启动其所有测试以防止回归。 显然,因为所有开发人员总是启动所有测试,所以一旦一个开发人员撤消另一个更改(如有),我们就会捕获由于冲突更改而导致的错误。 对我来说还不是很清楚:我应该像Jenkins一样设置CI服务器吗?它会带来什么? 它对提高速度有用吗?(在我们的情况下不是问题) 因为可以重新创建旧版本,这是否有用?(但是我们可以通过检出旧版转速来使用Mercurial来做到这一点) 基本上,我知道它会很有用,但我无法确切知道原因。 任何考虑到我上面提出的观点的解释都将受到欢迎。

2
使用gettext翻译更长的文本(视图和电子邮件模板)
我正在开发一个多语言的PHP Web应用程序,并且有很长的文本需要用gettext进行翻译。这些是电子邮件模板(通常很短,但仍然是几行)和视图模板的一部分(较长的描述性文本块)。这些文本将包括一些简单的HTML(强调的内容如粗体/斜体,可能是此处或此处的链接)。模板是捕获其输出的PHP脚本。 问题在于,gettext对于处理较长的文本似乎非常笨拙。长文本通常会比短文本具有更多的变化-我可以更改msgid并确保在所有翻译中都进行更新(msgid较长时可能需要大量工作,并且容易出错),或者我可以保留msgid保持不变,仅修改翻译(这会在模板中留下误导的过时文本)。另外,我也看到了反对在gettext字符串中包含HTML的建议,但要避免将单个自然文本分成很多块,这将是翻译和重组的更大噩梦,并且我也看到了反对的建议将gettext字符串不必要地拆分为单独的msgids。 我看到的另一种方法是完全忽略这些较长文本的gettext,并为每个语言环境在外部子模板中分离这些块,而只为当前语言环境包括一个。缺点是我将gettext .po文件和位于完全不同位置的单独模板之间的翻译工作分开了。 由于此应用程序将来会被用作其他应用程序的起点,因此我正试图提出长期最佳的方法。在这种情况下,我需要一些最佳实践建议。您如何实施类似案例?哪些结果可行,什么却是坏主意?

8
将声明放在内部块中而不是在函数开始处可能有什么缺点?
在我工作的地方,有明确的准则来声明变量。因此,需要将它们放在全局级别和/或函数的开头,而不是放在内部块(例如for循环)中。由于它们是由比我更有经验的人员指定的,因此,我相信一定有充分的理由,但是我不知道这可能是什么。很高兴知道在更大的范围内声明它们是否具有编译时/运行时的优势。

3
Git是如何设计的?
我的工作场所最近改用Git,我一直在(讨厌)它。我真的很喜欢它,它功能非常强大。我唯一讨厌的部分是有时功能过于强大(也许有点简洁/令人困惑)。 我的问题是... Git是如何设计的?只需短时间使用它,您就会感觉到它可以处理其他版本控制系统无法处理的许多晦涩的工作流程。但下面也感觉优雅。又快! 毫无疑问,这部分是莱纳斯的才能。但是我想知道,git的总体设计是基于某种东西吗?我已经阅读过有关BitKeeper的信息,但是有关技术细节的内容很少。压缩,图形,删除修订号,强调分支,隐藏,远程……所有这些都是从哪里来的? Linus真的把这个人赶出了公园,几乎是第一次尝试!一旦您超过了学习曲线,就可以很好地使用它。

2
使用静态内部构建器类的好处
在编写公司代码准则的过程中,我发现自己建议使用来自Effective Java 的Builder模式,而不是伸缩式构造函数。 但是,经过更多考虑之后,肯定是一个更优雅的解决方案是只删除构建器类,并且还要删除带有可选参数的多余构造函数。 因此,只有一个带有必需参数的构造函数,正常的getter / setter和注释代码。实现时,只需创建yr对象的新实例,然后设置值即可。 我最初的想法是,好处是消除了关于哪些参数是可选的以及需要哪些参数的困惑;但是,真正的好处来自使用方法链接/流利接口。 当您创建许多新实例时,构建器模式会很有用,因为ide可以完成繁琐的工作,并且还有很多(15+)个可选参数。但是,值得花额外的时间编码静态内部类吗,您是否建议使用构建器,还是浪费时间?
9 java 

2
使用动态编程技术如何解决“披萨拣选问题”?
温克勒的披萨挑选问题: 一片圆形比萨饼饼n,其中切片i有面积,S_i即每个饼片的面积都不同。 食者爱丽丝(Alice)和鲍勃(Bob)轮流采摘切片,但在馅饼中留出多个空隙是不礼貌的(考虑到不允许这样做)。 因此,每个食者被限制采取与开放区域相邻的两个切片之一。爱丽丝先行,两个食客都在寻找尽可能多的馅饼。 如果Alice和Bob都能完美地发挥其比萨饼的消费量,那么动态编程算法将如何确定Alice吃多少馅饼? 我的理解: 在一般的DP问题中,我们继续寻找可以使用递归树或更紧密地使用DAG可视化的子问题。在这里,我没有找到任何线索可以找到这里的子问题。 在这里,对于给定的S_i集合,我们需要最大化Alice所吃的切片的面积。这将取决于从(n-1)个排列中选择一个披萨片的排列。在每n \ 2圈内,Alice会从两个可用选项中选择一个最大面积切片,这将为我们提供置换的切片总​​面积。我们需要找到所有此类排列的切片区域。然后从这些中最大化。 有人可以帮助我前进吗?

3
建议使用哪些资源来了解并发系统的Actor模型?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 6年前关闭。 Actor并发模型显然正在受到青睐。有没有一本很好的书介绍了模型的模式和陷阱?我正在考虑一些可以讨论的问题,例如,在成百上千的独立参与者的背景下,一致性和正确性问题。 如果它与一种特定的语言关联(我想,Erlang,因为它似乎被普遍认为是Actors的公认实现),那将是可以的,但是我希望除了介绍性的一两个章节之外还可以。实际上,我对Actor最感兴趣,因为在Scala中实现了Actor(如果有可用的资源)。

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.