软件工程

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

11
高水平的开发人员花时间研究组装是否明智?[关闭]
显然,对低水平知识的了解在我们的工作中非常重要。 但是,如果您已经在高水平上开发商业软件,并且已经选择了方向但没有任何汇编技能,那么专注于研究与您的方向相关的内容是否更合理?还是有理由要花一些时间来学习低级基础知识? 什么时候为时已晚,什么时候不为时?而如果它是不是太晚了,那么如何将一个去学习最佳(在不花费过多的时间来得到一些深入和理解的意义上)?

14
您如何以“下一件大事”的想法对非程序员做出反应?
最近,很多时候,没有编程背景的人来说他们有一个伟大的想法,可以成为下一个大问题,并且这个想法本身是值得的。然后,当他们知道我是一名程序员时,他们问我是愿意为他们“编码”还是找到一个愿意为之付诸实践的人。 从热情来看,这就像他们对自己的想法很醉,这本身就是最重要的,但是他们只需要一个程序员。我对他们的反应取决于我的心情和他们对所做工作的总体态度,大致是: “拥有一个想法的核心是一回事。发展到使它成为改变世界的平台这一点它的生存空间是另一种,您将愿意按比例支付您认为自己的想法值得的规模。” 这些业务类型的企业家(没有技术/开发人员的知识)是否曾向您提出这样的建议,您对此有何反应?


11
设计模式通常是造就好坏的力量吗?[关闭]
我听说它辩称,自切面包以来,设计模式是最好的选择。我还听说过有人认为设计模式会加剧“第二系统综合症”,它们被过度使用,并且使用户认为自己是比实际更好的设计师。 我倾向于更接近以前的阵营,但是最近我看到了这样的设计,其中几乎每个交互都被观察者关系所取代,而所有事情都是单例。 那么,考虑到收益和问题,设计模式通常是好是坏,为什么?

10
为什么这么少的大型网站运行Microsoft堆栈?[关闭]
我脑海中浮现出一些利用Microsoft堆栈的大型网站 Microsoft.com 戴尔电脑 我的空间 好多鱼 堆栈溢出 Hotmail,必应,WindowsLive 但是,根据观察结果,排名前500位的站点几乎都在运行其他平台,那么市场渗透率如此之低的主要原因是什么? 成本? 技术局限性? 与公共网站相比,Microsoft是否更适合企业/ Intranet环境? 我不是在寻找市场份额,而是在大规模采用MS堆栈。

8
如何最有效地调试代码?[关闭]
可以将爬入代码中的错误减至最少,但在编写时不能完全消除-程序员是程序员,尽管许多人会不同意,但这只是人类。 当我们确实在代码中检测到错误时,该怎么做才能将其清除?我们应该如何处理它,以最有效地利用我们的宝贵时间,使我们花更少的时间去寻找它,而花费更多的时间进行编码?另外,调试时应该避免什么? 请注意,此处我们并不是在谈论防止错误;我们正在谈论出现错误时该怎么办。我知道这是一个广阔的领域,可能高度依赖语言,平台和工具。如果是这样,请保持涵盖心态和一般方法之类的答案。
33 debugging 

20
免费工作?[关闭]
我碰到了这篇文章《免费工作》,这引起了我的思考。 每个雇主的目标是从工人那里获得比公司支付的工资更多的价值。否则,就没有增长,没有进步,也没有给雇主带来任何好处。相反,每个员工的目标应该是为公司贡献比他或她的工资更多的收入,从而为接受公司的加薪和晋升提供坚实的理由。 我不需要告诉你,拒绝这项工作并没有持续很长时间。 相比之下,这是上周的故事。我的电话响了。它是一所主要大学的就业部门。那个打电话的人正在询问一个去年在Mises.org上做过一些网站工作的人的表现。我能够告诉他一个杰出的年轻人,他在危机中迅速采取行动,他如何连续三天,每天19天,每天工作三个小时,如何勤奋地学习新软件,如何保持冷静,如何工作。他在大约80个不同的第三方插件和数据库中以优雅和专业的方式进行导航,如何看待不可避免的问题,如何对结果承担责任等。 我没有告诉面试官的是,这个人做了所有这一切而没有要求任何付款。这个事实是否影响了我有关他表现的报告?我不确定,但是面试官可能会用我的声音对他为米塞斯研究所所做的事情感到敬畏。面试官告诉我,他写下了15个不同的问题要问我,但我在独白的过程中已经回答了所有这些问题,他很高兴听到所有这些细节。 该人被提供了工作。他做了一件非常明智的事情。他一生都是奉献者。 经济时代越艰难,雇用雇主时就需要更多地了解他们所得到的东西。作业应用程序通过水桶倾泻而入,全部用度数填充,并使其看起来尽可能令人印象深刻。都是纸。今天重要的是一个人可以为一家公司做些什么。在这种情况下,简历成为备考,但不是决定性的。但是,要使前任老板或经理对您赞不绝口,请潜在的雇主吗?那是值得的。 你怎么看?这里有没有人免费工作?如果是这样,它是否对您有任何好处?为什么您不应该免费工作(假定您有其他手段赚到钱来继续前进)?您可以分享您的经验吗? 我,我正在大学毕业一年,还没有获得学位,所以这可能就是为什么我的大多数求职申请都被忽略的原因。因此,我正在考虑免费为体验工作吗?
33 experience 

12
您多久使用一次正式UML?
我使用临时MUML(虚构建模语言)来相当频繁地设计和解释系统。它看起来与UML相似,并且易于理解。 但是,我有一位或两位教授曾试图使用严格,正式的UML(尽可能接近规范)。我一直怀疑严格的UML并不像他们声称的那样普遍。那么,如何“折腾”-您实际上多久绘制一次使用所有适当的行尾,多重性,成员类型符号等的完整图表?
33 uml  diagrams 

30
您曾经犯过的最大错误[关闭]
与我在Server Fault上阅读的问题类似,您在IT相关职位上犯的最大错误是什么?朋友的一些例子: 我需要在生产站点上做一些工作,所以我决定将实时数据库复制到Beta站点。相当标准,但是当我进入测试版站点时,它仍然在提取过期信息。糟糕!我已经将Beta数据库复制到了实时站点!感谢上帝的备份。 对于我来说,我为在特定时间范围内举行的活动创建了一个表格。参加者将填写表格以获得获胜机会,我们将从数据库向活动组织者发送CSV。我进入数据库,发现只有1个条目是我的。经过调查,似乎我忘记了自动递增键,并且由于服务器设置的原因,无法恢复丢失的数据。 我知道这个问题类似于Stack Overflow上的问题,但是我发现的问题似乎得到了一般性的答案,而不是实际的故事:) 有史以来最大的编码错误/错误是什么?
33 experience 

3
如何解决循环依赖?
我有三个相互循环依赖的类: TestExecuter执行TestScenario的请求,并使用ReportGenerator类保存报告文件。所以: TestExecuter依赖ReportGenerator生成报告 ReportGenerator取决于TestScenario和TestExecuter设置的参数。 TestScenario取决于TestExecuter。 无法弄清楚如何删除那些依赖项。 public class TestExecuter { ReportGenerator reportGenerator; public void getReportGenerator() { reportGenerator = ReportGenerator.getInstance(); reportGenerator.setParams(this.params); /* this.params several parameters from TestExecuter class example this.owner */ } public void setTestScenario (TestScenario ts) { reportGenerator.setTestScenario(ts); } public void saveReport() { reportGenerator.saveReport(); } public void executeRequest() { /* …

4
为什么Web Api不支持WSDL类型?
因此,我只是开始使用.Net WebApi,我要立即注意到的一件事是,没有合同定义API的外观和使用方式(每个动作的请求/响应),通常采用以下形式:用于WCF / Soap的WSDL。 在我看来,这将是非常有价值的事情,并使您的API使用者的生活变得更加轻松。 有没有理由吗?我是否不了解编程范例或原理?有什么办法可以创造一个?

3
我们应该在同一解决方案中从MVC应用程序调用Web API吗?
我正在MVC中具有移动应用程序的项目中工作,因此很明显,我们必须使用Web API,以便可以在移动应用程序中使用它。 在开始开发网站时创建了API之后,我们感到困惑,并讨论了是使用API​​还是直接访问Business对象。最后,我们让更多有经验的开发人员来使用Web API,而不是直接使用Business对象。 我对此解决方案结构感到困惑。 1)为什么我们应该使用Web API并发出HTTP请求(这很耗时)来获取或放置数据,而不是直接使用相同解决方案中的业务对象。 2)在争论之后,他们说如果客户端要在不同的云服务器上托管API和Web并仅在API上应用扩展,或者他想为访问API和Web使用不同的url(这是合理的)。因此,在那种情况下,我们应该在同一解决方案中从MVC应用程序调用Web API吗? 3)如果我们将API和Web托管在不同的托管上,那么这意味着我们的Web将使用WebClient并在每个导航上都有HTTP调用。这样对吗? 4)如果我们要在不同服务器上同时使用API​​和Web托管的业务对象,则BL中的某些更改将需要更新这两个服务器上的构建。 5)或者我们应该只为API创建一个项目,并且可以添加视图或html页面来开发Web界面,这样我们就可以直接从ajax调用API。 据我所知,#5是最好的解决方案,或者API仅适用于第三方访问。如果我们在同一解决方案中具有DB,EF,数据层和业务层,则我们不应使用API​​进行HTTP调用并直接访问业务对象。(如果我错了,请纠正我)当移动应用程序或桌面或任何人想要访问应用程序时需要API,以便我们可以拥有相同的存储库和数据层。 在我的场景中,我必须创建API,因为我们也拥有移动应用程序,在项目API方面,我们称为业务层(单独的项目),业务层与数据访问层(单独的项目)进行通信。因此,我的问题是,如果我们将API和Web托管在不同的服务器上,那么调用API(这是一个HTTP请求)可能需要更长的时间,而不是在创建项目并且拥有.dll时使用业务层的方法。在API控制器中,我们只是将业务量转换为json格式。 我已经在互联网上进行搜索,但没有得到令人信服的答案。我发现了一个博客http://odetocode.com/blogs/scott/archive/2013/07/01/on-the-coexistence-of-asp-net-mvc-and-webapi.aspx,但又讨论了同一点在那个博客中,我的问题是为什么我们需要考虑场景#3? 更新:我们可以有不同的API项目和MVC项目,我们可以使用jvascript从Web调用API或使用MVVM模式。

6
渐进增强与单页面应用程序
我刚从波士顿的一次会议“ An Event Apart”回来。 演讲者中一个真正流行的主题是渐进增强的想法-网站的内容应以HTML形式出现,而JavaScript仅应用于增强行为。 发言者提出的逐步提高的论点非常有说服力。它不仅是支持旧版浏览器和低带宽网络设备的可靠模式,而且HTML失败的可能性要远远超过JavaScript(例如,不支持的标记会被忽略,而如果浏览器在执行您的浏览器时抛出异常)脚本-您被水喉)。 杰里米·基思(Jeremy Keith)对此进行了特别有见地的演讲。 但是,诸如Backbone和Angular的单页Web应用程序呢?这些框架背后的整个设计似乎促使开发人员将内容移出HTML,并移入JSON API之类的东西。 我似乎无法凝结这两种设计模式:渐进式增强与单页Web应用程序。有没有一种情况比另一种更好?还是它们甚至不是对抗性技术,而我的思维模式却在这里缺失了一些东西?

6
闭包是否被视为不纯正的功能风格?
在函数式编程中,闭包是否被视为不纯? 似乎通常可以通过将值直接传递给函数来避免闭包。因此,应尽可能避免关闭? 如果它们是不纯的,并且我正确地指出可以避免使用它们,那么为什么这么多函数式编程语言支持闭包? 纯函数的标准之一是“在给定相同参数值的情况下,该函数始终求值相同结果值”。 假设 f: x -> x + y f(3)不会总是给出相同的结果。f(3)取决于的值y不是的参数f。因此f这不是一个纯粹的功能。 由于所有闭包都依赖于不是参数的值,所以任何闭包怎么可能是纯净的?是的,从理论上讲,封闭值可以是恒定的,但仅通过查看函数本身的源代码就无法知道。 这导致我想到的是,同一功能在一种情况下可能是纯净的,而在另一种情况下是不纯净的。不能总是通过研究其源代码来确定一个函数是否纯净。相反,在进行区分之前,可能必须在调用它时就其环境来考虑它。 我在想这个吗?

5
您是否应该在所有单元测试中对数据进行硬编码?
那里的大多数单元测试教程/示例通常涉及为每个单独的测试定义要测试的数据。我猜这是“一切都应该隔离测试”理论的一部分。 但是我发现,当处理具有大量DI的多层应用程序时,设置每个测试所需的代码将花费很长的时间。取而代之,我建立了许多测试库类,现在可以继承这些类,其中已经预先构建了许多测试框架。 作为此过程的一部分,我还将构建代表运行中的应用程序数据库的伪数据集,尽管每个“表”中通常只有一两行。 是否预先定义(如果不是全部)所有单元测试中的大多数测试数据,这是公认的做法吗? 更新资料 从下面的评论中,确实感觉到我在进行比单元测试更多的集成。 我当前的项目是ASP.NET MVC,它使用实体框架代码优先的工作单元和Moq进行测试。我已经模拟了UoW和存储库,但是我正在使用真实的业务逻辑类,并测试控制器操作。测试通常会检查UoW是否已提交,例如: [TestClass] public class SetupControllerTests : SetupControllerTestBase { [TestMethod] public void UserInvite_ExistingUser_DoesntInsertNewUser() { // Arrange var model = new Mandy.App.Models.Setup.UserInvite() { Email = userData.First().Email }; // Act setupController.UserInvite(model); // Assert mockUserSet.Verify(m => m.Add(It.IsAny<UserProfile>()), Times.Never); mockUnitOfWork.Verify(m => m.Commit(), Times.Once); } } SetupControllerTestBase正在构建模拟单元,并实例化userLogic。 许多测试需要在数据库中拥有现有用户或产品,因此在此示例中userData,我已经预先填充了模拟UoW返回的内容,它只是一个IList<User>用户记录。

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.