软件工程

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

4
像这样的代码是“火车残骸”吗(违反了得墨meter耳定律)?
浏览我编写的一些代码后,我遇到了以下使我思考的结构。乍一看,它似乎足够干净。是的,在实际代码中,该getLocation()方法的名称稍微更具体一些,可以更好地准确描述其到达的位置。 service.setLocation(this.configuration.getLocation().toString()); 在这种情况下,service是在方法中声明的已知类型的实例变量。this.configuration从传递给类构造函数开始,它是实现特定接口(强制使用公共getLocation()方法)的类的实例。因此,表达式的返回类型this.configuration.getLocation()是已知的。特别是在这种情况下,它是一个java.net.URL,而service.setLocation()想要一个String。由于这两种类型的字符串和URL不直接兼容,一些类型的转换的需要,以适应方形挂在圆孔。 但是,根据Clean Code中引用的Demeter定律,类C中的方法f应该仅调用C上的方法,由f创建或作为f的参数传递的对象以及C的实例变量中包含的对象。超出此范围的任何内容(除非是我在上面特定情况下的最终结果,除非您考虑由于方法调用本身而创建的临时对象,在这种情况下,整个法律似乎都没有意义)。toString() 考虑到列出的限制条件,为什么不鼓励或什至不允许上述呼叫,所以有合理的理由吗?还是我只是太挑剔了? 如果我要实现一种方法URLToString(),该方法只是调用作为参数传递给它toString()的URL对象(例如,由返回getLocation()),然后返回结果,则可以将getLocation()调用包装在其中以实现完全相同的结果;有效地,我只是将转换向前移了一步。那会以某种方式使其可以接受吗?(在我看来,从直觉上看,这两种方式都不应该有任何区别,因为所做的只是稍微移动一下东西。但是,按照所引用的《得墨meter耳定律》的信,这是可以接受的,因为我然后直接在函数的参数上进行操作。) 如果这比调用toString()标准类型更具有异国情调,会有所不同吗? 在回答时,请切记,更改service变量所属类型的行为或API 是不切实际的。同样,为了争辩,我们说改变返回类型getLocation()也是不切实际的。

13
“系统匈牙利语”表示法仍然有用吗?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 8年前关闭。 我在论坛上进行了搜索,但是找不到为什么应避免使用它的答案,而只是为什么它不是灵丹妙药。所以我不认为这个问题是重复的。 是否有有效的理由为什么我应该取消学习惯用的系统匈牙利语? 到目前为止,我发现使用它具有以下好处: 一致的变量命名 您无需搜索即可看到类型(智能在半数时间中已失效/已建立索引,因此这仍然是一个合理的原因) 语义仍然可以包含在名称的第二部分中 以及以下缺点: 惹恼了一些人(不知道为什么) 如果更改了类型,则该类型可能与变量的名称不匹配(我不认为这是正当的理由,类型很少更改,并且您拥有“全部重命名”) 所以为什么: vector<string> vecCityNames; wstring strCity = L"abc"; //more code here vecCityNames.push_back(strCity); 差于: vector<string> cityNames; wstring city = L"abc"; //more code here cityNames.push_back(city);//Are we pushing back int on a queue? Float on a stack? Something else?
23 c++  naming 


3
FizzBu​​zz问题有效性是否有正式研究?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 4年前关闭。 在看到这个问题,今天在FizzBu​​zz面试问题的变化,以及周围看到与之相关的其他问题,我要问:有没有正式的关于如何有效,这是作为一个面试技巧的研究?有很多人说,它过滤掉了一些听起来有些疯狂的候选人(在某些情况下为95%以上),但是对于找到优秀的程序员/开发者来说有多好呢? 有研究表明,软技能可能比硬技能更好,是为工作角色选择合适人选的指标。同样,可能有一些中间原因导致许多考生未通过该测试(紧张,认为“这是把戏”等)。 根据到目前为止的评论,FizzBu​​zz问题背后的想法似乎是确定该人是否具有良好的(足够的)编码技能,以供进一步考虑。我不完全相信FizzBu​​zz实际上会这样做。另外,请记住,FizzBu​​zz 在招聘过程的早期就过滤了很大一部分候选人,这可能意味着大量的优秀候选人会在早期就被删除,因为他们不能足够快地解决愚蠢的问题。 另外,我将指出,查看FizzBu​​zz的有效性可以完全以定量方式完成。这与查看“适合”或“热情”不同,后者非常多变且非常不科学(但对于新的雇用决策而言仍然非常重要)。

13
单元测试如何工作?
我试图使我的代码更健壮,并且我一直在阅读有关单元测试的信息,但是我发现很难找到实际有用的用法。例如,维基百科示例: public class TestAdder { public void testSum() { Adder adder = new AdderImpl(); assert(adder.add(1, 1) == 2); assert(adder.add(1, 2) == 3); assert(adder.add(2, 2) == 4); assert(adder.add(0, 0) == 0); assert(adder.add(-1, -2) == -3); assert(adder.add(-1, 1) == 0); assert(adder.add(1234, 988) == 2222); } } 我觉得这个测试是完全没有用的,因为您需要手动计算所需的结果并对其进行测试,我觉得这里会有更好的单元测试 assert(adder.add(a, b) == (a+b)); 但这只是在测试中对函数本身进行编码。有人可以为我提供一个实际使用单元测试的示例吗?仅供参考,我目前主要在编码“程序”函数,这些函数需要约10个布尔值和几个整数,并以此为基础给出整数结果,我觉得我唯一可以做的单元测试就是在测试。编辑:我还应该在移植(可能设计不当)红宝石代码(我没有做过)的同时精确化这一点

4
如何进行进行中的重构?
因此,我有一个大项目,正在由我进行重构。我正在更改很多东西,因此没有机会让它尽快编译。我住在我命名的特殊git分支中cleanup(master当然,最终将合并到该分支中)。 问题是,我/我们有一个永远不要提交非编译代码的策略(理想情况下,它也应该起作用,但至少必须编译和链接)。因此,在完成这项艰巨的任务之前,我什么都做不了(审查或簿记)。 这不是我喜欢的工作方式(我相信大多数人每天至少要做一次)。 你怎么看?我有没有解决的办法? 以后可以告诉git汇总提交或其他内容吗?只要它们停留在cleanup分支中,我就可以忍受未编译的提交。 编辑 关于推送/提交的主题:我知道这是一个巨大的差异,但是稍后,当我将自己的内容合并到中时,修订版本将不完整master。因此,如果您浏览历史记录(或git bisect...),那么“本地”修订将可在世界范围内访问。因此,仅在本地提交而不进行推送不是最佳解决方案,因为这将在以后(当主题关闭并忘记一段时间后)给您带来麻烦。 简而言之:本地提交将最终被推送。全局历史记录不应显示未编译的提交。
23 git  refactoring 

9
委托与接口-还有更多可用的说明吗?
在阅读了《 何时使用委托代替接口》(《 C#编程指南》)一文之后,我需要一些帮助来理解以下给定的要点,我发现这些要点不太清楚(对我而言)。有任何示例或详细说明吗? 在以下情况下使用委托: 使用事件设计模式。 期望封装静态方法。 需要容易的组成。 一个类可能需要该方法的多个实现。 在以下情况下使用界面: 可以调用一组相关方法。 一个类仅需要该方法的一个实现。 我的问题是 事件设计模式意味着什么? 如果使用委托,组成如何变得容易? 如果有一组相关的方法可以被调用,那么使用接口-它有什么好处? 如果一个类仅需要该方法的一个实现,请使用接口-这样做有何好处?
23 c#  design  .net 

7
大O中的O是什么?
Big O符号中的Big和O是什么?我已经阅读了定义,但并没有说出O的发音是“哦”。例如-我知道O(n)是线性算法的复杂度,其中n可以是操作数。但是什么是O?
23 complexity  big-o 

10
我如何才能向重要的非技术利益相关者做一个好的演讲?
在本月底,我必须就我自己一直在从事的软件项目做一个介绍,从根本上决定我是否会在我是临时雇员的公司中获得全职工作目前。我将向我们的部门总裁和两位副总裁作演讲。与其他两位副总裁相比,总裁的编程知识更少,而最终我需要留下深刻的印象。 在演示中我需要传达的最重要的内容是什么?我的经理已经告诉我要强调以下几点: 我正在朝着正确的方向指导这个项目,并且完全掌控一切。 我正在按计划完成这个项目。 在演讲过程中,我还应注意哪些其他事项,以使自己尽可能具有应聘价值?我正在考虑强调我在设计水平上为减少软件中的风险和不确定性所做的努力(我想两件事对上级人士非常重要)。 我特别担心的一件事是在演示文稿中找到技术细节和非技术细节之间的恰当平衡。如果我不提供任何技术细节,我们部门的总裁将不知道软件中的所有“幕后”功能,但是如果我技术性太强,他可能会迷失方向而无法理解演讲中的重点。 任何提示将不胜感激。

4
有没有关于程序员在工作环境(例如尊重)方面的地理差异的研究?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使它成为软件工程堆栈交换的主题。 5年前关闭。 我从该网站中学到的一件事是,软件开发人员的待遇与在我所工作的公司中所看到的不一样,并且其中一些差异似乎与企业的文化或其他因素有关。程序员工作的地理位置。在某些领域,程序员似乎可以期望获得很多好处和很多专业上的尊重,但是在其他领域,听起来程序员似乎被视为是被告知应该做什么然后应该毫无疑问地去做的劳动者。即使在美国,该国各个地区之间的“规范”似乎也存在重大差异。我想知道这只是我的看法,关于程序员在不同位置的看法有什么真正的区别。 是否有任何研究讨论程序员工作环境的主要差异或关于如何按地理位置对待或尊重程序员的态度?我会对多篇文章探讨不同的研究方式感兴趣。 编辑:具体来说,研究似乎尚不可用,所以我将这个问题扩大了。是否有任何可用的,有关该主题的周到的文章?
23 culture 

7
您是否有技术原因无法在Linux计算机上开发iOS应用程序?
我知道为什么您不能在Linux计算机上开发OS X应用程序,但是有充分的技术原因为什么您不能在Linux上开发iPhone和iPad应用程序吗?为什么无法将iOS源代码编译成iOS可执行文件并在Linux上的iOS模拟器中运行它,或将其安装在开发iOS设备上? 仅仅是因为XCode IDE是可可应用程序吗? 看来,您可以在任何类型的平台上开发Android应用。我不明白为什么iOS无法如此。
23 ios  linux  xcode 

8
使用“ using”关键字时如何实现DRY原理?
考虑以下方法: public List<Employee> GetAllEmployees() { using (Entities entities = new Entities()) { return entities.Employees.ToList(); } } public List<Job> GetAllJobs() { using (Entities entities = new Entities()) { return entities.Jobs.ToList(); } } public List<Task> GetAllTasksOfTheJob(Job job) { using (Entities entities = new Entities()) { return entities.Tasks.Where(t => t.JobId == job.Id).ToList(); } …

4
如何显着提高Java性能?
LMAX团队进行了有关如何在不到1毫秒的延迟时间内完成100k TPS的演示。他们通过博客,技术论文(PDF)和源代码本身来备份该演示文稿。 最近,马丁·福勒(Martin Fowler)发表了一篇有关LMAX架构的出色论文,并提到他们现在每秒能够处理600万个订单,并着重介绍了该团队为提高性能而采取的一些步骤。 到目前为止,我已经解释了业务逻辑处理器速度的关键是在内存中按顺序进行所有操作。这样做(并没有真正愚蠢的事情)允许开发人员编写可处理10K TPS的代码。 然后,他们发现专注于良好代码的简单元素可以将其带入100K TPS范围。这只需要精心构造的代码和小的方法-本质上,这使Hotspot可以更好地进行优化,并使CPU在运行代码时更高效地缓存代码。 提升另一个数量级需要更多的技巧。LMAX团队发现有几件有助于实现目标的方法。一种是编写Java集合的自定义实现,这些实现被设计为对缓存友好并且谨慎处理垃圾。 达到最高性能水平的另一种技术是将注意力放在性能测试上。长期以来,我一直注意到人们在谈论提高性能的技术,但是真正起作用的一件事就是对其进行测试 福勒提到发现了几件事情,但他只提到了几件。 是否还有其他架构,库,技术或“事物”有助于达到这样的性能水平?

7
如果变量具有getter和setter,应该公开吗?
我有一个带有私有变量的类,该类具有该变量的getter和setter方法。为什么不将该变量公开? 我认为您唯一需要使用getter和setter的情况是,是否需要执行除set或get之外的其他操作。例: void my_class::set_variable(int x){ /* Some operation like updating a log */ this->variable = x; }

9
我应该建立自己的CMS还是依靠预先建立的CMS?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 相关:作为一个入门的程序员,与使用3rd-party库相比,我应该更喜欢构建自己的库吗? 作为中级到高级PHP Web开发人员,以及那时的年轻(15岁),我应该为我的网站构建一个全新的CMS还是依靠WordPress或Drupal等预制软件? 我并不完全认为WordPress足够强大/可扩展,足以处理我想做的事情,而在过去几天中与Drupal进行了相当多的修补后,它似乎并不能满足我的要求而且没有很好的文档记录,因此我在执行某些简单任务时遇到了一些麻烦。我喜欢使用的东西,例如ExpressionEngine,但我没有钱抛出了一个商业许可证,目前约为$ 300,所以这是一个不走。 我最初是将网站编码为一个临时系统,以便我的用户可以购买升级和其他东西(例如游戏中的货币),直到我可以建立一个新网站为止,但是当我开始使用该网站后,我很快意识到我需要对其进行扩展,因此从那时起,我就想到要使它成为一个功能全面的网站进行编码。它只花了几天的时间,但是所有的基本知识(注册,登录,帐户修改等)都在那里了,我相信这对于私人CMS来说将是一个不错的开始。 我要添加的最后一件事是,如果要构建自己的CMS,是否应该使用我有相当丰富经验的PHP框架(如CodeIgniter)? 也许其他开发人员可以向我暗示我可能正在从事的工作。

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.