软件工程

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

12
自动生成代码文档是否有逻辑上的原因?[关闭]
可以使用多种工具来自动生成文档,其中GhostDoc是其中最著名的一种。但是,根据定义,它生成的所有内容都是多余的。它查看方法,类等的名称,并输出可能更详细地解释它们的英语。在最好的情况下,它可以完成读者头脑中已经可以做的事情(示例取自此处): /// <summary> /// Initializes a new instance of the <see cref="Person"/> class. /// </summary> public Person() ... 在最坏的情况下,它最终可能会生成奇怪的文档,而这些文档实际上在试图启发性地弄清名称的含义时具有误导性: /// <summary> /// Riches the text selection changed. /// </summary> /// <param name="richTextBox">The rich text box.</param> private void RichTextSelection_Changed(System.Windows.Controls.RichTextBox richTextBox) ... 似乎对GhostDoc的态度是,“本质上来说,拥有某种形式的 XML文档会更好”,但是当该文档100%冗余时,为什么呢?充其量只是在浪费大量的空间吗? 在我的工作场所,我们几乎必须始终使用GhostDoc的自动生成的文档来记录所有内容。您这样做是不是有合理的理由,如果您不想自己亲自编写文档,则不要简单地将代码保留在文档之外?

1
安排第三方图书馆许可“文书工作”的最佳实践是什么?
我正在开发一个小型开源项目。该应用程序使用发行了许多许可证的许多第三方库:Apache,MIT,BSD,LGPL和CDDL。 这些许可证中的每一个都有其自己的“文书工作”要求。例如,Apache许可证v2.0指出: 如果作品包括“注意”文本文件作为其分发的一部分,则您分发的任何衍生作品都必须包括该通知文件中包含的署名声明的可读副本。 MIT许可证包含版权声明,并指出: 以上版权声明和本许可声明应包含在本软件的所有副本或大部分内容中。 BSD许可证还包含版权声明,并指出: 二进制形式的重新分发必须在分发随附的文档和/或其他材料中复制以上版权声明,此条件列表以及以下免责声明。 LGPL v.3说: (您应该)在合并作品的每份副本中都特别注明使用了该库,并且该许可证涵盖了该库及其使用。 LGPL和CDDL许可证还要求提供源代码以及库的二进制形式,因此应在某处提供有关获取源代码的方式的信息。 整理所有这些数据的最佳实践是什么?我是否应该创建一个文本文件并将所有NOTICE文件,MIT和BSD许可证等的内容复制到该文件中?...还是应该为每个库创建一个单独的目录,然后将与该库相关的所有数据放入该目录?… 或者是其他东西? 在已发布的项目中看到此“文书”的任何示例也将很有趣。 更新: 我已阅读您是否必须在每个源文件中都包含许可证声明?,但不能解决我的问题。我的问题与项目中使用的第三方库有关,而该问题与项目自己的源代码中的标头有关。

3
为什么JavaScript框架/库具有纯JavaScript中已经存在的功能?
我想知道为什么框架/库虽然本身已经存在,但是却有自己的帮助器。 让我们以jQuery和AngularJS为例。它们具有自己的each迭代器功能: jQuery.each() angular.forEach() 但是我们有Array.prototype.forEach。 同样, jQuery.parseJSON() angular.fromJson() 但是我们JSON.parse()在原始JavaScript中具有该功能。

3
RESTful API中的斜杠
我一直在争论如何使用RESTful API中的斜杠。 可以说我有一个称为狗的资源,而每个狗都有从属资源。因此,我们可以执行以下操作: GET/PUT/POST/DELETE http://example.com/dogs GET/PUT/POST/DELETE http://example.com/dogs/{id} 但是,如何处理以下特殊情况: GET/PUT/POST/DELETE http://example.com/dogs/ 我个人的观点是,这是向id = =的单个狗资源发送请求null。我认为在这种情况下,API应该返回404。 其他人则说请求正在访问dogs资源,即尾部的斜杠将被忽略。 有人知道最终答案吗?
60 api  rest  http 

5
R与Python进行数据分析[关闭]
我已经进行了大约一年的编程,并且我对数据分析和机器学习非常感兴趣。我正在参加一些在线课程,并且正在阅读几本书。 我正在做的所有事情都使用R或Python,并且我正在寻找有关是否应该专注于一种语言(如果需要的话)还是同时使用这两种语言的建议。他们互相补充吗? -我应该提到我在学校使用C#,但是通过自学熟悉了Python。

9
语言为什么不包含隐含逻辑运算符?
这可能是一个奇怪的问题,但是为什么在许多语言(Java,C,C ++,Python Haskell中没有逻辑操作符的含义),尽管最后一个用户添加了用户定义的操作符却无足轻重吗?我发现逻辑含义要清晰得多(特别是在断言或类似断言的表达式中),然后用or进行否定: encrypt(buf, key, mode, iv = null) { assert (mode != ECB --> iv != null); assert (mode == ECB || iv != null); assert (implies(mode != ECB, iv != null)); // User-defined function }

7
在C ++中将作用域枚举用于位标志
一个enum X : int(C#)或enum class X : int(C ++ 11)是具有一个隐藏的内部场类型int,可容纳任何值。另外,X在枚举上定义了许多预定义的常量。可以将枚举转换为其整数值,反之亦然。在C#和C ++ 11中都是如此。 在C#中,按照Microsoft的建议,枚举不仅用于保存单个值,而且还用于保存标志的按位组合。此类枚举(通常但并非必须)用[Flags]属性修饰。为了简化开发人员的工作,按位运算符(OR,AND等)被重载,因此您可以轻松地执行以下操作(C#): void M(NumericType flags); M(NumericType.Sign | NumericType.ZeroPadding); 我是一位经验丰富的C#开发人员,但是现在仅对C ++进行了几天的编程,并且不了解C ++约定。我打算以与C#中使用的完全相同的方式使用C ++ 11枚举。在C ++ 11中,作用域枚举上的按位运算符没有重载,因此我想重载它们。 这引发了一场辩论,意见似乎在以下三种选择之间有所不同: 枚举类型的变量用于保存位字段,类似于C#: void M(NumericType flags); // With operator overloading: M(NumericType::Sign | NumericType::ZeroPadding); // Without operator overloading: M(static_cast<NumericType>(static_cast<int>(NumericType::Sign) | static_cast<int>(NumericType::ZeroPadding))); 但这会违背C ++ 11范围枚举的强类型枚举哲学。 如果要存储枚举的按位组合,请使用纯整数: void …

12
通过多个层传递实例是不好的做法吗?
在程序设计中,我经常遇到必须将对象实例传递给多个类的情况。例如,如果我有一个加载音频文件的控制器,然后将其传递给播放器,然后播放器将其传递给playerRunnable,后者又将其传递到其他地方,等等。这看起来很糟糕,但我没有知道如何避免。还是可以这样做? 编辑:也许播放器示例不是最好的,因为我以后可以加载文件,但是在其他情况下不起作用。

11
如何判断您的程序员是否表现不佳?[关闭]
我是5位以上开发人员的团队负责人。我有一个开发人员(我们称其为A),他是一名优秀的程序员,并且编写了清晰,易于理解的代码。但是他管理起来有些困难,有时我想知道他是否真的表现不佳。 我们公司要求开发人员在我们使用的错误跟踪器中指示工作进度,而不仅仅是监视程序员,而是让利益相关者随时了解进度。问题是,一个在完成时(也许3周后,首先在工作),这每个人都留下想知道什么是在开发一周的中间去上只更新任务进度。尽管反复探测,他还是不会改变习惯。(没关系,开发人员也讨厌文书工作,我也这样做) 最近2-3个月,他经常因各种事件而休假-生病或不得不参加很多个人活动等。(没关系,坏事连连发生。这只是一个巧合) 我们为每个月定义冲刺或路线图。在sprint的开始部分,我们将讨论每个开发人员在sprint中必须完成的工作量,并且开发人员可以设置每个任务所需的时间。他通常将无法完成所有这些任务。(没关系,开发人员通常会由于他们的过错而错过最后期限)。 我在新加坡工作。不确定是否重要。是的,众所周知亚洲人比较沉默寡言,但这有关系吗? 如果仅上述事件中的一两个发生,我不会觉得A的表现不佳,但是它们同时发生。所以,我有感觉,那一个是执行下和maybe--上帝保佑---懈怠。 这只是基于我作为程序员的多年经验而得出的一种感觉。但是我可能是错的。 众所周知,要衡量程序员的工作非常困难,因为并非所有两个任务都是一样的,并且缺乏衡量程序员对公司的承诺的标准目标。很难断定程序员是在做他的工作还是在懈怠。您所能做的就是信任他们-是的,信任并赋予他们自治权是程序员工作的最佳方式,我知道,所以不要开始讲解为什么需要信任程序员,谢谢大家很多 -但是如果他们滥用您的信任,您知道吗? 结果: 关于他对他的表现的看法,我与他直接交谈。当我建议我感到他没有达到最佳状态时,他很愤慨。他觉得这是一种完全不公平的感觉。然后我回答说这就是我的感觉,我不知道我的感觉是否正确。他将一无所有,并立即结束了讨论。 在他离开之前,他说他“会努力向公司付出更多”。他的反应使我大吃一惊。我确信我在某些方面冒犯了他。不过,我不太确定这是否对我来说是如此正确,以至于他如此坦率。 我的问题是:如何判断您的程序员表现不佳?当然,有经验丰富的团队负责人在这方面比我更了解吗? 额外说明: 我讨厌微观管理。因此,我们在软件流程中所需要的就是Sprint(优先级和任务分配,并在月底检查完成的工作量)。开发人员每天都需要更新任务。 没有站立会议,或其他任何形式的会议。主要是因为我们有在家工作的自由,每个人都珍惜这种自由。 尽管我是确定截止日期的人,但是开发人员将提供每个任务的预算,然后我将根据该预算确定进入特定冲刺的任务。如果他们不能在冲刺结束时完成任务,我将把他们推到下一个任务。因此,从理论上讲,一个人在整个Sprint中只能执行1或2个任务,然后将剩余的99个任务推到下一个Sprint,但只要证明了这一点,他就可以了-以日常工作进度更新的形式

9
开发人员还应该充当测试人员吗?[关闭]
我们是一个由3个开发人员,1个设计师,1个Scrum管理员和1个产品所有者组成的Scrum团队。但是,我们的团队中没有官方测试人员。我们一直面临的问题是,测试应用程序并通过这些测试并消除错误已被视为考虑完成PBI(产品待办事项)的标准之一。 但是问题在于,无论我们(3位开发人员和1位设计师)尝试测试应用程序和已实现的用例的多少,仍然看不到一些错误,并且破坏了向利益相关者的展示(墨菲定律)。 作为补救措施,我们建议公司雇用新的测试人员。工作的人只能进行测试,并且只能进行测试。官方专业测试人员。 但是,问题在于,Scrum负责人和利益相关者认为开发人员(或设计师)也应该是测试人员。 对吗 我们开发人员(还是设计师)也应该成为测试人员吗?
60 testing  scrum 

11
为什么使用抽象(例如LINQ)如此禁忌?[关闭]
我是一个独立承包商,因此,我每年要面试3-4次新演出。我现在正处于那个周期之中,尽管我觉得面试进行得很顺利,但还是被拒绝了。今年我发生了两次相同的事情。 现在,我不是一个完美的人,而且我不希望每个组织都适合。就是说,我的平均命中率比平时低,所以我礼貌地向我的最后一个面试官询问一些建设性的反馈意见,他答应了! 根据访问者的说法,最主要的是,我似乎过于倾向于使用抽象(例如LINQ),而不是倾向于较低级别的有机增长算法。 从表面上看,这是有道理的-实际上,这也使其他拒绝也有意义,因为我在那些访谈中也对LINQ感到不满,而且访调员似乎对LINQ并不了解很多(即使他们是.NET)。伙计们)。 因此,现在我要提一个问题:如果我们应该“站在巨人的肩膀上”并使用我们可以使用的抽象(如LINQ),那么为什么有些人认为它是忌讳的呢?如果代码无需花费额外成本即可达到相同的目标,那么将代码“下架”是否有意义? 在我看来,LINQ,即使它是一种抽象,也只是对为实现完全相同的目的而编写的所有相同算法的抽象。只有性能测试可以告诉您您的自定义方法是否更好,但是如果LINQ之类的东西满足要求,为什么首先要编写自己的类呢? 我的意思不是在这里专注于LINQ。我敢肯定,JAVA世界具有可比性,我只是想知道为什么有些人对使用他们自己未编写的抽象的想法感到如此不舒服。 更新 正如Euphoric指出的那样,在Java世界中,没有任何东西可以与LINQ相提并论。 因此,如果您是在.NET堆栈上进行开发,为什么不总是尝试使用它呢?人们是否可能不完全了解它的作用?

10
是否有工作时间太长的事情?[关闭]
在最近阅读了一些与“工作跳跃”相关的主题之后,我一直在思考工作跳跃的反面也可能是一个问题。 我知道许多人(尤其是在规模相对较弱的公司中)对轻松,挑战性的角色感到自在,并且待了很长的时间-例如10或15年甚至更长。他们可能在内部进行了一些调动,但正如经验丰富的招聘经理所言,这主要是“ 一年经验超过15倍 ”的情况。换句话说,它们是“特殊项目”案例。只是坐在一个舒适的角色上,不再进行任何学习,但是如果他们所涉及的各种内容都得到点缀,那么在纸上(在他们的简历上)看起来就可以了。 我真正想到的是,我的简历中担任最长职位(将近6年)的职位在某种程度上(至少是适度地)属于这一类别。如果我完全是理智的诚实的人,那我说我真的只有3年坚实的学习经验。最近的2-3年是轻松的维护模式。因此,我第一手知道,比起拥有15年经验的许多“资深人士”(如果他们一直从事这样的工作),可能没有那么广泛的经验和“资深”(就拥有15年的工作经验而言)经验)。 所以我的问题是-在同一工作中徘徊很长时间是否会引起任何危险?例如:如果您看到一个简历,大学毕业后只有一份15年的工作,而不是经验相同的人有4-5年的工作经历,那么单身汉看起来是否像一个“特殊项目” “为什么只有一份很长的工作?我的经验表明这很有可能。或者至少具有5年任职经历的人可能经历了各种角色,环境和技术(即使在所有工作中使用相同的技术,也具有不同的用途),因此更具活力和适应能力。 编辑:请注意,我个人并不担心自己的历史看起来像这样。我在上述职位中任职时间最长的例子只是一个轻松的长期职位可能发生的情况的简短示例,这使我从总体上考虑了这一点(如果有的话,我的实际工作经历(除了那个最长的职位)倾向于一点点太工作了)。

18
处理别人的代码[关闭]
我几乎没有一年的编码经验。开始工作后,大多数时候我都会处理别人的代码,或者在现有功能上添加新功能,或者修改现有功能。编写实际代码的人在我公司不再工作。我很难理解他的代码并完成任务。每当我尝试修改代码时,我都会以某种方式弄乱正常工作的功能。在处理别人的代码时,我应该牢记什么?

16
if / return的最佳做法
我想知道当我有if陈述时被认为是更好的返回方法。 范例1: public bool MyFunction() { // Get some string for this example string myString = GetString(); if (myString == null) { return false; } else { myString = "Name " + myString; // Do something more here... return true; } } 范例2: public bool MyFunction() { // Get some …

5
如何向非技术人员解释为什么任务将花费比他们想象的更长的时间?[关闭]
几乎每个开发人员都必须回答业务方面的问题,例如: 为什么要花两天的时间来添加此简单的联系表? 当开发人员估计此任务时,他们可以将其分为以下步骤: 对数据库进行一些更改 优化数据库更改以提高速度 添加前端HTML 编写服务器端代码 添加验证 添加客户端JavaScript 使用单元测试 确保SEO设置正常 实施电子邮件确认 重构和优化代码以提高速度 ... 这些对于非技术人员来说可能很难解释,他们基本上将整个任务看作只是组合一些HTML并创建一个表来存储数据。对他们来说,最长可能需要2个小时。 那么,有没有更好的方法可以解释为什么对非开发人员来说估算值很高?

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.