软件工程

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

12
捕获一般异常真的是一件坏事吗?
我通常同意大多数代码分析警告,并且我会坚持遵守。但是,我在这方面遇到了困难: CA1031:不捕获常规异常类型 我了解此规则的理由。但是,在实践中,如果无论是否引发异常,我都想采取相同的措施,为什么我要专门处理每一个?此外,如果我处理特定的异常,如果我正在调用的代码发生更改以在将来引发新的异常,该怎么办?现在,我必须更改代码以处理该新异常。而如果我只是抓住了Exception我的代码就不必更改。 例如,如果Foo调用Bar,并且Foo不管Bar抛出的异常类型如何都需要停止处理,那么具体确定我要捕获的异常类型是否有任何优势? 也许是一个更好的例子: public void Foo() { // Some logic here. LogUtility.Log("some message"); } public static void Log() { try { // Actual logging here. } catch (Exception ex) { // Eat it. Logging failures shouldn't stop us from processing. } } 如果您在此处未捕获到一般异常,则必须捕获所有可能的异常类型。帕特里克(Patrick)有一个优点,OutOfMemoryException不应以这种方式处理。那么,如果我想忽略所有例外情况OutOfMemoryException呢?
56 c#  design  exceptions 

7
单一责任原则-如何避免代码碎片化?
我正在一个团队中,团队负责人是SOLID开发原则的坚决拥护者。但是,他缺乏将复杂软件发布出去的大量经验。 在某种情况下,他将SRP应用于本来已经很复杂的代码库中,而现在该代码库变得非常分散,难以理解和调试。 现在,我们不仅遇到代码碎片问题,而且遇到封装问题,因为某个类中可能是私有或受保护的方法被判断为代表“更改原因”,并已提取到公共或内部类和接口中,与应用程序的封装目标不符。 我们有一些类构造函数,它们接收20个以上的接口参数,因此我们的Io​​C注册和解析本身已成为一个庞然大物。 我想知道我们是否可以使用任何“远离SRP的重构”方法来帮助解决其中一些问题。我已经读到如果创建多个空的粗粒度类来“包装”多个紧密相关的类以提供对它们功能总和的单点访问(即模仿一个较小的类),则它不会违反SOLID过度采用SRP的类实施)。 除此之外,我想不出一种解决方案,该解决方案将使我们能够务实地继续我们的开发工作,同时又使每个人都满意。 有什么建议么 ?

11
实习生要问多少个问题?[关闭]
所以,我刚刚开始实习,我担心自己问的太多了。我的导师为我分配项目,并帮助我学习公司的所有技术和方法。但是,在执行此项目的过程中,我需要学习的新材料太多,因此我有很多疑问。我通常通过即时消息或电子邮件(这些是我公司的主要通信方式)提出问题。 我正在尝试小心,不要问太多问题:我不想冒犯别人或笨蛋。有多少个问题适合提出?一个小时一次?更多?减?请记住,我的导师也是一位程序员,他有自己的职责。
56 internship 

11
适用于动态语言的IDE-您可以获得多远?
我发现令人沮丧的是,动态语言应提供的开发速度如何因缺少IDE所能提供给您的静态对象的补全和其他资产而大大受到损害。 这不仅是减少打字量,还在于浏览API时获得的工作效率提高和无穷乐趣,而无需经常引用未与编辑器集成的文档。 到目前为止,所有IDE +动态语言组合-公平地说还不是很多-我尝试过: 越野车 慢 毫无头绪/过于狂热(如显示所有可能的完成) 或者根本不像Eclipse + Java那样完整。 我知道动态代码分析不是一件容易的事。但是人们不禁会怀疑- 这一段代码真的很难找出来吗? 所以我的问题是: 是否有任何特定的IDE(或更少的一体式安装程序)实现了对动态语言的完全出色的支持,还是这还是一个“未解决”的问题?

13
如何减少迭代结束时的停机时间?
在我工作的地方,我们通过3周的迭代练习了Scrum驱动的敏捷。是的,如果迭代次数较短,那将是很好的选择,但目前暂时不能更改它。 在迭代结束时,我通常会发现最后一天进展非常缓慢。实际工作已经完成并被接受。有几次会议(回顾性会议和下一个迭代计划),但除此之外,会议进行得并不多。 我们团队可以使用哪种技术来维持最后一天的动力?我们应该解决缺陷吗?尽早开始下一轮迭代的工作吗?还有吗

3
什么是lambda,为什么有用?[关闭]
到目前为止,我听说: λ演算 Lambda程式设计 Lambda表达式 Lambda函数 这似乎都与函数式编程有关... 显然它将被集成到C ++ 1x中,所以我现在可能会更好地理解它: http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions 有人可以简短地定义什么是lambda事物,并给出一个有用的地方吗?

9
雇用初级开发人员,我应该问什么?[关闭]
我们目前正在招聘一名初级开发人员来帮助我,因为我有更多的项目无法管理。我从未雇用过任何不是朋友或至少不是熟人的人。我通过电话采访了唯一对我真正突出的申请人(书面),但我从未做过。 我们的项目都是高可伸缩性,数据密集型Web应用程序,它们每小时在多个服务器和客户端之间处理数百万个事务。为了特定于语言/堆栈,我们使用ASP.Net MVC2,WebForms和C#4,MSSQL 2008 R2,它们都在Windows Server 2008 R2之上运行 我该问他什么?我应该如何构造电话?

13
为什么需要Windows注册表?
当我并排调试com中的问题,处理dll地狱时,全神贯注地讨厌Windows注册表,我想知道为什么需要它。 我从未感到被迫阅读整本有关注册表最佳实践的书,然后仅仅“了解它”。 但是,我使用过Linux和Mac OS,并探讨了可以在同一台* nix计算机上安装多个版本的Python及其库的方法。 因为注册表有点像免费的(虽然很丑陋)格式,并且用于各种各样的目的,所以我从不了解它试图解决什么基本问题。 例如,Microsoft不希望您同时安装两个不同版本的MS Office。他们使用注册表在安装过程中强制执行此操作。我认为,这种限制是人为的。如果他们真的愿意允许其他行为,则可以相应地调整其体系结构。 在Mac OS中,您可以通过将应用程序拖放到特定文件夹中来安装和删除它们。 所以, A)它试图解决什么基本问题?B)其他操作系统如何解决?


19
OOP是否实现了代码重用的承诺?有哪些替代方法可以实现代码重用?
使用面向对象范例的最大希望可能是代码重用。有人对此表示怀疑。为什么没有实现? OOP定义的代码重用是否会使项目更高效? 或更易于管理?还是更容易维护?还是质量更高? 也许大家都同意代码重用是一件好事,但是有几种方法可以实现这一目标。问题是关于OOP提供的代码重用方法。这是好事吗?是否有比面向对象,子分类,多态等更好的方法来实现代码重用?有什么方法更好?为什么呢 告诉我们您在OOP重用或其他范式重用方面的经验。

30
程序员应阅读哪些非编程书籍以帮助发展编程/思维能力?[关闭]
这里有很多 的关于什么编程的书应该是程序员的书架上的问题。可以帮助您成为更好的程序员或开发人员的非编程相关书籍呢?知道他们为什么会有所帮助也很有趣。 我的第一个选择是孙子的《孙子兵法》(无论如何陈词滥调),因为它清楚地表明,任何项目的成功都取决于其最薄弱环节的力量(而战争是一个大项目)。

3
在Java 8中使用方法引用语法而不是lambda语法是否会对性能产生好处?
方法引用是否跳过了lambda包装器的开销?他们将来可能吗? 根据有关方法参考的Java教程: 有时... lambda表达式除了调用现有方法外什么也不做。在这种情况下,通常更容易按名称引用现有方法。方法引用使您可以执行此操作;它们是紧凑的,易于阅读的lambda表达式,用于已经具有名称的方法。 由于以下几个原因,我更喜欢lambda语法而不是方法引用语法: Lambda更清晰 尽管有Oracle的主张,但我发现lambda语法比对象方法引用的简写形式更易于阅读,因为方法引用的语法是模棱两可的: Bar::foo 您是否在x的类上调用静态的一参数方法并将其传递给x? x -> Bar.foo(x) 还是在x上调用零参数实例方法? x -> x.foo() 方法参考语法可以代表任何一种。它隐藏了您的代码实际在做什么。 Lambda更安全 如果将Bar :: foo引用为类方法,并且Bar以后添加了同名的实例方法(反之亦然),则代码将不再编译。 您可以始终使用lambda 您可以将任何函数包装在lambda中-因此您可以在所有位置一致地使用相同的语法。方法引用语法不适用于采用或返回原始数组,引发已检查异常或具有与实例和静态方法相同的方法名称的方法(因为该方法引用语法对于调用哪种方法尚不明确) 。当您使用相同数量的参数重载方法时,它们不起作用,但是无论如何您都不应这样做(请参见Josh Bloch的第41项),因此我们不能将其与方法引用相对应。 结论 如果这样做不影响性能,我很想在我的IDE中关闭警告,并始终使用lambda语法,而不会将偶然的方法引用散布到我的代码中。 聚苯乙烯 无论在这里还是那里,但在我的梦中,对象方法引用看起来都更像这样,并且无需lambda包装器就直接在对象上对方法应用invoke-dynamic: _.foo()

3
将许多布尔状态存储/打包为一个数字的名称是什么?
这是一种简单的压缩,其中您使用一个数值变量来存储许多布尔/二进制状态,并使用加倍,并且每个加倍数均为1 +所有先前值的总和。 我确信它一定是一种古老的,众所周知的技术,我想知道正确地引用它是什么。我已经尝试过用各种方式描述它,但是在一些博客文章中什么也没发现,在这些博客文章中,作者似乎已经意识到了这一点,也不知道该怎么称呼(示例1,示例2)。 例如,这是一个非常简单的实现,旨在说明该概念: packStatesIntoNumber () { let num = 0 if (this.stateA) num += 1 if (this.stateB) num += 2 if (this.stateC) num += 4 if (this.stateD) num += 8 if (this.stateE) num += 16 if (this.stateF) num += 32 return num } unpackStatesFromNumber (num) { assert(num < 64) …
55 terminology  bit 

7
是否有已知的有效使用SLOC来衡量生产力的方法?
我与一位非常资深的建筑师进行了一次不寻常的简短对话,内容涉及动态和静态语言。他说,公司数据表明使用静态语言可以提高生产率。请注意,这是一家历史悠久的大公司。令我(和其他人)惊讶的是,他使用的指标是添加的代码行。 他迅速消除了有关该指标的反对意见,该反对意见说,在同一公司中,具有相似的文化,业务范围和足够的数据,差异(关于个人的独特情况和能力)充分融合在一起,因此SLOC指标可用于比较企业的生产率。工具和语言。 尽管我不认为此主张得到严格的统计分析的支持,但行业中是否有一些证据可以支持这种思路?

10
在什么情况下,更少的代码更好?[关闭]
我最近在工作中重构了一些代码,并且我认为自己做得很好。我将980行代码减少到450行,并将类数量减半。 当向我的同事展示时,有些人不同意这是一种进步。 他们说-“更少的代码行不一定更好” 我可以看到,在某些极端情况下,人们会写很长的行和/或将所有内容放在一个方法中以节省几行,但这不是我要做的。在我看来,由于代码只有一半大小,因此其结构合理且易于理解/维护。 我正在努力地弄清楚为什么有人希望将完成工作所需的代码加倍,而且我想知道是否有人会觉得与我的同事一样,并且可以提出一些理由,使事半功倍?

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.