软件工程

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

4
与纯JavaScript框架相比,诸如GWT之类的工具具有哪些公认的优势?
GWT是一个软件堆栈,可将Java代码和Java Runtime类库的子集转换为JavaScript代码。 与JavaScript工具包相比,GWT在本质上和用途上似乎疏远了,并且过于复杂以至于无法完成简单的事情,从而直接使用JavaScript会占用很多细粒度的控件。 为什么Web开发人员会选择使用GWT之类的工具,而不是使用纯JavaScript和JavaScript框架和工具包,而该工具使用的是最初不面向Web的语言? 它可测量地更好,并且基于什么标准?

8
项目日志或日记有多有用?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 8年前关闭。 我想知道保存项目日志或日记有多困难/有用。我担心跟踪自己所做的事情会占用太多时间...

5
离岸软件项目—解决冲突
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我受命管理一个外包给一些乌克兰开发商的项目。 该公司以固定价格通过Elance雇用了他们。那时,我的老板让我一个人去处理它们并完成工作。我为需要完成的工作创建了详细的规范。 该项目涉及处理XMPP,RabbitMQ和数据库。在我与他们的第一次会面中(总是IM),我彻底解释了他们需要做什么。他们似乎理解了它-并且他们非常相信它将很容易做到。 到目前为止,一切都很好。但是一个星期后,当我们再次见面时,他们对需要做的事情充满了误解。当我问一个开发人员他是否知道XMPP时,他说他是第一次使用它。在我们的第一次会议上,我特别提到了项目的复杂性和所涉及的技术。另外,我一再要求他们编写一个功能规范,以确切地说明他们将如何做。但是他们说“不”,并坚持要宁愿编写代码。我说了可以。 该项目在3周后完成,他们交付了所需的东西。那时我开始查看代码。在大多数情况下还可以,但是存在一些重要问题: 他们将需要分离的一些东西硬编码为配置文件 我需要将多个配置文件合并为一个 他们没有写任何文件 其他一些小的变化 我要求他们进行这些更改(文档除外)-而且,我们有一个论点。 他们说,由于价格是固定的,我要求他们在完成工作代码后进行任何更改都是不公平的。他们在该项目上花费了不合理的时间,现在索要任何东西是完全错误的。 现在,他们终于进行了更改,项目结束了。但这在我心中留下了一些疑问... 他们做了所需的工作,但我需要正确完成,因此进行了更改。我真的不公平吗? 为什么我同意让他们在没有功能说明的情况下进行编码? 为什么我不能确保他们第一次了解所有内容? 有人发现自己处于同一位置吗?您是否认为有更好的方法来管理外包项目? -更新- 感谢所有意见-在考虑了全部经验之后,我可以得出结论... 尽管从我的角度来看我对规格并不模糊,但是我当然并没有像建议的那样使它们变得铁定。因此,收获是:始终尽可能具体-从他们的角度阅读规格,看看是否错过了一些东西。重复至少三遍。 仅指定代码应该做的还不够。您必须指定代码的外观。目录结构将是什么;甚至文件名(如果可能)。这样可以避免您日后烦恼。严格指定编码准则,变量命名约定,内部文档格式等。请确保它们遵守这些准则,否则请严格遵守。 从他们的角度要求功能规范-坚持在任何代码之前编写它。这将避免很多混乱和误解。 查看正在开发的代码,以便您更早地识别异常并进行纠正。每隔一天至少与他们交谈一次。 最后,尝试与他们建立良好的融洽关系。让他们感到您欣赏他们的工作。不要夸大其词以使其符合您的准则,而是请他们这样做并告诉他们,一旦他们完成该项目,这将使您对代码的维护变得非常容易。

11
连续创建和删除表是否表明存在体系结构缺陷?
最近,我与一位开发人员进行了讨论,该开发人员提到在程序开发过程中,他们会定期创建和删除表和列,同时使用新功能和合理的工作,并说使用敏捷开发过程是正常的。 由于我的大部分背景都是在瀑布式开发环境中进行的,所以我想知道这在敏捷开发中是否被认为是正确的,或者这可能是潜在问题的征兆,无论是程序体系结构还是遵循敏捷过程。

3
Scrum:处理动力不足
根据此,“Scrum的高度依赖于积极主动,密切协作,跨职能和自组织的团队。” 那么,您如何处理可能不太愿意获得代码所有权的同事呢?您如何获得对拥有所有权感兴趣的人?
11 scrum  teamwork 

4
开发动态语言
我已经为非常简单的语言创建了几个手写的编译器,但是现在我想尝试开发一种动态语言,类似于简化的Python或Ruby。但是,我很容易将头放在编译器的工作方式上。原始编译器只是翻译。但是如果语言是动态的,我将无法做到这一点。我必须编写一个解释器或VM,以便在运行时跟踪信息并为我做更多的工作。 简而言之,考虑到我知道编译器的工作原理,但又想迁移到创建解释器,是否应该检查任何资源?那里有一些用于动态语言的虚拟机,但是我自己开发自己的没有问题。这些全都是出于我的个人经验。 我正在寻找有关如何从编译器转到解释器的信息。如果我已经为X语言编写了编译器,但是现在要编写解释器,该做什么呢?在此过程中是否有资源? 我不希望涉及编译器或虚拟机如何工作的大量或抽象资源。我有很多关于这个主题的教科书。我在网上找到的所有资源都假设您有0位经验,因此从词法或句法分析入手,或者它们非常抽象。我有一个正在运行的编译器,但是现在我想将其转换为解释器,并为语言添加动态功能。 我找不到有关此过程的资源,它的范围可能太有限,或者解释器的“后端”中的资源没有太过理论,这就是我在此处发布的原因。

2
将“结果”与“状态”分开的好处是什么
假设您有一些自动化流程,这些流程通常会经历以下状态;预定-启动-验证-执行-完成 最重要的是,由于错误或明确的用户取消,这些过程可能会过早结束。 我的第一个冲动就是简单地将错误添加并取消到可能的状态值列表中,但是我想知道将结果与状态分开的(概念上的)优势(即使在我看来,有人可能会认为错误和取消也是与完成状态完全不同的状态)。

11
当您似乎无法理解编程的特定部分时该怎么办?[关闭]
按照目前的情况,这个问题并不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我一直在学习新的语言,用多种语言为非常基本的程序编写代码,然后上课。我读过书,文章,课程,视频,随便你怎么说,但是我似乎无法掌握某些东西。 例如,我从不了解指针-它们擅长什么。(问题的一部分-不需要使用“指针”重新标记...) 但是,我的问题不是指针是做什么的,而是我如何理解这样的事情?如果在阅读有关编程的某些部分的书或文章后,我不理解,该怎么办?用某种编程功能编写代码肯定会有所帮助,但是实际上并不能帮助理解那么多。理论部分对理解很重要。

2
JSON查询语言
我有一台返回非常大的JSON消息的服务器,我的客户端应用程序仅依赖于此响应的一部分。客户端应用程序需要检查JSON消息中是否存在“ xyz”属性,并根据结果运行特定的用例。 对于此要求,将整个JSON消息转换为对象听起来对我来说有点昂贵,因此存在这个问题。 是否有像XML一样的标准JSON查询语言?如果是,那么最好的方法是在Java中实现此查询语言。 仅供参考:不能在服务器端更改或添加新服务。
11 java  json 

5
我应该为该缓存策略使用哪种数据结构?
我正在使用.NET 4.0应用程序,该应用程序在返回双精度数的两个双精度数上执行相当昂贵的计算。对数千项中的每一项执行此计算。这些计算是在Task线程池线程上执行的。 一些初步测试表明,一次又一次地执行相同的计算,因此我想缓存n个结果。当缓存满了,我想抛出了最不经常最近使用的项目。(编辑:我意识到至少经常没有意义,因为当缓存已满并且我将结果替换为新计算的结果时,那个结果将是最不常用的,并在下次计算新结果时立即替换并添加到缓存中) 为了实现这一点,我正在考虑使用Dictionary<Input, double>(其中Input将存储两个输入double值的微型类)存储输入和缓存的结果。但是,我还需要跟踪上次使用结果的时间。为此,我认为我需要第二个存储信息的集合,以便在缓存已满时从字典中删除结果。我担心不断对清单进行排序会对性能产生负面影响。 有没有更好的方法(例如性能更高的方法),或者甚至是我不知道的通用数据结构?为了确定解决方案的最优性,我应该进行哪些类型的分析/测量?

2
控制器应该以MVC模式将数据传递给视图吗?
我经常使用ASP.NET MVC(以及其他基于Web的MVC实现),但这是我从未确定的事情:控制器和视图是否应该通信? 当然,控制器应该选择要使用的视图,但是我的意思是控制器应该将数据传递给视图吗?我认为,如果视图期望来自控制器的数据,则它们将有效地捆绑在一起(一对控制器)。相反,我通常让视图与模型本身进行通信,并且独立于任何控制器。 我有正确的方法吗?还是这是没有一个正确答案的情况?在Web和其他环境中工作时答案是否会改变?当您具有强类型视图的概念(例如在ASP.NET MVC中)时,答案是否会改变?
11 architecture  mvc 

4
迭代器是否具有非破坏性的隐含合同?
假设我正在设计一个自定义数据结构,如堆栈或队列(例如-可能是其他任意有序集合,其逻辑等效于pushand pop方法-即破坏性访问器方法)。 如果您要IEnumerable<T>在每次迭代中弹出的这个集合上实现一个迭代器(特别是在.NET中),那会打破IEnumerable<T>Breaking的隐含契约吗? 是否IEnumerable<T>有此隐含合同? 例如: public IEnumerator<T> GetEnumerator() { if (this.list.Count > 0) yield return this.Pop(); else yield break; }

3
是否存在针对多个浏览器选项卡和较新浏览器的客户端状态的开源JavaScript库?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,以使它成为软件工程堆栈交换的主题。 5年前关闭。 HTML5有一些新功能,使其成为最近的浏览器,允许在选项卡,浏览器窗口,相同的域窗口等之间共享状态。因此,编写在Web上保持很多状态的Web应用程序可能会变得容易一些。客户端,并且还可以智能地管理选项卡和/或窗口之间的状态。 当前有诸如Backbone.js之类的库,可以帮助管理单个选项卡或单个窗口中的状态。是否有任何东西可以帮助多个选项卡(或窗口)管理全局状态,特定于选项卡的状态以及交叉表事件,而无需依赖服务器来同步它们?

3
为什么移动平台不支持分代垃圾回收?
Windows Phone / Xbox和Android都不支持分代垃圾回收。这让很多程序员感到沮丧。似乎有合理的工程原因,但我无法弄清楚。 当前的电话比2001年运行带有世代GC的.NET 1.1的台式机/笔记本电脑具有更多的内存和更好的CPU,我无法想到ARM处理器在世代GC上比x86差的任何原因。在电话和控制台上对多任务的需求也减少了,因此有相对更多的可用堆空间。 那有什么呢? 编辑:需要澄清的几点: 这些平台专门为应用程序使用垃圾收集,因此我的问题不是关于为什么不支持GC的问题;我的问题是关于为何不进行分代垃圾回收。 人们对缺乏世代GC感到沮丧的原因是非世代GC效率极低。(这意味着电池寿命不是原因。) 我确实认为,缺乏世代GC支持是有诚实的技术原因。这不是一个反问。

4
C ++中的术语“接口”
Java对class和进行了明确区分interface。(我相信C#也可以,但是我没有经验)。但是,在编写C ++时,类和接口之间没有语言强制的区分。 因此,我一直将接口视为解决Java中缺乏多重继承的一种解决方法。在C ++中做出这样的区分是任意的,毫无意义的。 我一直倾向于使用“以最明显的方式编写东西”的方法,因此,如果在C ++中,我得到了Java中所谓的接口,例如: class Foo { public: virtual void doStuff() = 0; ~Foo() = 0; }; 然后,我决定大多数的实现者Foo都想共享一些我可能会写的通用功能: class Foo { public: virtual void doStuff() = 0; ~Foo() {} protected: // If it needs this to do its thing: int internalHelperThing(int); // Or if it doesn't need the …

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.