软件工程

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

7
递归-是“分而治之”还是“代码重用”
递归 -众所周知-是其中的一个问题-绕回头就像在编程之旅中取得“里程碑”。 但是,当涉及到在现实世界中实际使用它时-仅了解递归的机制还不够-在递归是最合适的解决方案的同时,还必须了解问题的性质。 所以我的问题是... 什么是需要递归解决的“问题模式” 是递归形式的“分而治之”策略还是形式的“代码重用”,或者是一种设计模式 您能否举一个现实世界中的示例为例,其中想到递归作为直接解决方案 -更新- 许多答案都将“实际问题”称为遍历树,阶乘等。我更喜欢“真正的实际问题”-让我举个例子... 我们有一个大的文本夹(大约30 MB的文本作为的链接列表structs),我们需要为全文搜索创建一个索引。我们需要将整个索引保留在内存中,然后每10分钟重新为文本建立索引。 每隔10分钟,我们会将整个文本(两个链接列表,逐行)与新生成的文本块进行比较-以查看更改了哪行-然后我们将仅对该行重新索引-这样我们可以避免不必重新索引整个文本。记住-我们需要找到两个30 MB链表之间的差异点。 我的一位同事提出了一个很棒的程序,该程序使用HEAVY递归比较行-然后收集卡盘在阵列中不同的位置-是的,我知道这听起来很令人困惑-递归如何在这里提供帮助-但它做了。 关键是-他怎么看待大量使用递归可以巧妙地解决这个问题?
11 recursion 

8
您如何决定是否应该参加一个项目?
我是一个相当新的开发人员。从专业上来说,我在C#中实习了两年,而在初级开发人员中做了六个月。我一家人的朋友需要一个用VB.net编写的项目的帮助。我从未使用过VB.net,所以我有点担心。 但是,真正的问题来自这样一个事实,即一旦我查看了该项目的文档,我就会感到没有什么真正的好处。我有一种感觉,它将比我目前的生活压力更大。 有经验的开发人员如何决定是接受还是放弃项目?有哪些好的指标可以使决策更容易? 编辑 实际上,这似乎是一个非常大的ERP,他希望我继续工作,而且我不相信他对编程一窍不通,所以我认为我还不太初级的事实甚至没有引起他的注意。
11 project  contract 

4
为什么我们仍在浏览器而不是桌面模式中使用DOM
根据我的理解,Web界面被开发为使用HTML,因为当时由于带宽限制以及可能的处理能力,无法在浏览器中模拟桌面样式的应用程序,例如Silverlight和Flash的工作方式。 为什么过去不存在,而现在却越来越受到Flash / Silverlight等技术的接受和推动?根据我的经验,使用它们进行开发更令人高兴(当然,我认为),并且您不必处理跨浏览器合规性以及旧版浏览器(大部分情况下)。 与桌面应用程序的开发范例相比,处理回发,AJAX等似乎是多余的工作。DOM及其补充技术是否继续蓬勃发展,主要是因为Silverlight / Flash需要安装插件,而某些移动设备不支持该插件?

9
学习国际象棋的规则
一个类似的问题询问计算机是否可以通过分析数千种游戏来学习以最佳方式下棋。 如果一台机器在开始和每次移动之后可以看几局棋(或几局跳棋)的棋盘状态,是否可以对它进行编程以学习游戏规则? 如果可以的话,这项工作在多大程度上(例如,它能够考虑到晋升或晋升)?哪种机器学习算法将使之成为可能?


2
如何使我的visualstudio数据库项目与数据库同步?
我想将数据库架构与Visual Studio .dbproj数据库项目同步。 现在,我在大多数数据库开发工作中都使用SSMS,并且在需要同步db模式和.dbproj时,必须手动使用Visual Studio的模式比较工具。我为什么要这个?因为: 这是签入更改的唯一方法 这是应用更改的唯一方法 否则,将在获取文件时引起一些合并问题(基本上,如果“获取最新”包含我一直在更新的db对象上的某些db更改,而无需检出它们,则不会触发合并,并且很容易跟踪哪个版本是哪个) 很高兴能够在最新版本的架构中使用VisualStudio的搜索功能 很高兴能够使用搜索结果从VS修改存储过程(通常是在重命名文件时)。 除了自动执行“模式比较”工具使其每5分钟运行一次(这听起来几乎不是“干净”的解决方案)之外,还有其他方法可以实现此目的吗? 我想尽可能地使用SSMS,但我也对将使用Visual Studio的“服务器资源管理器/数据库连接”所做的更改自动传播到.dbproj的方法感兴趣。

4
理想的HTML5 Web应用程序是否有任何限制
让我们假设以下两个假设是正确的。 您的整个用户群到处都有宽带访问 有一个假想的浏览器X,它始终实现HTML5和WHATWG组的整个规范草案,所有用户都使用浏览器X。 我们需要商业公共桌面应用程序用于商业公共HTML5 Web应用程序的固有限制是什么? 我对无插件Web应用程序的局限性感兴趣,这些应用程序既不依赖Flash / Java / SilverLight / etc桥提供额外功能,也不依赖浏览器插件提供额外功能。 不适用的可能限制: 数据库?我们有WebSQL和indexedDB。 文件IO?我们有HTML5 File API,它可以读写。 速度?在最近的JavaScript引擎竞赛中,浏览器不再缓慢。本机C ++仅比chrome的V8引擎快3倍。 开发工具?网络已经成熟,并且有大量可用的工具可供选择。 封闭源?是的,所有代码都是开源的。这是一把双刃剑,对于使用封闭源代码或开放源代码有很多意见。我个人认为开放源代码的优点胜于缺点。 JavaScript / HTML5?诸如“我个人认为HTML5和EcmaScript是可怕的开发平台”之类的争论不计在内。 已知限制: 实时/安全(最高机密)关键代码不属于网络,也不属于网络。它需要使用低级,高度可控的语言(例如C或C ++)编写。 任何需要与计算机上连接的外部第三方硬件交互的工具,都很难与Web应用程序通信。 还有一整套不属于网络的程序。操作系统,驱动程序,服务器软件,低级API。我知道这一点,但是我没有将它们归类为“商业公共”应用程序,这些是可以预先安装在计算机上的软件类型。 顺便说一句,我知道这两个假设非常不现实,但我们可能会在5/10/20/30年内实现它们。我对应用程序的类型以及使它们与网络完全不兼容的应用程序功能感兴趣。 动机: Google应用 Microsoft Office365 Web应用程序列表 Adobe鸟舍 要点: 考虑到桌面应用程序是有效解决方案的一系列问题。 为什么Web应用程序不是有效的解决方案? 如何确定我是否可以使用Web应用程序作为解决方案。 我试图通过断言它们不存在来消除Web应用程序的主要困难(互联网连接和浏览器支持)。 此外,HTML5脱机应用程序和Modernizr有望解决这两个问题。 Web应用程序开发还有哪些其他困难?

10
RDBMS如何被视为一种时尚?
我于2003年完成了计算机A级学习,并于2007年获得了计算机学位,并且在一家使用大量SQL的公司中学习了自己的交易,因此我想到了将关系数据库用于存储的想法。 因此,尽管相对较不熟悉开发,我还是吃了一惊(在/software//q/89994/12436上)读到的评论说: [一些开发人员]鄙视[SQL],并认为它和RDBMS是一时的流行 显然,有能力的开发人员将使用正确的工具来完成正确的工作,并且在例如适用于平面文件或其他存储解决方案的情况下,不会创建关系数据库,但是RDBM在很多情况下都非常有用,因此如何被认为是一种时尚?

4
为游戏创建基于行为/组件的系统
背景 我将游戏开发作为一种业余爱好,并且正在寻找一种更好的设计方式。目前,我正在使用一种标准的OOP方法(我从事企业开发已经8年了,所以很自然)。以“坏蛋”为例 public class Baddie:AnimatedSprite //(or StaticSprite if needed, which inherit Sprite) { //sprite base will have things like what texture to use, //what the current position is, the base Update/Draw/GetInput methods, etc.. //an AnimatedSprite contains helpers to animated the player while //a StaticSprite is just one that will draw …

4
没有有关其设计或架构的文档,开源项目如何成功?
我想通过研究著名的开源项目来提高自己的编程技能,但是我发现仅跳入其源代码很容易迷路。 因此,我决定阅读有关其设计或体系结构的文档(例如UML图),以便首先了解其代码的组织结构。但是,令我惊讶的是,我找不到大型的开源项目(例如Hibernate,Spring,ASP.NET MVC,Rails等)的任何体系结构文档。 因此,我开始怀疑:如果新来的开发人员没有要阅读的体系结构/设计文档,或者项目经理只是打开源代码但关闭了文档,那么开源项目如何成功?

3
为什么迭代版本需要更长的时间?
我查看了http://programming.lispdream.com/blog/2011/06/recursion-vs-iteration/,发现在他执行阶乘函数的递归和迭代实现时,迭代实际上需要更长的时间给定n = 1,000。我不知道为什么(他没有解释,而是说这是对读者的练习)。对不起,我很陌生。

1
问我的雇主我是否可以为我正在为公司工作的项目开源
我是暑假期间在一家公司工作的实习生。我受到了热烈的欢迎,并给我的经理留下了深刻的印象(我想我比他面试过的其他人更有经验)。最近,我一直在开发一个信息亭类型的应用程序,该应用程序将从一个4岁的孩子可以编写的文本配置文件中生成一个简单的GUI菜单。 我喜欢这个项目,它已经成为我的宝贝。但是,在公司世界中,无论您为雇主开发什么……都将成为他们的(或者我听说过)。我非常希望能够在夏季结束后继续从事该项目,并且我也想将其开源。 我将如何要求这个?该代码没有任何公司机密,这里的大多数人都提倡开源软件。

3
参与学术研究时规划发展
亲爱的程序员, 当涉及学术研究时,您如何进行“软件计划”?而且,在一个侧面说明,你如何说服你的老板,写软件是不是就像盖房子一样,它更像是写一本小说? 血腥细节如下。 我负责一个在研究实验室工作的小型开发团队。我们开始开发一款软件,目的是有一天公开上市(即出售并从中赚钱)。除其他事项外,此类软件至少取决于两条独立的研究路线:也就是说,至少有两名博士学位。希望有一天能提出我们需要的工作的候选人。 主要软件还取决于我们作为开发人员可以处理的其他更具体的资源:图形渲染,软体变形等。 我的老板要我写整个项目的规格,要求和血腥的甘特图。面对事实,我对研究部分一无所知,而这种研究对于软件是基础的,他说“做个假设”。为了使论点清楚起见,他是一位教授,其博士学位是。学生应该提出我们需要的研究。他来自严格的工程背景:首先计划所有事情,写下规格,然后才写下“这是最后一部分”的代码。 我现在在做什么: 我按功能细分了产品;每个“功能” 实际上都是一个单独的产品; 每个功能都建立在前一个功能之上; 特征(A)具有可用的原型后,团队就可以开始研究下一个特征(B),同时对A进行质量检查(如果资金允许,可以招募更多人,等等); 取决于研究的功能将排在最后:届时,希望研究部分将完成(当仍然是一个大问题时); 另外,我设置了团队使用SCRUM来开发“ 1.0版”,这将在几个月内完成。可以根据合理的假设来设置截止日期:我们列出了所有必需的功能,计算了可用性,并给出了合理的估算值。 所以我的问题再次是: 我如何使老板开心,同时又让东西出去? 我如何为开发人员写一些东西的规格说明,不知道是否可以做?(我们仍未决定要用于某些任务的库;我们将在需要时这样做) 鉴于现在还没有客户或投资者,只有很多利益和承诺,我如何获得要求? 我如何获得世界和平? 我确信至少我的一个问题会得到回答:) ps:我正在匿名写这篇文章,因为如果发现这一点,潜在的投资者可能适得其反。希望你能理解。但是,我必须说我不喜欢这种“隐藏真相”的心态:该计划可能会使许多人受益,并且无法公开谈论此事(附带我的名字和声誉)感觉就像是审查制度。但是,a,我现在更关心您的建议。

4
我们应该如何防御?
我们已经在一些代码上运行了Pex,并且一直在显示一些好东西(好东西,但是要在生产之前显示它们!)。 但是,Pex的优点之一是它不一定会停止尝试查找问题。 我们发现的一个方面是,在传递字符串时,我们没有检查空字符串。 所以我们改变了: if (inputString == null) 至 if (string.IsNullOrEmpty(inputString)) // *** 这解决了最初的问题。但是,当我们再次运行Pex时,它决定: inputString = "\0"; 造成了问题。然后 inputString = "\u0001"; 我们已经决定,如果遇到默认情况,可以使用默认值// ***,并且很高兴看到由任何其他奇数输入引起的异常(并对其进行处理)。 够了吗?

3
我如何估算一行代码的寿命?
我正在尝试找出一种方法来分析开源项目中的代码寿命:即,特定代码行处于活动状态并使用了多长时间。 我当前的想法是,一行代码的生命周期从第一次提交时开始,到发生以下情况之一时结束: 它已被编辑或删除, 从构建中排除, 一段时间(例如一年)内不会维护其内部版本中的代码。 注意:为了澄清为什么将“编辑”视为“死亡”,已编辑的行将被视为“新一代”或代码行。同样,除非有简单的方法可以做到,否则就无法说明血统的长寿或祖先的后裔。 还有什么会决定一行代码的寿命?

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.