软件工程

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

2
通过不编程来掌握编程语言?
计算机科学家彼得·诺维格(Peter Norvig)在他的论文《十年内自学编程》中指出,您需要大约10,000个小时的练习时间。 但是杰夫·阿特伍德(Jeff Atwood)在他的文章《如何通过不编程成为一个更好的程序员》中指出,他认为,成为一个更好的程序员的唯一方法是不编程。 这些条款是反对的。是否有科学证据证明Jeff Atwood的方法?

4
为什么开发设备比典型设备能为您提供更多资源?
我创建了一个可以在我的第四代iPod Touch和我公司的第五代iPod touch上运行的应用程序。 当我们发现任何非开发者设备运行该应用程序*后发生崩溃时,我们将要发布。 提出了一个想法,即注册为“开发者设备”的设备可为您的应用提供更多使用资源。这对我来说似乎不对,因为我无法想到会存在的任何原因-我觉得这很可能与构建或配置概要分析有关。 但是,这引发了讨论。为什么首先存在诸如游戏机开发套件之类的设备,这些设备的功能要比目标平台强?当然,对程序进行压力测试是很好的,但是更准确地表示目标平台会更有意义吗? TL; DR-为什么开发套件比目标平台拥有更多的资源? *非第三代以上的非开发者设备。从我们的服务器(而不是直接从安装了app&xcode的计算机)下载应用程序的iOS设备。 请注意,还有另一个问题看起来很相似,但实际上却有所不同,因为另一个问题是关于模拟器的,我知道使用模拟器和实际设备之间存在巨大差异。

2
Git登台:什么时候登台?如果事后修改该怎么办
我对Git广泛领域并不陌生。我已经阅读了该手册并一直在练习,但是我对手册的某些方面感到困惑,在搜索后无法弄清。 我很好奇: 在项目中(首次提交后),何时才是登台源文件的恰当时机?就在提交之前?在添加/删除或修改之后吗? 如果文件在两次提交之间暂存,然后被修改,那么Git会发生什么?它是否需要关注内容声明时的内容更改以及更改后的内容? 如果我创建一个新文件,暂存它然后再删除它,为什么Git要求我使用“ -f”标志,而简单的“ git -rm file.ext”不起作用? 我已经阅读了“阶段意味着什么”以及有关Git的手册和其他教程的其他各个主题,但是正如我所说,我仍然不明白上述问题。 因此,如果可以的话,请用自己的话语和例子回答问题,以便我更好地理解它。 谢谢。

6
我的团队是否应该使用一些公认的通用编码标准作为自己的基础?
我所在的研发团队已决定采用编码标准。我们只是最近才成立的,我们自己的代码和通用编码时间太少,无法将我们的标准/惯例文档建立在我们团队有机发展的基础上,也无法借鉴我们自己的代码中的良好示例等。 现在,我们每个人都有一些过去工作场所的经验-尽管我们每个人都没有处于这样一种状态:“让我们在这里采用这份全面的文件,我发现它适合我们在这里从事的工作”(*)。另外,我们中的某些人(包括我本人)只有没有官方编码标准的地方的经验,或者在不同的环境中用不同的语言编写(高压每周发布的生产环境,而不是更加注重研究的开发工作) 因此,我一直在考虑的一种选择是获取一个相对知名且备受关注的文档,剪掉我们不在乎/关心的内容,并根据我们的偏好进行一些修改。 这是常见的做法吗?您认为这是个好主意吗?如果是这样,那将是一个合理的“基准”编码标准(不要告诉我哪个是最好的,我不想在这里引发宗教冲突;只需指出可以在其基础上进行全面或“中立”的内容) ) 笔记: 我们希望可以使用C,C ++,OpenCL,CUDA,Python。 我们是一个由4人+经理组成的团队,预计在一年左右的时间内增长到大约5-6。 在我们公司中,团队几乎完全是自治的,通常根本不互动(甚至不使用彼此的代码-工作是在完全不同的项目上);所以-没有公司范围内的考虑。 关于工具,目前我们知道我们将使用Eclipse,因此它的代码格式化程序至少将成为一种工具。Ctrl + Shift + F很久以来就是我的朋友 在编写Java时,我采用了尽可能严格遵循Bloch的Effective Java的做法。现在,这还不是一个编码标准,但是您可以将一些砖,水泥和砂浆称为编码标准。我当时正在考虑将类似的内容作为“混合”的一部分(注意我们不使用Java)。 我指的是更广泛意义上的编码标准,例如采用对P.SE问题的回答中提出的建议。 我找到了大量的C ++编码标准文档 ; 也许我应该挖掘我们的基线。 (*)并非完全正确,但我不想使这个问题复杂化。

3
我应该在哪里放置发出Http请求的方法以从iOS开发中的Web服务获取数据?
我的iOS应用程序中有一个Model Car,其中从网络服务中获取了诸如名称,年份,值等参数,以便用汽车数据填充列表。 我应将异步发送到服务器并返回汽车数组的方法放在哪里(该方法已将JSON转换为汽车数组)? 我当前的方法是Car类中的静态方法,该方法接收HttpClient(这样我就可以模拟客户端对它进行单元测试)并返回NSArray的汽车,这样好吗? 你们在这种情况下做了什么? 我很担心,因为我最近开始阅读干净的代码,该代码说一个类只能做一件事,而现在我拥有它的方式似乎可以做两件事(保存有关汽车的信息并获取汽车列表)。


2
访问控制的标准做法(设计模式)
我正在查看我的界面设计,并且在确定要访问的a user和a的情况下subject,我正在努力确定哪种方法是实现基于角色的访问控制的最“正确”方法user。 据我所知,我有三个核心选择(第四个是前三个的混蛋,第五个是第四个的调整): 使用subject具有以下权限的列表来查询user:subject.allowAccess(user.getPermissionSet) user使用subject所需的权限列表查询-user.hasPermissionTo(subject.getRequiredPermissions()) 查询第三方以找到权限的交集- accessController.doPermissionSetsIntersect(subject.permissionSet, user.getPermissionSet()) 查询subject/ user,同时将“决定”委托给第三方类 有user尝试访问subject,并抛出一个错误,如果不允许访问 我倾向于选项四-具有subject包含一个accessController字段,在其中调用subject.userMayAccess(User user)将操作委托给la: class Subject { public function display(user) { if(!accessController.doPermissionSetsIntersect(this.permissionSet, user.getPermissionSet())) { display403(); //Or other.. eg, throw an error.. } } } ..但这又引发了进一步的问题: 应该accessController是字段还是静态类..? 是否应该subject 知道查看权限需要什么权限? 关于召唤,最少知识的原理在哪里起作用subject.display()?subject.display()曾经的呼叫者应该知道访问控制有效吗?(subject.display()最终的“模板方法” 在哪里) 具有subject.display()管理访问控制,在用户没有所需权限的情况下引发异常? 在这种情况下,什么被认为是“最佳实践”?实际执行检查的责任应该在哪里发生? 由于这既是一项学术性的专业知识,其又将逐步发展为实施,因此将不胜感激对设计模式的引用。

1
非抽象类是否有明确的字眼?
我的项目中主要有抽象类,还有一些其他类正在使用/继承它们。在编写文档时,我想指出其中一部分只是关于这些非抽象类的行为,但是我发现使用这个词很愚蠢。 我可以说这是一个类,但是抽象类也是一个类。所以我想知道非抽象类是否有明确的单词/同义词? SEO更新: 非抽象类的通用名称是什么?

3
两个组件提供相同的功能,但依赖关系不同
我正在使用Zend Framework 1和Doctrine2作为ORM层在PHP中构建应用程序。一切进展顺利。现在,我偶然发现ZF1和Doctrine2都附带并依赖于它们自己的缓存实现。我对两者都进行了评估,虽然每个人都有自己的优点和缺点,但就我的简单需求而言,它们都不比其他人优越。这两个库似乎都是针对各自的接口而不是针对其实现编写的。 我之所以认为这是一个问题,是因为在应用程序的引导过程中,我必须配置两个缓存驱动程序-每个都有自己的语法。这样很容易造成不匹配,因此,与缓存后端建立两个连接的效率很低。 我正在尝试确定最佳的前进方式,并欢迎您可能提供的任何见解。 到目前为止,我想到的是四个选择: 不执行任何操作,请接受存在两个提供缓存功能的类。 创建一个Facade类,将Zend的接口粘贴到Doctrine的缓存实现上。 选项2的另一种方法-创建一个Facade,以在Zend Framework后端上映射Doctrine的界面。 使用多接口继承创建一个接口来统治所有接口,并祈祷不存在任何重叠(即:如果两个都有“保存”方法,由于PHP的原因,它们将需要以相同的顺序接受参数)缺乏适当的多态性)。 哪个选项是最佳选择,或者我不知道有没有“以上所述”变体?

3
C库函数的原理从不将errno设置为零
C标准要求不得将C标准库功能设置errno为零。为什么会这样呢? 我可以理解它对于调用多个函数以及仅errno在最后一个函数之后进行检查很有用-例如: errno = 0; double x = strtod(str1, NULL); long y = strtol(str2, NULL); if (errno) // either "strtod" or "strtol" failed else // both succeeded 但是,这不是“坏习惯”吗?由于只errno在最后进行检查,因此您只知道其中一个功能确实失败了,但哪个功能失败了。仅仅是知道某些失败对于大多数实际程序而言已经足够好了吗? 我尝试查找各种​​C Rational文档,但是其中许多文档没有太多详细信息<errno.h>。
9 c  standards 

5
解决哪些错误将带来最大的成本收益[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 我想根据解决的难易程度以及它将给我带来多少好处来对错误进行分类。例如,如果有一个错误需要一个小时(双文件关闭等)来解决,而另一个错误则需要一天(分段错误)。但是,如果解决第一个错误不是很重要,那么我可能会研究第二个错误。 是否有任何研究论文根据成本效益或类似指标对错误进行分类? 假设可以根据漏洞特征(例如安全漏洞,内存错误,逻辑错误等)对漏洞进行分类。在另一个维度上,可能会存在诸如难度(容易,中等,困难)之类的参数。我应该寻找其他尺寸吗?为简化起见,我可以假设两件事: 团队中的每个程序员都具有解决任何错误的能力 没有截止日期

5
在项目开始时分解一个复杂的故事
我正在尝试与敏捷项目管理(使用Pivotal Tracker)打交道,但是在尝试定义项目的前几个故事时,总是发现自己陷入困境。以这个非常简单的故事为例: “用户应该能够标记产品” 假设我已经在其他地方定义了“产品”,那么这个故事可能涉及在幕后编写一个多态标记系统,该系统ID完成后就可以最终添加标记产品的功能。 我的问题是这个故事中隐藏的工作量很大。我可以定义任务来完成故事,但整个故事应该工作1-2天?我只为揭示冰山一角而感到不对,但那是与用户有关的唯一部分。 您如何克服这种事情?最佳做法是什么? 更新25/08感谢所有人的指导,我已采纳了有关如何定义故事的所有建议。我现在切换到Jira Grasshopper,它对故事中的任务(分配,估计等)和冲刺开始后的开发任务有更好的支持。
9 scrum 

2
Haskell的内存中数据存储
我想在Haskell中为Web服务实现内存中的数据存储。我想在STMmonad中运行事务。 当我在Google 哈希表Steam Haskell上搜索时,我只会得到以下信息:Data. BTree. HashTable. STM.模块名称和复杂性表明这是作为树实现的。我认为对于可变哈希表,数组应该更有效。 是否有理由避免将数组用于STM哈希表?我可以通过此Steam哈希表获得任何收益,还是应该仅使用Steam ref来引用IntMap?

2
在执行DDD时是否应该模拟实体和值对象?
阅读后几 文章约Newable VS 注射对象以及如何将这些概念涉及到DDD的服务,实体和值对象,我留下了有关使用我的代码newables尤其是在我的单元测试的一些疑虑。 可更新项的主要候选对象是Entities和Value对象,这意味着与其将这些依赖项注入其他对象中,还应该只是new这些对象的一个​​实例,并直接在代码中使用它们。 但是,良好的DDD做法主张将责任分配给实体和价值对象(如果认为合适的话)。因此,实体和价值对象将最终在其中包含一些严肃的业务逻辑。 现在,如果服务在实体或值对象上运行,我应该模拟该实体或值对象并将该模拟传递给该服务(模拟将要求interface对似乎被提倡的价值对象或实体使用)? 还是我应该只是new一个实体/值对象,并将具体实现传递给服务,从而违反仅测试一个单元的单元测试原理?

4
狗食时何时开始使用该工具的下一个修订版?
具体来说,我正在开发一个将DVCS和构建系统集成在一起的工具,但是我想像一下,如果开发任何“元”工具(编译器,VCS,构建系统,测试运行器等)的人都将面临挑战。希望通过“狗食”发展。 我的问题是:在使用分支工作流的Scrum风格发布过程中,从什么时候开始在工具的开发周期中使用该工具的较新版本? 我正在寻找一种在以下两者之间建立平衡的过程: 不断使用该develop工具的版本:随着变更的合并,我正在打破自己的开发。 不断使用该master工具的版本:我通过狗食发现的所有问题都是已经发布的问题。

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.