软件工程

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

8
一些语言社区(例如Ruby和Python)如何防止碎片化,而其他语言社区(例如Lisp或ML)却不能?
术语“ Lisp”(或“类似Lisp”)是许多不同语言(例如Common Lisp,Scheme和Arc)的保护伞。其他语言社区也有类似的碎片,例如ML。 但是,Ruby和Python都设法避免了这种命运,因为创新更多地在实现上发生(例如PyPy或YARV),而不是对语言本身进行更改。 Ruby和Python社区是否做了一些特殊的事情来防止语言碎片化?

6
为什么在SQL查询中的“从”之前选择“选择”?[关闭]
这件事让我在学校很困扰。 五年前,当我学习SQL时,我总是想知道为什么我们首先指定想要的字段,然后再指定它们的来源。 根据我的想法,我们应该写: From Employee e Select e.Name 那么,为什么规范说以下内容? Select e.Name -- Eeeeek, what does e mean? From Employee e -- Ok, now I know what e is 我花了数周的时间来理解SQL,而且我知道很多时间都花在了错误的元素顺序上。 就像用C#编写: string name = employee.Name; var employee = this.GetEmployee(); 因此,我认为它具有历史原因。为什么?
67 sql  history  syntax 

11
如何量化项目中存在的技术债务金额?
有谁知道是否有某种工具可以将某种代码基础的技术债务作为一种代码指标?如果不是,是否有人知道它的算法或启发式方法? 如果到目前为止这些东西都不存在,那么我将对如何开始使用这种东西感兴趣。也就是说,如何量化由方法,类,名称空间,程序集等引起的技术债务。 我对分析和评估C#代码库最感兴趣,但也请随时注意其他语言,尤其是在概念是语言超越的情况下。


10
为什么C胜过Pascal?[关闭]
我的理解是,在1980年代,也许也是在1990年代,Pascal和C在生产语言上几乎是一对一的。 帕斯卡的最终灭亡是仅由于Borland忽视了Delphi吗?还是还有更多的东西,例如运气不好或Pascal固有的错误(希望它复兴)。 我对可以支持的历史事实和观察感兴趣,而不是喜欢和不喜欢。

7
IntelliJ如何比Eclipse更好?[关闭]
我知道有一些问题,例如您最喜欢的编辑器/ IDE是什么?,但是他们都没有回答这个问题:为什么在Eclipse免费的时候花钱在IntelliJ上? 我个人是IntelliJ的忠实粉丝,但我还没有真正尝试过Eclipse。我已经将IntelliJ用于Java,JSP,HTML / CSS,Javascript,PHP和Actionscript等项目,而最新版本9 对所有这些项目都很出色。 过去,许多同事告诉我,他们相信Eclipse与IntelliJ“几乎相同”,但是为了解决这一点,我偶尔会坐在使用Eclipse的开发人员的后面,该开发人员的效率似乎相当低(完成大致相同的操作)任务),而我在IntelliJ中还没有经历过。它们可能逐个功能地相提并论,但是糟糕的用户体验可能会破坏功能,并且我想知道IntelliJ是否有可能更容易获得和发现节省时间的功能。 对于已经熟悉Eclipse的用户,除了IntelliJ的实际成本之外,还有花费时间来学习新应用程序。Eclipse吸引了许多不想在IDE上花费250美元的用户。 如果IntelliJ确实可以帮助我的团队提高生产力,那么我如何将其出售给他们?对于同时尝试过这两种方式的用户,我会对这两种方式的优点或缺点都非常感兴趣。
67 java  ide  eclipse  intellij 

11
如果存在智能指针,为什么要进行垃圾回收
如今,垃圾收集了许多语言。第三方甚至可以使用C ++。但是C ++具有RAII和智能指针。那么使用垃圾回收有什么意义呢?它在做额外的事情吗? 在其他语言(例如C#)中,如果所有引用都被视为智能指针(不考虑RAII),那么按照规范和实现,是否还会需要垃圾收集器?如果否,那为什么不是呢?

9
缺乏编译器错误词汇表使新手程序员感到沮丧
我一家人的朋友在学习编程(用C语言)时向我寻求帮助。在我们交谈时,他对很难理解自己的编译器(GCC)在出错时向他发送的错误消息感到沮丧。他不理解所有使用的术语,有时是它们的组合超出了他的理解。他问我:“编译器文档为什么不包含对错误消息的更长解释?” 我对他没有一个好的答案。 我本人-作为一个经验丰富的程序员-在这种情况下很少见,但那些罕见的情况确实发生了-我以前从未遇到过的一些奇怪的错误消息。我设法在搜索引擎中查找错误消息,但是显然这并不总是对他有用-尤其是因为他遇到的错误更常见并且发生在多个不同的情况下,这与他的问题有关拥有。 那么,新手程序员应该如何应对理解编译器错误消息的挑战?具体来说,结合C和GCC?

10
语法设计-为什么在不传递任何参数的情况下使用括号?
在许多语言中,语法function_name(arg1, arg2, ...)用于调用函数。当我们想不带任何参数地调用函数时,我们必须这样做function_name()。 我感到奇怪的是,编译器或脚本解释器需要()成功将其检测为函数调用。如果已知一个变量是可调用的,那为什么还function_name;不够? 另一方面,在某些语言中,我们可以执行以下操作:function_name 'test';甚至function_name 'first' 'second';可以调用函数或命令。 我认为如果只需要用括号声明优先顺序,括号会更好,而在其他地方则是可选的。例如,doing if expression == true function_name;应该和一样有效if (expression == true) function_name();。 我认为最烦人的事情是'SOME_STRING'.toLowerCase()原型函数显然不需要参数时。设计师为什么决定反对更简单的选择'SOME_STRING'.lower? 免责声明:不要误会我的意思,我喜欢类似C的语法!;)我只是在问是否会更好。需求是否()具有任何性能优势,还是使理解代码更容易?我真的很好奇原因到底是什么。

9
存储库应该返回IQueryable吗?
我已经看到很多项目的存储库返回的实例IQueryable。这允许其他过滤器,并且可以IQueryable通过其他代码对进行排序,从而转换为正在生成的不同SQL。我很好奇这种模式的来源以及它是否是一个好主意。 我最大的担心是,一个IQueryable被枚举的承诺会在一段时间后打入数据库。这意味着将向存储库外部抛出错误。这可能意味着在应用程序的不同层中引发了Entity Framework异常。 过去,我也遇到过多个活动结果集(MARS)的问题(尤其是在使用事务时),这种方法听起来更容易导致这种情况的发生。 我总是在每个LINQ表达式的末尾调用AsEnumerable或ToArray,以确保在离开存储库代码之前已命中数据库。 我想知道返回IQueryable是否可用作数据层的构建块。我已经看到一些相当奢侈的代码,其中一个存储库调用另一个存储库以构建更大的代码IQueryable。

13
为什么“较低”的应用程序层不了解“较高”的层是一个好主意?
在典型的(设计良好的)MVC Web应用程序中,数据库不知道模型代码,模型代码不知道控制器代码,并且控制器代码不知道视图代码。(我想您甚至可以从硬件开始甚至更远的地方开始,而且模式可能相同。) 换个方向,您只能向下移动一层。视图可以知道控制器,但不能知道模型。控制器可以知道模型,但不能知道数据库;该模型可以识别数据库,但不能识别操作系统。(更深层次的内容可能无关紧要。) 我可以直观地理解为什么这是一个好主意,但我无法明确表达。为什么这种单向分层样式是个好主意?

12
验证其参数的构造函数是否违反SRP?
我试图尽可能地遵守单一职责原则(SRP),并且习惯了某种严重依赖委托的特定模式(对于方法上的SRP)。我想知道这种方法是否合理,或者是否存在严重问题。 例如,要检查对构造函数的输入,我可以引入以下方法(Stream输入是随机的,可以是任何东西) private void CheckInput(Stream stream) { if(stream == null) { throw new ArgumentNullException(); } if(!stream.CanWrite) { throw new ArgumentException(); } } 这种方法(可以说)做的不止一件事 检查输入 引发不同的异常 因此,为了遵守SRP,我将逻辑更改为 private void CheckInput(Stream stream, params (Predicate<Stream> predicate, Action action)[] inputCheckers) { foreach(var inputChecker in inputCheckers) { if(inputChecker.predicate(stream)) { inputChecker.action(); } } } 据说哪件事只会做一件事(是吗?):检查输入。对于输入的实际检查和异常的抛出,我介绍了类似的方法 bool …


13
我老板的坏案是“这里没有发明”
我的部门专门致力于将客户数据转换为我们的数据库架构,以便他们可以使用我们的软件。 现在,我们有一些C#应用程序IDataReader(占99%的时间SqlDataReader),执行一些清理和映射,将其插入到DataRow对象中,然后使用将SqlBulkCopy其插入到我们的数据库中。 有时(尤其是当源数据库包含图像作为varbinary对象时),此过程实际上可能陷入从服务器到应用程序的SQL传输,然后又转过来再返回到服务器。 我觉得,如果我们将某些转换重写为SSIS软件包,则可以大大加快转换速度。但是,我遇到的最大障碍是当我的老板以“在这里没有发明”的方式退缩并说:“如果Microsoft放弃对SSIS的支持,那该怎么办?我们将拥有所有这些过时的代码,并且将被搞砸。” 这不是我第一次点击“如果他们删除了该功能...?” 我老板的回答。我没有时间以旧的方式编写转换,自我学习SSIS,也没有以新的方式编写它来演示/测试收益(我们都没有人使用过SSIS,所以会有一段时间必须学习如何使用它)。 在这种情况下我该怎么办?停止推广新技术?等到他离开部门后(我是继他之后部门中第二高的人,但是离职/退休可能还需要几年时间)?寻找一种新方法让他停止害怕第三方工具?

15
我将因为我们的平台而辞职:我该如何对此做出富有成效的解释?[关闭]
我打算离开目前的工作,因为我们被限制在平庸的共享主机上使用Blub和企业Blub框架以及Blub级别的Web服务器。我的同事很友善,我的老板是普通的小企业主-我想完全出于技术原因离开。我觉得被Blub浸透对我的大脑有害,并使我成为一个更糟糕的程序员。 当我离开时,如何向老板和同事解释?如何有效表达对Blub的投诉?我可以向我的继任者提供什么样的警告? (试图确保我符合标准)

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.